diff --git a/common.props b/common.props index 8b0b8291c4..a6d559c52c 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 2.5.0 + 2.6.0 $(NoWarn);CS1591 https://abp.io/assets/abp_nupkg.png https://abp.io diff --git a/docs/en/AutoMapper-Integration.md b/docs/en/AutoMapper-Integration.md deleted file mode 100644 index d197861f25..0000000000 --- a/docs/en/AutoMapper-Integration.md +++ /dev/null @@ -1,3 +0,0 @@ -## AutoMapper Integration - -TODO \ No newline at end of file diff --git a/docs/en/Best-Practices/Application-Services.md b/docs/en/Best-Practices/Application-Services.md index 0979304931..876105c214 100644 --- a/docs/en/Best-Practices/Application-Services.md +++ b/docs/en/Best-Practices/Application-Services.md @@ -17,17 +17,18 @@ ##### Basic DTO -**Do** define a **basic** DTO for an entity. +**Do** define a **basic** DTO for an aggregate root. -- Include all the **primitive properties** directly on the entity. - - Exception: Can **exclude** properties for **security** reasons (like User.Password). +- Include all the **primitive properties** directly on the aggregate root. + - Exception: Can **exclude** properties for **security** reasons (like `User.Password`). - Include all the **sub collections** of the entity where every item in the collection is a simple **relation DTO**. +- Inherit from one of the **extensible entity DTO** classes for aggregate roots (and entities implement the `IHasExtraProperties`). Example: ```c# [Serializable] -public class IssueDto : FullAuditedEntityDto +public class IssueDto : ExtensibleFullAuditedEntityDto { public string Title { get; set; } public string Text { get; set; } @@ -57,7 +58,7 @@ Example: ````C# [Serializable] -public class IssueWithDetailsDto : FullAuditedEntityDto +public class IssueWithDetailsDto : ExtensibleFullAuditedEntityDto { public string Title { get; set; } public string Text { get; set; } @@ -66,14 +67,14 @@ public class IssueWithDetailsDto : FullAuditedEntityDto } [Serializable] -public class MilestoneDto : EntityDto +public class MilestoneDto : ExtensibleEntityDto { public string Name { get; set; } public bool IsClosed { get; set; } } [Serializable] -public class LabelDto : EntityDto +public class LabelDto : ExtensibleEntityDto { public string Name { get; set; } public string Color { get; set; } @@ -120,6 +121,7 @@ Task> GetListAsync(QuestionListQueryDto queryDto); * **Do** use the `CreateAsync` **method name**. * **Do** get a **specialized input** DTO to create the entity. +* **Do** inherit the DTO class from the `ExtensibleObject` (or any other class implements the `IHasExtraProperties`) to allow to pass extra properties if needed. * **Do** use **data annotations** for input validation. * Share constants between domain wherever possible (via constants defined in the **domain shared** package). * **Do** return **the detailed** DTO for new created entity. @@ -135,10 +137,11 @@ The related **DTO**: ````C# [Serializable] -public class CreateQuestionDto +public class CreateQuestionDto : ExtensibleObject { [Required] - [StringLength(QuestionConsts.MaxTitleLength, MinimumLength = QuestionConsts.MinTitleLength)] + [StringLength(QuestionConsts.MaxTitleLength, + MinimumLength = QuestionConsts.MinTitleLength)] public string Title { get; set; } [StringLength(QuestionConsts.MaxTextLength)] @@ -152,6 +155,7 @@ public class CreateQuestionDto - **Do** use the `UpdateAsync` **method name**. - **Do** get a **specialized input** DTO to update the entity. +- **Do** inherit the DTO class from the `ExtensibleObject` (or any other class implements the `IHasExtraProperties`) to allow to pass extra properties if needed. - **Do** get the Id of the entity as a separated primitive parameter. Do not include to the update DTO. - **Do** use **data annotations** for input validation. - Share constants between domain wherever possible (via constants defined in the **domain shared** package). @@ -200,6 +204,10 @@ This method votes a question and returns the current score of the question. * **Do not** use LINQ/SQL for querying data from database inside the application service methods. It's repository's responsibility to perform LINQ/SQL queries from the data source. +#### Extra Properties + +* **Do** use either `MapExtraPropertiesTo` extension method ([see](Object-Extensions.md)) or configure the object mapper (`MapExtraProperties`) to allow application developers to be able to extend the objects and services. + #### Manipulating / Deleting Entities * **Do** always get all the related entities from repositories to perform the operations on them. diff --git a/docs/en/Best-Practices/Data-Transfer-Objects.md b/docs/en/Best-Practices/Data-Transfer-Objects.md index 0c8580abb7..0fca0e86f2 100644 --- a/docs/en/Best-Practices/Data-Transfer-Objects.md +++ b/docs/en/Best-Practices/Data-Transfer-Objects.md @@ -2,6 +2,7 @@ * **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). + * **Do** inherit from the **extensible DTO** classes for the **aggregate roots** (like `ExtensibleAuditedEntityDto`), because aggregate roots are extensible objects and extra properties are mapped to DTOs in this way. * **Do** define DTO members with **public getter and setter**. * **Do** use **data annotations** for **validation** on the properties of DTOs those are inputs of the service. * **Do** not add any **logic** into DTOs except implementing `IValidatableObject` when necessary. diff --git a/docs/en/CLI.md b/docs/en/CLI.md index f0fd3ae7bd..b687a5244a 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -61,6 +61,7 @@ abp new Acme.BookStore * `--template-source` or `-ts`: Specifies a custom template source to use to build the project. Local and network sources can be used(Like `D\localTemplate` or `https://.zip`). * `--create-solution-folder` or `-csf`: Specifies if the project will be in a new folder in the output folder or directly the output folder. * `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true`. You can set your own connection string if you don't want to use the default. Be aware that the default database provider is `SQL Server`, therefore you can only enter connection string for SQL Server! +* `--local-framework-ref --abp-path`: keeps local references to projects instead of replacing with NuGet package references. ### add-package diff --git a/docs/en/Customizing-Application-Modules-Extending-Entities.md b/docs/en/Customizing-Application-Modules-Extending-Entities.md index be28465ff7..dcfe30c019 100644 --- a/docs/en/Customizing-Application-Modules-Extending-Entities.md +++ b/docs/en/Customizing-Application-Modules-Extending-Entities.md @@ -58,8 +58,6 @@ You can then use the same extra properties system defined in the previous sectio ## Creating a New Entity Maps to the Same Database Table/Collection -While using the extra properties approach is **easy to use** and suitable for some scenarios, it has some drawbacks described in the [entities document](Entities.md). - Another approach can be **creating your own entity** mapped to **the same database table** (or collection for a MongoDB database). `AppUser` entity in the [application startup template](Startup-Templates/Application.md) already implements this approach. [EF Core Migrations document](Entity-Framework-Core-Migrations.md) describes how to implement it and manage **EF Core database migrations** in such a case. It is also possible for MongoDB, while this time you won't deal with the database migration problems. diff --git a/docs/en/Customizing-Application-Modules-Overriding-Services.md b/docs/en/Customizing-Application-Modules-Overriding-Services.md index b735d51f6f..d58f0f8565 100644 --- a/docs/en/Customizing-Application-Modules-Overriding-Services.md +++ b/docs/en/Customizing-Application-Modules-Overriding-Services.md @@ -161,6 +161,105 @@ Check the [localization system](Localization.md) to learn how to localize the er Overriding controllers, framework services, view component classes and any other type of classes registered to dependency injection can be overridden just like the examples above. +## Extending Data Transfer Objects + +**Extending [entities](Entities.md)** is possible as described in the [Extending Entities document](Customizing-Application-Modules-Extending-Entities.md). In this way, you can add **custom properties** to entities and perform **additional business logic** by overriding the related services as described above. + +It is also possible to extend Data Transfer Objects (**DTOs**) used by the application services. In this way, you can get extra properties from the UI (or client) and return extra properties from the service. + +### Example + +Assuming that you've already added a `SocialSecurityNumber` as described in the [Extending Entities document](Customizing-Application-Modules-Extending-Entities.md) and want to include this information while getting the list of users from the `GetListAsync` method of the `IdentityUserAppService`. + +You can use the [object extension system](Object-Extensions.md) to add the property to the `IdentityUserDto`. Write this code inside the `YourProjectNameDtoExtensions` class comes with the application startup template: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber" + ); +```` + +This code defines a `SocialSecurityNumber` to the `IdentityUserDto` class as a `string` type. That's all. Now, if you call the `/api/identity/users` HTTP API (which uses the `IdentityUserAppService` internally) from a REST API client, you will see the `SocialSecurityNumber` value in the `extraProperties` section. + +````json +{ + "totalCount": 1, + "items": [{ + "tenantId": null, + "userName": "admin", + "name": "admin", + "surname": null, + "email": "admin@abp.io", + "emailConfirmed": false, + "phoneNumber": null, + "phoneNumberConfirmed": false, + "twoFactorEnabled": false, + "lockoutEnabled": true, + "lockoutEnd": null, + "concurrencyStamp": "b4c371a0ab604de28af472fa79c3b70c", + "isDeleted": false, + "deleterId": null, + "deletionTime": null, + "lastModificationTime": "2020-04-09T21:25:47.0740706", + "lastModifierId": null, + "creationTime": "2020-04-09T21:25:46.8308744", + "creatorId": null, + "id": "8edecb8f-1894-a9b1-833b-39f4725db2a3", + "extraProperties": { + "SocialSecurityNumber": "123456789" + } + }] +} +```` + +Manually added the `123456789` value to the database for now. + +All pre-built modules support extra properties in their DTOs, so you can configure easily. + +### Definition Check + +When you [define](Customizing-Application-Modules-Extending-Entities.md) an extra property for an entity, it doesn't automatically appear in all the related DTOs, because of the security. The extra property may contain a sensitive data and you may not want to expose it to the clients by default. + +So, you need to explicitly define the same property for the corresponding DTO if you want to make it available for the DTO (as just done above). If you want to allow to set it on user creation, you also need to define it for the `IdentityUserCreateDto`. + +If the property is not so secure, this can be tedious. Object extension system allows you to ignore this definition check for a desired property. See the example below: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber", + options => + { + options.MapEfCore(b => b.HasMaxLength(32)); + options.CheckPairDefinitionOnMapping = false; + } + ); +```` + +This is another approach to define a property for an entity (`ObjectExtensionManager` has more, see [its document](Object-Extensions.md)). This time, we set `CheckPairDefinitionOnMapping` to false to skip definition check while mapping entities to DTOs and vice verse. + +If you don't like this approach but want to add a single property to multiple objects (DTOs) easier, `AddOrUpdateProperty` can get an array of types to add the extra property: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + new[] + { + typeof(IdentityUserDto), + typeof(IdentityUserCreateDto), + typeof(IdentityUserUpdateDto) + }, + "SocialSecurityNumber" + ); +```` + +### About the User Interface + +This system allows you to add extra properties to entities and DTOs and execute custom business code, however it does nothing related to the User Interface. + +See [Overriding the User Interface](Customizing-Application-Modules-Overriding-User-Interface.md) guide for the UI part. + ## How to Find the Services? [Module documents](Modules/Index.md) includes the list of the major services they define. In addition, you can investigate [their source code](https://github.com/abpframework/abp/tree/dev/modules) to explore all the services. \ No newline at end of file diff --git a/docs/en/Entity-Framework-Core-Migrations.md b/docs/en/Entity-Framework-Core-Migrations.md index 5a8e955701..e0772579ec 100644 --- a/docs/en/Entity-Framework-Core-Migrations.md +++ b/docs/en/Entity-Framework-Core-Migrations.md @@ -882,4 +882,4 @@ This document explains how to split your databases and manage your database migr ## Source Code -You can find the source code of the example project referenced by this document [here](https://github.com/abpframework/abp/tree/dev/samples/EfCoreMigrationDemo). However, you need to read and understand this document in order to understand the example project's source code. \ No newline at end of file +You can find the source code of the example project referenced by this document [here](https://github.com/abpframework/abp-samples/tree/master/EfCoreMigrationDemo). However, you need to read and understand this document in order to understand the example project's source code. \ No newline at end of file diff --git a/docs/en/Object-Extensions.md b/docs/en/Object-Extensions.md index fad3ff2b0c..bbcb96374c 100644 --- a/docs/en/Object-Extensions.md +++ b/docs/en/Object-Extensions.md @@ -1,3 +1,267 @@ # Object Extensions -TODO \ No newline at end of file +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. + +> Object extension system is not normally not needed for your own objects since you can easily add regular properties to your own classes. + +## IHasExtraProperties Interface + +This is the interface to make a class extensible. It simply defines a `Dictionary` property: + +````csharp +Dictionary ExtraProperties { get; } +```` + +Then you can add or get extra properties using this dictionary. + +### Base Classes + +`IHasExtraProperties` interface is implemented by several base classes by default: + +* Implemented by the `AggregateRoot` class (see [entities](Entities.md)). +* Implemented by `ExtensibleEntityDto`, `ExtensibleAuditedEntityDto`... base [DTO](Data-Transfer-Objects.md) classes. +* Implemented by the `ExtensibleObject`, which is a simple base class can be inherited for any type of object. + +So, if you inherit from these classes, your class will also be extensible. If not, you can always implement it manually. + +### Fundamental Extension Methods + +While you can directly use the `ExtraProperties` property of a class, it is suggested to use the following extension methods while working with the extra properties. + +#### SetProperty + +Used to set the value of an extra property: + +````csharp +user.SetProperty("Title", "My Title"); +user.SetProperty("IsSuperUser", true); +```` + +`SetProperty` returns the same object, so you can chain it: + +````csharp +user.SetProperty("Title", "My Title") + .SetProperty("IsSuperUser", true); +```` + +#### GetProperty + +Used to read the value of an extra property: + +````csharp +var title = user.GetProperty("Title"); + +if (user.GetProperty("IsSuperUser")) +{ + //... +} +```` + +* `GetProperty` is a generic method and takes the object type as the generic parameter. +* Returns the default value if given property was not set before (default value is `0` for `int`, `false` for `bool`... etc). + +##### Non Primitive Property Types + +If your property type is not a primitive (int, bool, enum, string... etc) type, then you need to use non-generic version of the `GetProperty` which returns an `object`. + +#### HasProperty + +Used to check if the object has a property set before. + +#### RemoveProperty + +Used to remove a property from the object. Use this methods instead of setting a `null` value for the property. + +### Some Best Practices + +Using magic strings for the property names is dangerous since you can easily type the property name wrong - it is not type safe. Instead; + +* Define a constant for your extra property names +* Create extension methods to easily set your extra properties. + +Example: + +````csharp +public static class IdentityUserExtensions +{ + private const string TitlePropertyName = "Title"; + + public static void SetTitle(this IdentityUser user, string title) + { + user.SetProperty(TitlePropertyName, title); + } + + public static string GetTitle(this IdentityUser user) + { + return user.GetProperty(TitlePropertyName); + } +} +```` + +Then you can easily set or get the `Title` property: + +````csharp +user.SetTitle("My Title"); +var title = user.GetTitle(); +```` + +## Object Extension Manager + +While you can set arbitrary properties to an extensible object (which implements the `IHasExtraProperties` interface), `ObjectExtensionManager` is used to explicitly define extra properties for extensible classes. + +Explicitly defining an extra property has some use cases: + +* Allows to control how the extra property is handled on object to object mapping (see the section below). +* Allows to define metadata for the property. For example, you can map an extra property to a table field in the database while using the [EF Core](Entity-Framework-Core.md). + +> `ObjectExtensionManager` implements the singleton pattern (`ObjectExtensionManager.Instance`) and you should define object extensions before your application startup. The [application startup template](Startup-Templates/Application.md) has some pre-defined static classes to safely define object extensions inside. + +### AddOrUpdate + +`AddOrUpdate` is the main method to define a extra properties or update extra properties for an object. + +Example: Define extra properties for the `IdentityUser` entity: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdate(options => + { + options.AddOrUpdateProperty("SocialSecurityNumber"); + options.AddOrUpdateProperty("IsSuperUser"); + } + ); +```` + +### AddOrUpdateProperty + +While `AddOrUpdateProperty` can be used on the `options` as shown before, if you want to define a single extra property, you can use the shortcut extension method too: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty("SocialSecurityNumber"); +```` + +Sometimes it would be practical to define a single extra property to multiple types. Instead of defining one by one, you can use the following code: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + new[] + { + typeof(IdentityUserDto), + typeof(IdentityUserCreateDto), + typeof(IdentityUserUpdateDto) + }, + "SocialSecurityNumber" + ); +```` + +#### Property Configuration + +`AddOrUpdateProperty` can also get an action that can perform additional configuration on the property definition. + +Example: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber", + options => + { + options.CheckPairDefinitionOnMapping = false; + }); +```` + +> See the "Object to Object Mapping" section to understand the `CheckPairDefinitionOnMapping` option. + +`options` has a dictionary, named `Configuration` which makes the object extension definitions even extensible. It is used by the EF Core to map extra properties to table fields in the database. See the [extending entities](Customizing-Application-Modules-Extending-Entities.md) document. + +## Object to Object Mapping + +Assume that you've added an extra property to an extensible entity object and used auto [object to object mapping](Object-To-Object-Mapping.md) to map this entity to an extensible DTO class. You need to be careful in such a case, because the extra property may contain a **sensitive data** that should not be available to clients. + +This section offers some **good practices** to control your extra properties on object mapping. + +### MapExtraPropertiesTo + +`MapExtraPropertiesTo` is an extension method provided by the ABP Framework to copy extra properties from an object to another in a controlled manner. Example usage: + +````csharp +identityUser.MapExtraPropertiesTo(identityUserDto); +```` + +`MapExtraPropertiesTo` **requires to define properties** (as described above) in **both sides** (`IdentityUser` and `IdentityUserDto` in this case) in order to copy the value to the target object. Otherwise, it doesn't copy the value even if it does exists in the source object (`identityUser` in this example). There are some ways to overload this restriction. + +#### MappingPropertyDefinitionChecks + +`MapExtraPropertiesTo` gets an additional parameter to control the definition check for a single mapping operation: + +````csharp +identityUser.MapExtraPropertiesTo( + identityUserDto, + MappingPropertyDefinitionChecks.None +); +```` + +> Be careful since `MappingPropertyDefinitionChecks.None` copies all extra properties without any check. `MappingPropertyDefinitionChecks` enum has other members too. + +If you want to completely disable definition check for a property, you can do it while defining the extra property (or update an existing definition) as shown below: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber", + options => + { + options.CheckPairDefinitionOnMapping = false; + }); +```` + +#### Ignored Properties + +You may want to ignore some properties on a specific mapping operation: + +````csharp +identityUser.MapExtraPropertiesTo( + identityUserDto, + ignoredProperties: new[] {"MySensitiveProp"} +); +```` + +Ignored properties are not copied to the target object. + +#### AutoMapper Integration + +If you're using the [AutoMapper](https://automapper.org/) library, the ABP Framework also provides an extension method to utilize the `MapExtraPropertiesTo` method defined above. + +You can use the `MapExtraProperties()` method inside your mapping profile. + +````csharp +public class MyProfile : Profile +{ + public MyProfile() + { + CreateMap() + .MapExtraProperties(); + } +} +```` + +It has the same parameters with the `MapExtraPropertiesTo` method. + +## Entity Framework Core Database Mapping + +If you're using the EF Core, you can map an extra property to a table field in the database. Example: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber", + options => + { + options.MapEfCore(b => b.HasMaxLength(32)); + } + ); +```` + +See the [Entity Framework Core Integration document](Entity-Framework-Core.md) for more. \ No newline at end of file diff --git a/docs/en/Object-To-Object-Mapping.md b/docs/en/Object-To-Object-Mapping.md index 52260402f1..b7463607e9 100644 --- a/docs/en/Object-To-Object-Mapping.md +++ b/docs/en/Object-To-Object-Mapping.md @@ -145,6 +145,23 @@ options.AddProfile(validate: true); > If you have multiple profiles and need to enable validation only for a few of them, first use `AddMaps` without validation, then use `AddProfile` for each profile you want to validate. +### Mapping the Object Extensions + +[Object extension system](Object-Extensions.md) allows to define extra properties for existing classes. ABP Framework provides a mapping definition extension to properly map extra properties of two objects. + +````csharp +public class MyProfile : Profile +{ + public MyProfile() + { + CreateMap() + .MapExtraProperties(); + } +} +```` + +It is suggested to use the `MapExtraProperties()` method if both classes are extensible objects (implement the `IHasExtraProperties` interface). See the [object extension document](Object-Extensions.md) for more. + ## Advanced Topics ### IObjectMapper Interface diff --git a/docs/en/UI/Angular/Component-Replacement.md b/docs/en/UI/Angular/Component-Replacement.md index d718b46117..fb85aa476e 100644 --- a/docs/en/UI/Angular/Component-Replacement.md +++ b/docs/en/UI/Angular/Component-Replacement.md @@ -11,15 +11,18 @@ Create a new component that you want to use instead of an ABP component. Add tha Then, open the `app.component.ts` and dispatch the `AddReplaceableComponent` action to replace your component with an ABP component as shown below: ```js -import { ..., AddReplaceableComponent } from '@abp/ng.core'; +import { ..., AddReplaceableComponent } from '@abp/ng.core'; // imported AddReplaceableComponent action +import { eIdentityComponents } from '@abp/ng.identity'; // imported eIdentityComponents enum +import { Store } from '@ngxs/store'; // imported Store +//... export class AppComponent { - constructor(..., private store: Store) {} + constructor(..., private store: Store) {} // injected Store ngOnInit() { this.store.dispatch( new AddReplaceableComponent({ component: YourNewRoleComponent, - key: 'Identity.RolesComponent', + key: eIdentityComponents.Roles, }), ); //... @@ -56,6 +59,7 @@ Open the `app.component.ts` and add the below content: ```js import { ..., AddReplaceableComponent } from '@abp/ng.core'; // imported AddReplaceableComponent +import { eThemeBasicComponents } from '@abp/ng.theme.basic'; // imported eThemeBasicComponents enum for component keys import { MyApplicationLayoutComponent } from './shared/my-application-layout/my-application-layout.component'; // imported MyApplicationLayoutComponent import { Store } from '@ngxs/store'; // imported Store //... @@ -67,7 +71,7 @@ export class AppComponent { this.store.dispatch( new AddReplaceableComponent({ component: MyApplicationLayoutComponent, - key: 'Theme.ApplicationLayoutComponent', + key: eThemeBasicComponents.ApplicationLayout, }), ); @@ -76,24 +80,6 @@ export class AppComponent { } ``` -### Available Replaceable Components - -| Component key | Description | -| -------------------------------------------------- | --------------------------------------------- | -| Account.LoginComponent | Login page | -| Account.RegisterComponent | Register page | -| Account.ManageProfileComponent | Manage Profile page | -| Account.AuthWrapperComponent | This component wraps register and login pages | -| Account.ChangePasswordComponent | Change password form | -| Account.PersonalSettingsComponent | Personal settings form | -| Account.TenantBoxComponentInputs | Tenant changing box | -| FeatureManagement.FeatureManagementComponent | Features modal | -| Identity.UsersComponent | Users page | -| Identity.RolesComponent | Roles page | -| PermissionManagement.PermissionManagementComponent | Permissions modal | -| SettingManagement.SettingManagementComponent | Setting Management page | -| TenantManagement.TenantsComponent | Tenants page | - ## What's Next? - [Custom Setting Page](./Custom-Setting-Page.md) diff --git a/docs/en/UI/Angular/Container-Strategy.md b/docs/en/UI/Angular/Container-Strategy.md new file mode 100644 index 0000000000..3610c5ddd8 --- /dev/null +++ b/docs/en/UI/Angular/Container-Strategy.md @@ -0,0 +1,101 @@ +# ContainerStrategy + +`ContainerStrategy` is an abstract class exposed by @abp/ng.core package. There are two container strategies extending it: `ClearContainerStrategy` and `InsertIntoContainerStrategy`. Implementing the same methods and properties, both of these strategies help you define how your containers will be prepared and where your content will be projected. + + + +## API + +`ClearContainerStrategy` is a class that extends `ContainerStrategy`. It lets you **clear a container before projecting content in it**. + + +### constructor + +```js +constructor( + public containerRef: ViewContainerRef, + private index?: number, // works only in InsertIntoContainerStrategy +) +``` + +- `containerRef` is the `ViewContainerRef` that will be used when projecting the content. + + +### getIndex + +```js +getIndex(): number +``` + +This method return the given index clamped by `0` and `length` of the `containerRef`. For strategies without an index, it returns `0`. + + +### prepare + +```js +prepare(): void +``` + +This method is called before content projection. Based on used container strategy, it either clears the container or does nothing (noop). + + + +## ClearContainerStrategy + +`ClearContainerStrategy` is a class that extends `ContainerStrategy`. It lets you **clear a container before projecting content in it**. + + + +## InsertIntoContainerStrategy + +`InsertIntoContainerStrategy` is a class that extends `ContainerStrategy`. It lets you **project your content at a specific node index in the container**. + + + +## Predefined Container Strategies + +Predefined container strategies are accessible via `CONTAINER_STRATEGY` constant. + + +### Clear + +```js +CONTAINER_STRATEGY.Clear(containerRef: ViewContainerRef) +``` + +Clears given container before content projection. + + +### Append + +```js +CONTAINER_STRATEGY.Append(containerRef: ViewContainerRef) +``` + +Projected content will be appended to the container. + + +### Prepend + +```js +CONTAINER_STRATEGY.Prepend(containerRef: ViewContainerRef) +``` + +Projected content will be prepended to the container. + + +### Insert + +```js +CONTAINER_STRATEGY.Insert( + containerRef: ViewContainerRef, + index: number, +) +``` + +Projected content will be inserted into to the container at given index (clamped by `0` and `length` of the `containerRef`). + + +## See Also + +- [ProjectionStrategy](./Projection-Strategy.md) diff --git a/docs/en/UI/Angular/Content-Projection-Service.md b/docs/en/UI/Angular/Content-Projection-Service.md new file mode 100644 index 0000000000..db7c52be81 --- /dev/null +++ b/docs/en/UI/Angular/Content-Projection-Service.md @@ -0,0 +1,78 @@ +# Content Projection + +You can use the `ContentProjectionService` in @abp/ng.core package in order to project content in an easy and explicit way. + +## Getting Started + +You do not have to provide the `ContentProjectionService` at module or component level, because it is already **provided in root**. You can inject and start using it immediately in your components, directives, or services. + +```js +import { ContentProjectionService } from '@abp/ng.core'; + +@Component({ + /* class metadata here */ +}) +class DemoComponent { + constructor(private contentProjectionService: ContentProjectionService) {} +} +``` + +## Usage + +You can use the `projectContent` method of `ContentProjectionService` to render components and templates dynamically in your project. + +### How to Project Components to Root Level + +If you pass a `RootComponentProjectionStrategy` as the first parameter of `projectContent` method, the `ContentProjectionService` will resolve the projected component and place it at the root level. If provided, it will also pass the component a context. + +```js +const strategy = PROJECTION_STRATEGY.AppendComponentToBody( + SomeOverlayComponent, + { someOverlayProp: "SOME_VALUE" } +); + +const componentRef = this.contentProjectionService.projectContent(strategy); +``` + +In the example above, `SomeOverlayComponent` component will placed at the **end** of `` and a `ComponentRef` will be returned. Additionally, the given context will be applied, so `someOverlayProp` of the component will be set to `SOME_VALUE`. + +> You should keep the returned `ComponentRef` instance, as it is a reference to the projected component and you will need that reference to destroy the projected view and the component instance. + +### How to Project Components and Templates into a Container + +If you pass a `ComponentProjectionStrategy` or `TemplateProjectionStrategy` as the first parameter of `projectContent` method, and a `ViewContainerRef` as the second parameter of that strategy, the `ContentProjectionService` will project the component or template to the given container. If provided, it will also pass the component or the template a context. + +```js +const strategy = PROJECTION_STRATEGY.ProjectComponentToContainer( + SomeComponent, + viewContainerRefOfTarget, + { someProp: "SOME_VALUE" } +); + +const componentRef = this.contentProjectionService.projectContent(strategy); +``` + +In this example, the `viewContainerRefOfTarget`, which is a `ViewContainerRef` instance, will be cleared and `SomeComponent` component will be placed inside it. In addition, the given context will be applied and `someProp` of the component will be set to `SOME_VALUE`. + +> You should keep the returned `ComponentRef` or `EmbeddedViewRef`, as they are a reference to the projected content and you will need them to destroy it when necessary. + +Please refer to [ProjectionStrategy](./Projection-Strategy.md) to see all available projection strategies and how you can build your own projection strategy. + +## API + +### projectContent + +```js +projectContent | TemplateRef>( + projectionStrategy: ProjectionStrategy, + injector = this.injector, +): ComponentRef | EmbeddedViewRef +``` + +- `projectionStrategy` parameter is the primary focus here and is explained above. +- `injector` parameter is the `Injector` instance you can pass to the projected content. It is not used in `TemplateProjectionStrategy`. + + +## What's Next? + +- [TrackByService](./Track-By-Service.md) diff --git a/docs/en/UI/Angular/Context-Strategy.md b/docs/en/UI/Angular/Context-Strategy.md new file mode 100644 index 0000000000..a474c50ad6 --- /dev/null +++ b/docs/en/UI/Angular/Context-Strategy.md @@ -0,0 +1,117 @@ +# ContextStrategy + +`ContextStrategy` is an abstract class exposed by @abp/ng.core package. There are three context strategies extending it: `ComponentContextStrategy`, `TemplateContextStrategy`, and `NoContextStrategy`. Implementing the same methods and properties, all of these strategies help you define how projected content will get their context. + + + +## ComponentContextStrategy + +`ComponentContextStrategy` is a class that extends `ContextStrategy`. It lets you **pass context to a projected component**. + + +### constructor + +```js +constructor(public context: Partial>) {} +``` + +- `T` refers to component type here, i.e. `Type`. +- `InferredInstanceOf` is a utility type exposed by @abp/ng.core package. It infers component shape. +- `context` will be mapped to properties of the projected component. + + +### setContext + +```js +setContext(componentRef: ComponentRef>): Partial> +``` + +This method maps each prop of the context to the component property with the same name and calls change detection. It returns the context after mapping. + + + +## TemplateContextStrategy + +`TemplateContextStrategy` is a class that extends `ContextStrategy`. It lets you **pass context to a projected template**. + + +### constructor + +```js +constructor(public context: Partial>) {} +``` + +- `T` refers to template context type here, i.e. `TemplateRef`. +- `InferredContextOf` is a utility type exposed by @abp/ng.core package. It infers context shape. +- `context` will be mapped to properties of the projected template. + + +### setContext + +```js +setContext(): Partial> +``` + +This method does nothing and only returns the context, because template context is not mapped but passed in as parameter to `createEmbeddedView` method. + + + +## NoContextStrategy + +`NoContextStrategy` is a class that extends `ContextStrategy`. It lets you **skip passing any context to projected content**. + + +### constructor + +```js +constructor() +``` + +Unlike other context strategies, `NoContextStrategy` contructor takes no parameters. + + +### setContext + +```js +setContext(): undefined +``` + +Since there is no context, this method gets no parameters and will return `undefined`. + + + +## Predefined Context Strategies + +Predefined context strategies are accessible via `CONTEXT_STRATEGY` constant. + + +### None + +```js +CONTEXT_STRATEGY.None() +``` + +This strategy will not pass any context to the projected content. + + +### Component + +```js +CONTEXT_STRATEGY.Component(context: Partial>) +``` + +This strategy will help you pass the given context to the projected component. + + +### Template + +```js +CONTEXT_STRATEGY.Template(context: Partial>) +``` + +This strategy will help you pass the given context to the projected template. + + +## See Also + +- [ProjectionStrategy](./Projection-Strategy.md) diff --git a/docs/en/UI/Angular/Dom-Insertion-Service.md b/docs/en/UI/Angular/Dom-Insertion-Service.md index 5d7714d948..d5ea9fe3a2 100644 --- a/docs/en/UI/Angular/Dom-Insertion-Service.md +++ b/docs/en/UI/Angular/Dom-Insertion-Service.md @@ -1,8 +1,7 @@ -# How to Insert Scripts and Styles +# Dom Insertion (of Scripts and Styles) You can use the `DomInsertionService` in @abp/ng.core package in order to insert scripts and styles in an easy and explicit way. - ## Getting Started You do not have to provide the `DomInsertionService` at module or component level, because it is already **provided in root**. You can inject and start using it immediately in your components, directives, or services. @@ -20,8 +19,7 @@ class DemoComponent { ## Usage -You can use the `insertContent` method of `DomInsertionService` to create a `` element will place at the **end Please refer to [ContentStrategy](./Content-Strategy.md) to see all available content strategies and how you can build your own content strategy. - ### How to Insert Styles If you pass a `StyleContentStrategy` instance as the first parameter of `insertContent` method, the `DomInsertionService` will create a `` element will place at t Please refer to [ContentStrategy](./Content-Strategy.md) to see all available content strategies and how you can build your own content strategy. - ## API ### insertContent ```js -insertContent(strategy: ContentStrategy): void +insertContent(contentStrategy: ContentStrategy): void ``` -`strategy` parameter is the primary focus here and is explained above. +- `contentStrategy` parameter is the primary focus here and is explained above. ## What's Next? -- [TrackByService](./Track-By-Service.md) +- [ContentProjectionService](./Content-Projection-Service.md) diff --git a/docs/en/UI/Angular/Dom-Strategy.md b/docs/en/UI/Angular/Dom-Strategy.md index 2318e13205..e7b6c68b0f 100644 --- a/docs/en/UI/Angular/Dom-Strategy.md +++ b/docs/en/UI/Angular/Dom-Strategy.md @@ -87,3 +87,4 @@ DOM_STRATEGY.BeforeElement(target: HTMLElement) - [LazyLoadService](./Lazy-Load-Service.md) - [LoadingStrategy](./Loading-Strategy.md) - [ContentStrategy](./Content-Strategy.md) +- [ProjectionStrategy](./Projection-Strategy.md) diff --git a/docs/en/UI/Angular/Loading-Strategy.md b/docs/en/UI/Angular/Loading-Strategy.md index 1a7e7b362f..5322d13eda 100644 --- a/docs/en/UI/Angular/Loading-Strategy.md +++ b/docs/en/UI/Angular/Loading-Strategy.md @@ -57,7 +57,7 @@ This method creates and returns an observable stream that emits on success and t ## Predefined Loading Strategies -Predefined content security strategies are accessible via `LOADING_STRATEGY` constant. +Predefined loading strategies are accessible via `LOADING_STRATEGY` constant. ### AppendAnonymousScriptToHead diff --git a/docs/en/UI/Angular/Projection-Strategy.md b/docs/en/UI/Angular/Projection-Strategy.md new file mode 100644 index 0000000000..4d546566b3 --- /dev/null +++ b/docs/en/UI/Angular/Projection-Strategy.md @@ -0,0 +1,200 @@ +# ProjectionStrategy + +`ProjectionStrategy` is an abstract class exposed by @abp/ng.core package. There are three projection strategies extending it: `ComponentProjectionStrategy`, `RootComponentProjectionStrategy`, and `TemplateProjectionStrategy`. Implementing the same methods and properties, all of these strategies help you define how your content projection will work. + + + +## ComponentProjectionStrategy + +`ComponentProjectionStrategy` is a class that extends `ProjectionStrategy`. It lets you **project a component into a container**. + + +### constructor + +```js +constructor( + component: T, + private containerStrategy: ContainerStrategy, + private contextStrategy?: ContextStrategy, +) +``` + +- `component` is class of the component you would like to project. +- `containerStrategy` is the `ContainerStrategy` that will be used when projecting the component. +- `contextStrategy` is the `ContextStrategy` that will be used on the projected component. (_default: None_) + +Please refer to [ContainerStrategy](./Container-Strategy.md) and [ContextStrategy](./Context-Strategy.md) documentation for their usage. + + +### injectContent + +```js +injectContent(injector: Injector): ComponentRef +``` + +This method prepares the container, resolves the component, sets its context, and projects it to the container. It returns a `ComponentRef` instance, which you should keep in order to clear projected components later on. + + + +## RootComponentProjectionStrategy + +`RootComponentProjectionStrategy` is a class that extends `ProjectionStrategy`. It lets you **project a component into the document**, such as appending it to ``. + + +### constructor + +```js +constructor( + component: T, + private contextStrategy?: ContextStrategy, + private domStrategy?: DomStrategy, +) +``` + +- `component` is class of the component you would like to project. +- `contextStrategy` is the `ContextStrategy` that will be used on the projected component. (_default: None_) +- `domStrategy` is the `DomStrategy` that will be used when inserting component. (_default: AppendToBody_) + +Please refer to [ContextStrategy](./Context-Strategy.md) and [DomStrategy](./Dom-Strategy.md) documentation for their usage. + + +### injectContent + +```js +injectContent(injector: Injector): ComponentRef +``` + +This method resolves the component, sets its context, and projects it to the document. It returns a `ComponentRef` instance, which you should keep in order to clear projected components later on. + + + +## TemplateProjectionStrategy + +`TemplateProjectionStrategy` is a class that extends `ProjectionStrategy`. It lets you **project a template into a container**. + + +### constructor + +```js +constructor( + template: T, + private containerStrategy: ContainerStrategy, + private contextStrategy?: ContextStrategy, +) +``` + +- `template` is `TemplateRef` you would like to project. +- `containerStrategy` is the `ContainerStrategy` that will be used when projecting the component. +- `contextStrategy` is the `ContextStrategy` that will be used on the projected component. (_default: None_) + +Please refer to [ContainerStrategy](./Container-Strategy.md) and [ContextStrategy](./Context-Strategy.md) documentation for their usage. + + +### injectContent + +```js +injectContent(): EmbeddedViewRef +``` + +This method prepares the container, and projects the template together with the defined context to it. It returns an `EmbeddedViewRef`, which you should keep in order to clear projected templates later on. + + + +## Predefined Projection Strategies + +Predefined projection strategies are accessible via `PROJECTION_STRATEGY` constant. + + +### AppendComponentToBody + +```js +PROJECTION_STRATEGY.AppendComponentToBody( + component: T, + contextStrategy?: ComponentContextStrategy, +) +``` + +Sets given context to the component and places it at the **end** of `` tag in the document. + + +### AppendComponentToContainer + +```js +PROJECTION_STRATEGY.AppendComponentToContainer( + component: T, + containerRef: ViewContainerRef, + contextStrategy?: ComponentContextStrategy, +) +``` + +Sets given context to the component and places it at the **end** of the container. + + +### AppendTemplateToContainer + +```js +PROJECTION_STRATEGY.AppendTemplateToContainer( + templateRef: T, + containerRef: ViewContainerRef, + contextStrategy?: ComponentContextStrategy, +) +``` + +Sets given context to the template and places it at the **end** of the container. + + +### PrependComponentToContainer + +```js +PROJECTION_STRATEGY.PrependComponentToContainer( + component: T, + containerRef: ViewContainerRef, + contextStrategy?: ComponentContextStrategy, +) +``` + +Sets given context to the component and places it at the **beginning** of the container. + + +### PrependTemplateToContainer + +```js +PROJECTION_STRATEGY.PrependTemplateToContainer( + templateRef: T, + containerRef: ViewContainerRef, + contextStrategy?: ComponentContextStrategy, +) +``` + +Sets given context to the template and places it at the **beginning** of the container. + + +### ProjectComponentToContainer + +```js +PROJECTION_STRATEGY.ProjectComponentToContainer( + component: T, + containerRef: ViewContainerRef, + contextStrategy?: ComponentContextStrategy, +) +``` + +Clears the container, sets given context to the component, and places it **in the cleared** the container. + + +### ProjectTemplateToContainer + +```js +PROJECTION_STRATEGY.ProjectTemplateToContainer( + templateRef: T, + containerRef: ViewContainerRef, + contextStrategy?: ComponentContextStrategy, +) +``` + +Clears the container, sets given context to the template, and places it **in the cleared** the container. + + +## See Also + +- [DomInsertionService](./Dom-Insertion-Service.md) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 471e215e3a..0e13262b18 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -155,6 +155,10 @@ { "text": "Data Filtering", "path": "Data-Filtering.md" + }, + { + "text": "Object Extensions", + "path": "Object-Extensions.md" } ] }, @@ -353,6 +357,10 @@ "text": "DomInsertionService", "path": "UI/Angular/Dom-Insertion-Service.md" }, + { + "text": "ContentProjectionService", + "path": "UI/Angular/Content-Projection-Service.md" + }, { "text": "TrackByService", "path": "UI/Angular/Track-By-Service.md" diff --git a/docs/zh-Hans/CLI.md b/docs/zh-Hans/CLI.md index e0ce6e3c74..0a802ffdc1 100644 --- a/docs/zh-Hans/CLI.md +++ b/docs/zh-Hans/CLI.md @@ -56,12 +56,12 @@ abp new Acme.BookStore * `mongodb`: MongoDB. * `module`: [Module template](Startup-Templates/Module.md). 其他选项: * `--no-ui`: 不包含UI.仅创建服务模块(也称为微服务 - 没有UI). - * * `--output-folder` 或者 `-o`: 指定输出文件夹,默认是当前目录. * `--version` 或者 `-v`: 指定ABP和模板的版本.它可以是 [release tag](https://github.com/abpframework/abp/releases) 或者 [branch name](https://github.com/abpframework/abp/branches). 如果没有指定,则使用最新版本.大多数情况下,您会希望使用最新的版本. * `--template-source` 或者 `-ts`: 指定自定义模板源用于生成项目,可以使用本地源和网络源(例如 `D\localTemplate` 或 `https://.zip`). * `--create-solution-folder` 或者 `-csf`: 指定项目是在输出文件夹中的新文件夹中还是直接在输出文件夹中. * `--connection-string` 或者 `-cs`: 重写所有 `appsettings.json` 文件的默认连接字符串. 默认连接字符串是 `Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true`. 如果你不想使用默认,你可以设置自己的连接字符串. 默认的数据库提供程序是 `SQL Server`, 所以你只能输入SQL Server连接字符串! +* `--local-framework-ref --abp-path`: 使用对项目的本地引用,而不是替换为NuGet包引用. ### add-package diff --git a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md index d6e0e1f570..370e99c091 100644 --- a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md +++ b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md @@ -186,4 +186,4 @@ public class Program ### 源码 -从[此处](https://github.com/abpframework/abp/tree/dev/samples/BasicAspNetCoreApplication)获取本教程中创建的示例项目的源代码. +从[此处](https://github.com/abpframework/abp-samples/tree/master/BasicAspNetCoreApplication)获取本教程中创建的示例项目的源代码. diff --git a/docs/zh-Hans/Getting-Started-Console-Application.md b/docs/zh-Hans/Getting-Started-Console-Application.md index 474323beea..cac3d2f153 100644 --- a/docs/zh-Hans/Getting-Started-Console-Application.md +++ b/docs/zh-Hans/Getting-Started-Console-Application.md @@ -121,4 +121,4 @@ namespace AbpConsoleDemo ### 源码 -从[这里](https://github.com/abpframework/abp/tree/dev/samples/BasicConsoleApplication)获取本教程中创建的示例项目的源代码. \ No newline at end of file +从[这里](https://github.com/abpframework/abp-samples/tree/master/BasicConsoleApplication)获取本教程中创建的示例项目的源代码. \ No newline at end of file diff --git a/docs/zh-Hans/How-To/Azure-Active-Directory-Authentication-MVC.md b/docs/zh-Hans/How-To/Azure-Active-Directory-Authentication-MVC.md index 92b8596ee3..8b282bbe56 100644 --- a/docs/zh-Hans/How-To/Azure-Active-Directory-Authentication-MVC.md +++ b/docs/zh-Hans/How-To/Azure-Active-Directory-Authentication-MVC.md @@ -1,3 +1,198 @@ # 如何对MVC / Razor页面应用程序使用Azure Active Directory身份验证 -TODO... \ No newline at end of file +本文介绍了如何将AzureAD集成到ABP应用程序中,用 **Azure Active Directory** 凭据使用 OAuth 2.0 登录. + +添加Azure Active Directory到ABP框架非常简单,只需要正确的完成几个配置. + +为了覆盖更多范围,我们演示两种不同的集成AzureAD的**方法**. + +1. **AddAzureAD**: 该方法使用微软[AzureAD UI nuget 包](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.AzureAD.UI/),在网络上搜索如何将AzureAD集成到应用程序时,这个包是最流行的. + +2. **AddOpenIdConnect**: 该方法使用默认的[OpenIdConnect](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.OpenIdConnect/). 它不仅可用于AzureAD,还可用于所有OpenId连接. + +> 这些方法之间的功能**没有区别**,AddAzureAD是具有预定义Cookie设置的OpenIdConnection([源](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADAuthenticationBuilderExtensions.cs#L122))的抽象方法. +> +> 但是默认配置的登录方案在与ABP应用程序集成方面存在关键差异,下面将对此进行说明. + +## 1. AddAzureAD + +这个方法使用 [Microsoft AzureAD UI nuget 包](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.AzureAD.UI/),它是最常用的集成AzureAD方法. + +如果选择这种方法,需要将 `Microsoft.AspNetCore.Authentication.AzureAD.UI` 软件包安装到 **.Web** 项目中. 由于AddAzureAD扩展使用[配置绑定](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1#default-configuration),你需要更改 **.Web** 项目中的appsettings.json文件. + +#### **更改 `appsettings.json`** + +你添加向 `appsettings.json` 添加新的配置节,在配置 `OpenIdConnectOptions` 时绑定配置: + +````json + "AzureAd": { + "Instance": "https://login.microsoftonline.com/", + "TenantId": "", + "ClientId": "", + "Domain": "domain.onmicrosoft.com", + "CallbackPath": "/signin-azuread-oidc" + } +```` + +> 这里重要的配置是CallbackPath. 值必须与你的 Azure AD-> app registrations-> Authentication -> RedirectUri 之一相同. + +然后你需要配置 `OpenIdConnectOptions` 完成集成. + +#### 配置 OpenIdConnectOptions + +在你的 **.Web** 项目找到 **ApplicationWebModule** 使用以下代码修改 `ConfigureAuthentication` 方法: + +````csharp +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) + { + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); + context.Services.AddAuthentication() + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = false; + options.ApiName = "Acme.BookStore"; + }) + .AddAzureAD(options => configuration.Bind("AzureAd", options)); + + context.Services.Configure(AzureADDefaults.OpenIdScheme, options => + { + options.Authority = options.Authority + "/v2.0/"; + options.ClientId = configuration["AzureAd:ClientId"]; + options.CallbackPath = configuration["AzureAd:CallbackPath"]; + options.ResponseType = OpenIdConnectResponseType.CodeIdToken; + options.RequireHttpsMetadata = false; + + options.TokenValidationParameters.ValidateIssuer = false; + options.GetClaimsFromUserInfoEndpoint = true; + options.SaveTokens = true; + options.SignInScheme = IdentityConstants.ExternalScheme; + + options.Scope.Add("email"); + }); + } +```` + +> **不要忘记:** +> +> * 在 `AddAuthentication()` 之后添加 `.AddAzureAD(options => configuration.Bind("AzureAd", options))` . 它绑定了你的 AzureAD 配置并且容易忘记. +> * 添加 `JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear()`. 它会禁用默认的 Microsoft claim type 映射. +> * 添加 `JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier)`. 映射 [ClaimTypes.NameIdentifier](https://github.com/dotnet/runtime/blob/6d395de48ac718a913e567ae80961050f2a9a4fa/src/libraries/System.Security.Claims/src/System/Security/Claims/ClaimTypes.cs#L59) 很重要,因为默认SignIn Manager和行为使用这个claim type用于外部登录信息. +> * 添加 `options.SignInScheme = IdentityConstants.ExternalScheme` 因为 [默认登录方法为 `AzureADOpenID`](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Azure/AzureAD/Authentication.AzureAD.UI/src/AzureADOpenIdConnectOptionsConfiguration.cs#L35). +> * 如果你使用的是 **v2.0** 端点,应添加 `options.Scope.Add("email")` 因为 v2.0 端点不会将 `email` 做为默认值返回. [账户模块](../Modules/Account.md) 使用 `email` claim 来 [注册外部账户](https://github.com/abpframework/abp/blob/be32a55449e270d2d456df3dabdc91f3ffdd4fa9/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs#L215). + +你已经完成了集成. + +## 2. 替代方法: AddOpenIdConnect + +如果你不想在应用程序安装一个额外的NuGet包,你可以使用默认的[OpenIdConnect](https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.OpenIdConnect/),它适用于所有的OpenId连接,包括AzureAD外部认证. + +你不必使用 `appsettings.json` 配置, 但将AzureAD信息放在 `appsettings.json` 是一个很好的做法. + +为了从 `appsettings.json` 获取AzureAD信息在 `OpenIdConnectOptions` 配置使用,只需要在你的 **.Web** 项目中的 `appsettings.json` 添加一个新的配置节: + +````json + "AzureAd": { + "Instance": "https://login.microsoftonline.com/", + "TenantId": "", + "ClientId": "", + "Domain": "domain.onmicrosoft.com", + "CallbackPath": "/signin-azuread-oidc" + } +```` + +然后在你的 **.Web** 项目的 **ApplicationWebModule** 用以下代码修改 `ConfigureAuthentication` 方法: + +````csharp +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) + { + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); + + context.Services.AddAuthentication() + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = false; + options.ApiName = "BookStore"; + }) + .AddOpenIdConnect("AzureOpenId", "Azure Active Directory OpenId", options => + { + options.Authority = "https://login.microsoftonline.com/" + configuration["AzureAd:TenantId"] + "/v2.0/"; + options.ClientId = configuration["AzureAd:ClientId"]; + options.ResponseType = OpenIdConnectResponseType.CodeIdToken; + options.CallbackPath = configuration["AzureAd:CallbackPath"]; + options.RequireHttpsMetadata = false; + options.SaveTokens = true; + options.GetClaimsFromUserInfoEndpoint = true; + + options.Scope.Add("email"); + }); + } +```` + +集成结束. 请记住你可以连接任何其他外部认证供应商. + +## 本文的源代码 + +你可以在[这里](https://github.com/abpframework/abp-samples/tree/master/aspnet-core/Authentication-Customization)找到已完成的示例源码. + +# FAQ + +* Help! `GetExternalLoginInfoAsync` 返回 `null`! + + * 有两方面的原因; + + 1. 你在尝试验证错误的方案. 检查是否设置 **SignInScheme** 为 `IdentityConstants.ExternalScheme`: + + ````csharp + options.SignInScheme = IdentityConstants.ExternalScheme; + ```` + + 2. 你的 `ClaimTypes.NameIdentifier` 为 `null`. 检查是否添加 claim 映射: + + ````csharp + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); + ```` + +* Help! 我一直得到 ***AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application*** 错误! + + * 如果你在appsettings设置 **CallbackPath** 为: + + ````csharp + "AzureAd": { + ... + "CallbackPath": "/signin-azuread-oidc" + } + ```` + + 你在azure门户的应用程序**重定向URI**必须具有之类 `https://localhost:44320/signin-azuread-oidc` 的, 而不仅是 `/signin-azuread-oidc`. + +* Help! 我一直得到 ***System.ArgumentNullException: Value cannot be null. (Parameter 'userName')*** 错误! + + * 当你使用 Azure Authority **v2.0 端点** 而不请求 `email` 域, 会发生这些情况. [Abp 创建用户检查了唯一的邮箱](https://github.com/abpframework/abp/blob/037ef9abe024c03c1f89ab6c933710bcfe3f5c93/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs#L208). 只需添加 + + ````csharp + options.Scope.Add("email"); + ```` + + 到你的 openid 配置. + +* 如何**调试/监视**在映射之前获得的声明? + + * 你可以在 openid 配置下加一个简单的事件在映射之前进行调试,例如: + + ````csharp + options.Events.OnTokenValidated = (async context => + { + var claimsFromOidcProvider = context.Principal.Claims.ToList(); + await Task.CompletedTask; + }); + ```` + +## 另请参阅 + +* [如何为MVC / Razor页面应用程序自定义登录页面](Customize-Login-Page-MVC.md). +* [如何为ABP应用程序定制SignIn Manager](Customize-SignIn-Manager.md). \ No newline at end of file diff --git a/docs/zh-Hans/How-To/Customize-SignIn-Manager.md b/docs/zh-Hans/How-To/Customize-SignIn-Manager.md index 2667509aca..a98c57e495 100644 --- a/docs/zh-Hans/How-To/Customize-SignIn-Manager.md +++ b/docs/zh-Hans/How-To/Customize-SignIn-Manager.md @@ -1,3 +1,101 @@ # 如何为ABP应用程序定制SignIn Manager -TODO... \ No newline at end of file +在使用[应用程序启动模板](../Startup-Templates/Application.md)创建新项目后,你可能想要扩展或更改SignIn Manager的默认行为,以满足你需要的身份验证和注册流程. ABP[账户模块](../Modules/Account.md)使用[身份管理模块](../Modules/Identity.md)做为SignIn Manager,而[身份管理模块](../Modules/Identity.md)使用默认的[Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs)([参阅此处]((https://github.com/abpframework/abp/blob/be32a55449e270d2d456df3dabdc91f3ffdd4fa9/modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs#L17))). + +编写自定义SignIn Manager,你需要扩展[Microsoft Identity SignIn Manager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs)类并注入到DI容器. + +本文介绍了如何为你自己的应用程序自定义SignIn Manager. + +## 创建 CustomSignInManager + +创建一个类并继承自Microsoft Identity 包的 [SignInMager](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/SignInManager.cs). + +````csharp +public class CustomSignInManager : Microsoft.AspNetCore.Identity.SignInManager +{ + public CustomSignInManager( + Microsoft.AspNetCore.Identity.UserManager userManager, + Microsoft.AspNetCore.Http.IHttpContextAccessor contextAccessor, + Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory claimsFactory, + Microsoft.Extensions.Options.IOptions optionsAccessor, + Microsoft.Extensions.Logging.ILogger> logger, + Microsoft.AspNetCore.Authentication.IAuthenticationSchemeProvider schemes, + Microsoft.AspNetCore.Identity.IUserConfirmation confirmation) + : base(userManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemes, confirmation) + { + } +} +```` + +> 重点是使用**Volo.Abp.Identity.IdentityUser**做为泛型参数,而不是应用程序的AppUser. + +然后你可以覆盖SignIn Manager的任何方法并且为你的身份验证和注册流程添加需要的方法和属性. + +## 重写 GetExternalLoginInfoAsync 方法 + +在这个用例中我们重写第三方身份验证时使用的 `GetExternalLoginInfoAsync` 方法实现. + +一个好的开始是从复制[源码](https://github.com/dotnet/aspnetcore/blob/c56aa320c32ee5429d60647782c91d53ac765865/src/Identity/Core/src/SignInManager.cs#L638-L674)而不是从零开始. 在这个用例中我们对源码进行较少的修改,为了帮助理解概念它显式显示了方法和属性的命名空间. + +````csharp +public override async Task GetExternalLoginInfoAsync(string expectedXsrf = null) +{ + var auth = await Context.AuthenticateAsync(Microsoft.AspNetCore.Identity.IdentityConstants.ExternalScheme); + var items = auth?.Properties?.Items; + if (auth?.Principal == null || items == null || !items.ContainsKey("LoginProviderKey")) + { + return null; + } + + if (expectedXsrf != null) + { + if (!items.ContainsKey("XsrfKey")) + { + return null; + } + var userId = items[XsrfKey] as string; + if (userId != expectedXsrf) + { + return null; + } + } + + var providerKey = auth.Principal.FindFirstValue(ClaimTypes.NameIdentifier); + var provider = items[LoginProviderKey] as string; + if (providerKey == null || provider == null) + { + return null; + } + + var providerDisplayName = (await GetExternalAuthenticationSchemesAsync()).FirstOrDefault(p => p.Name == provider)?.DisplayName + ?? provider; + return new Microsoft.AspNetCore.Identity.ExternalLoginInfo(auth.Principal, provider, providerKey, providerDisplayName) + { + AuthenticationTokens = auth.Properties.GetTokens() + }; +} +```` + +要使你自定义的SignIn Manager类生效,你需要将其注册[依赖注入系统](../Dependency-Injection.md)中. + +## 注册到依赖注入 + +应该使用 [IdentityBuilder](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Extensions.Core/src/IdentityBuilder.cs) 的 [IdentityBuilderExtensions](https://github.com/dotnet/aspnetcore/blob/master/src/Identity/Core/src/IdentityBuilderExtensions.cs) 类的 **AddSignInManager** 扩展方法注册 `CustomSignInManager`. + +在你的 `.Web` 项目找到 `YourProjectNameWebModule` 的 `PreConfigureServices` 方法添加以下代码替换老的 `SignInManager`: + +````csharp +PreConfigure(identityBuilder => +{ + identityBuilder.AddSignInManager(); +}); +```` + +## 本文的源代码 + +你可以在[这里](https://github.com/abpframework/abp-samples/tree/master/aspnet-core/Authentication-Customization)找到已完成的示例源码. + +## 另请参阅 + +* [如何为MVC / Razor页面应用程序自定义登录页面](Customize-Login-Page-MVC.md). +* [身份管理模块](../Modules/Identity.md). diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/Timeago/TimeagoScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/Timeago/TimeagoScriptContributor.cs index df9ac55c42..9edbf065cb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/Timeago/TimeagoScriptContributor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/Timeago/TimeagoScriptContributor.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Globalization; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery; using Volo.Abp.Modularity; @@ -12,5 +13,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.Timeago { context.Files.AddIfNotContains("/libs/timeago/jquery.timeago.js"); } + + public override void ConfigureDynamicResources(BundleConfigurationContext context) + { + var cultureName = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; + if (cultureName.StartsWith("en")) + { + return; + } + + var cultureFileName = $"/libs/timeago/locales/jquery.timeago.{cultureName}.js"; + + if (context.FileProvider.GetFileInfo(cultureFileName).Exists) + { + context.Files.Add(cultureFileName); + } + } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js index db56e86c98..6b8ed10120 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js @@ -60,6 +60,8 @@ container: 'body' }); + args.$el.findWithSelf('.timeago').timeago(); + enableFormFeatures(args.$el.findWithSelf('form'), true); initializeScript(args.$el); @@ -82,6 +84,8 @@ container: 'body' }); + $('.timeago').timeago(); + $('[data-auto-focus="true"]').first().findWithSelf('input,select').focus(); }); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 8a0c21a254..928764faf1 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -199,6 +199,8 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine("-o|--output-folder (default: current folder)"); sb.AppendLine("-v|--version (default: latest version)"); sb.AppendLine("-ts|--template-source (your local or network abp template source)"); + sb.AppendLine("-csf|--create-solution-folder (default: true)"); + sb.AppendLine("-cs|--connection-string (your database connection string)"); sb.AppendLine("--tiered (if supported by the template)"); sb.AppendLine("--no-ui (if supported by the template)"); sb.AppendLine("--separate-identity-server (if supported by the template)"); @@ -217,6 +219,7 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine(" abp new Acme.BookStore -t module"); sb.AppendLine(" abp new Acme.BookStore -t module --no-ui"); sb.AppendLine(" abp new Acme.BookStore -ts \"D:\\localTemplate\\abp\""); + sb.AppendLine(" abp new Acme.BookStore -csf false"); sb.AppendLine(" abp new Acme.BookStore --local-framework-ref --abp-path \"D:\\github\\abp\""); sb.AppendLine(" abp new Acme.BookStore --connection-string \"Server=myServerName\\myInstanceName;Database=myDatabase;User Id=myUsername;Password=myPassword\""); sb.AppendLine(""); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs index 0d985df192..c7a6cc90f0 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs @@ -110,7 +110,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps var oldNodeIncludeValue = oldNode.Attributes["Include"].Value; // ReSharper disable once PossibleNullReferenceException : Can not be null because nodes are selected with include attribute filter in previous method - if (oldNodeIncludeValue.Contains(_projectName) && _entries.Any(e=>e.Name.EndsWith($"{oldNodeIncludeValue}.csproj"))) + if (oldNodeIncludeValue.Contains(_projectName) && _entries.Any(e=>e.Name.EndsWith(GetProjectNameWithExtensionFromProjectReference(oldNodeIncludeValue)))) { continue; } @@ -125,6 +125,16 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps return doc.OuterXml; } + private string GetProjectNameWithExtensionFromProjectReference(string oldNodeIncludeValue) + { + if (string.IsNullOrWhiteSpace(oldNodeIncludeValue)) + { + return oldNodeIncludeValue; + } + + return oldNodeIncludeValue.Split('\\', '/').Last(); + } + protected abstract XmlElement GetNewReferenceNode(XmlDocument doc, string oldNodeIncludeValue); diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ExtendedObjectMapper.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ExtensibleObjectMapper.cs similarity index 99% rename from framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ExtendedObjectMapper.cs rename to framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ExtensibleObjectMapper.cs index f2b7aeecdb..671aff40f2 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ExtendedObjectMapper.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ExtensibleObjectMapper.cs @@ -122,8 +122,6 @@ namespace Volo.Abp.ObjectExtending } } - //TODO: Move these methods to a class like ObjectExtensionHelper - public static bool CanMapProperty( [NotNull] string propertyName, MappingPropertyDefinitionChecks? definitionChecks = null, diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json index c4dcb99b1b..e2547eb67a 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json @@ -45,7 +45,7 @@ "PagerInfo": "Showing _START_ to _END_ of _TOTAL_ entries", "PagerInfoEmpty": "Showing 0 to 0 of 0 entries", "PagerInfoFiltered": "(filtered from _MAX_ total entries)", - "NoDataAvailableInDatatable": "No data available in table", + "NoDataAvailableInDatatable": "No data available", "PagerShowMenuEntries": "Show _MENU_ entries", "DatatableActionDropdownDefaultText": "Actions", "ChangePassword": "Change password", diff --git a/npm/lerna.json b/npm/lerna.json index c9d773186d..111b752f8a 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "2.4.0", + "version": "2.5.0", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/.vscode/settings.json b/npm/ng-packs/.vscode/settings.json index 9c2678df08..a04bf7ca0c 100644 --- a/npm/ng-packs/.vscode/settings.json +++ b/npm/ng-packs/.vscode/settings.json @@ -18,7 +18,9 @@ "titleBar.inactiveForeground": "#e7e7e799", "statusBar.background": "#1d70a2", "statusBarItem.hoverBackground": "#258ecd", - "statusBar.foreground": "#e7e7e7" + "statusBar.foreground": "#e7e7e7", + "statusBar.border": "#1d70a2", + "titleBar.border": "#1d70a2" }, "peacock.color": "#1D70A2" } diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index d3f80f81a5..6aa2fa1211 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,5 @@ { - "version": "2.4.0", + "version": "2.5.0", "packages": [ "packages/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index c55324f98f..4f65497d69 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -22,20 +22,20 @@ "generate:changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }, "devDependencies": { - "@abp/ng.account": "~2.3.0", - "@abp/ng.account.config": "~2.3.0", - "@abp/ng.core": "^2.3.0", - "@abp/ng.feature-management": "^2.3.0", - "@abp/ng.identity": "~2.3.0", - "@abp/ng.identity.config": "~2.3.0", - "@abp/ng.permission-management": "^2.3.0", - "@abp/ng.setting-management": "~2.3.0", - "@abp/ng.setting-management.config": "~2.3.0", - "@abp/ng.tenant-management": "~2.3.0", - "@abp/ng.tenant-management.config": "~2.3.0", - "@abp/ng.theme.basic": "~2.3.0", - "@abp/ng.theme.shared": "^2.3.0", - "@abp/utils": "~2.3.0", + "@abp/ng.account": "~2.5.0", + "@abp/ng.account.config": "~2.5.0", + "@abp/ng.core": "~2.5.0", + "@abp/ng.feature-management": "~2.5.0", + "@abp/ng.identity": "~2.5.0", + "@abp/ng.identity.config": "~2.5.0", + "@abp/ng.permission-management": "~2.5.0", + "@abp/ng.setting-management": "~2.5.0", + "@abp/ng.setting-management.config": "~2.5.0", + "@abp/ng.tenant-management": "~2.5.0", + "@abp/ng.tenant-management.config": "~2.5.0", + "@abp/ng.theme.basic": "~2.5.0", + "@abp/ng.theme.shared": "~2.5.0", + "@abp/utils": "^2.4.0", "@angular-builders/jest": "^8.2.0", "@angular-devkit/build-angular": "~0.803.21", "@angular-devkit/build-ng-packagr": "~0.803.21", @@ -47,7 +47,7 @@ "@angular/core": "~8.2.14", "@angular/forms": "~8.2.14", "@angular/language-service": "~8.2.14", - "@angular/localize": "~9.0.2", + "@angular/localize": "~9.1.0", "@angular/platform-browser": "~8.2.14", "@angular/platform-browser-dynamic": "~8.2.14", "@angular/router": "~8.2.14", @@ -72,7 +72,7 @@ "jest": "^24.9.0", "jest-canvas-mock": "^2.1.2", "jest-preset-angular": "^7.1.1", - "just-clone": "3.1.0", + "just-clone": "^3.1.0", "just-compare": "^1.3.0", "lerna": "^3.19.0", "ng-packagr": "^5.7.1", diff --git a/npm/ng-packs/packages/account-config/package.json b/npm/ng-packs/packages/account-config/package.json index e5cebee7f7..e4bc34d586 100644 --- a/npm/ng-packs/packages/account-config/package.json +++ b/npm/ng-packs/packages/account-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.account.config", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 1dcf2dc90a..14c3553212 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.config": "^2.4.0", - "@abp/ng.theme.shared": "^2.4.0" + "@abp/ng.account.config": "~2.5.0", + "@abp/ng.theme.shared": "~2.5.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts index db4147f2a0..2225e7c592 100644 --- a/npm/ng-packs/packages/account/src/lib/account-routing.module.ts +++ b/npm/ng-packs/packages/account/src/lib/account-routing.module.ts @@ -9,6 +9,7 @@ import { RouterModule, Routes } from '@angular/router'; import { LoginComponent } from './components/login/login.component'; import { ManageProfileComponent } from './components/manage-profile/manage-profile.component'; import { RegisterComponent } from './components/register/register.component'; +import { eAccountComponents } from './enums/components'; const routes: Routes = [ { path: '', pathMatch: 'full', redirectTo: 'login' }, @@ -21,7 +22,7 @@ const routes: Routes = [ component: ReplaceableRouteContainerComponent, data: { replaceableComponent: { - key: 'Account.LoginComponent', + key: eAccountComponents.Login, defaultComponent: LoginComponent, } as ReplaceableComponents.RouteData, }, @@ -31,7 +32,7 @@ const routes: Routes = [ component: ReplaceableRouteContainerComponent, data: { replaceableComponent: { - key: 'Account.RegisterComponent', + key: eAccountComponents.Register, defaultComponent: RegisterComponent, } as ReplaceableComponents.RouteData, }, @@ -42,7 +43,7 @@ const routes: Routes = [ canActivate: [AuthGuard], data: { replaceableComponent: { - key: 'Account.ManageProfileComponent', + key: eAccountComponents.ManageProfile, defaultComponent: ManageProfileComponent, } as ReplaceableComponents.RouteData, }, diff --git a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html index 6e732540d4..3377b74a88 100644 --- a/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/auth-wrapper/auth-wrapper.component.html @@ -1,9 +1,7 @@
- +
@@ -44,7 +44,7 @@
diff --git a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts index d19a1dcd6a..f9ee2b8ff7 100644 --- a/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/manage-profile/manage-profile.component.ts @@ -1,6 +1,7 @@ import { fadeIn } from '@abp/ng.theme.shared'; import { transition, trigger, useAnimation } from '@angular/animations'; import { Component } from '@angular/core'; +import { eAccountComponents } from '../../enums/components'; @Component({ selector: 'abp-manage-profile', @@ -9,4 +10,8 @@ import { Component } from '@angular/core'; }) export class ManageProfileComponent { selectedTab = 0; + + changePasswordKey = eAccountComponents.ChangePassword; + + personalSettingsKey = eAccountComponents.PersonalSettings; } diff --git a/npm/ng-packs/packages/account/src/lib/components/register/register.component.html b/npm/ng-packs/packages/account/src/lib/components/register/register.component.html index f803d473cd..58fafdf541 100644 --- a/npm/ng-packs/packages/account/src/lib/components/register/register.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/register/register.component.html @@ -1,6 +1,6 @@ = T extends Type ? U : never; +export type InferredContextOf = T extends TemplateRef ? U : never; diff --git a/npm/ng-packs/packages/core/src/lib/services/content-projection.service.ts b/npm/ng-packs/packages/core/src/lib/services/content-projection.service.ts new file mode 100644 index 0000000000..dfcdea330a --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/services/content-projection.service.ts @@ -0,0 +1,14 @@ +import { Injectable, Injector, TemplateRef, Type } from '@angular/core'; +import { ProjectionStrategy } from '../strategies/projection.strategy'; + +@Injectable({ providedIn: 'root' }) +export class ContentProjectionService { + constructor(private injector: Injector) {} + + projectContent | TemplateRef>( + projectionStrategy: ProjectionStrategy, + injector = this.injector, + ) { + return projectionStrategy.injectContent(injector); + } +} diff --git a/npm/ng-packs/packages/core/src/lib/services/dom-insertion.service.ts b/npm/ng-packs/packages/core/src/lib/services/dom-insertion.service.ts index f1a59e4e43..d4b30b731d 100644 --- a/npm/ng-packs/packages/core/src/lib/services/dom-insertion.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/dom-insertion.service.ts @@ -4,7 +4,7 @@ import { generateHash } from '../utils'; @Injectable({ providedIn: 'root' }) export class DomInsertionService { - readonly inserted = new Set(); + readonly inserted = new Set(); insertContent(contentStrategy: ContentStrategy) { const hash = generateHash(contentStrategy.content); diff --git a/npm/ng-packs/packages/core/src/lib/services/index.ts b/npm/ng-packs/packages/core/src/lib/services/index.ts index a64e721c67..f8b016bbd1 100644 --- a/npm/ng-packs/packages/core/src/lib/services/index.ts +++ b/npm/ng-packs/packages/core/src/lib/services/index.ts @@ -1,6 +1,7 @@ export * from './application-configuration.service'; export * from './auth.service'; export * from './config-state.service'; +export * from './content-projection.service'; export * from './dom-insertion.service'; export * from './lazy-load.service'; export * from './localization.service'; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/container.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/container.strategy.ts new file mode 100644 index 0000000000..dfe169e402 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/container.strategy.ts @@ -0,0 +1,44 @@ +import { ViewContainerRef } from '@angular/core'; + +export abstract class ContainerStrategy { + constructor(public containerRef: ViewContainerRef) {} + + abstract getIndex(): number; + + prepare(): void {} +} + +export class ClearContainerStrategy extends ContainerStrategy { + getIndex(): number { + return 0; + } + + prepare() { + this.containerRef.clear(); + } +} + +export class InsertIntoContainerStrategy extends ContainerStrategy { + constructor(containerRef: ViewContainerRef, private index: number) { + super(containerRef); + } + + getIndex() { + return Math.min(Math.max(0, this.index), this.containerRef.length); + } +} + +export const CONTAINER_STRATEGY = { + Clear(containerRef: ViewContainerRef) { + return new ClearContainerStrategy(containerRef); + }, + Append(containerRef: ViewContainerRef) { + return new InsertIntoContainerStrategy(containerRef, containerRef.length); + }, + Prepend(containerRef: ViewContainerRef) { + return new InsertIntoContainerStrategy(containerRef, 0); + }, + Insert(containerRef: ViewContainerRef, index: number) { + return new InsertIntoContainerStrategy(containerRef, index); + }, +}; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/context.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/context.strategy.ts new file mode 100644 index 0000000000..21007eae1c --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/context.strategy.ts @@ -0,0 +1,47 @@ +import { ComponentRef, TemplateRef, Type } from '@angular/core'; +import { InferredContextOf, InferredInstanceOf } from '../models'; + +export abstract class ContextStrategy { + constructor(public context: Partial>) {} + + /* tslint:disable-next-line:no-unused-variable */ + setContext(componentRef?: ComponentRef>): Partial> { + return this.context; + } +} + +export class NoContextStrategy< + T extends Type | TemplateRef = any +> extends ContextStrategy { + constructor() { + super(undefined); + } +} + +export class ComponentContextStrategy = any> extends ContextStrategy { + setContext(componentRef: ComponentRef>): Partial> { + Object.keys(this.context).forEach(key => (componentRef.instance[key] = this.context[key])); + componentRef.changeDetectorRef.detectChanges(); + return this.context; + } +} + +export class TemplateContextStrategy = any> extends ContextStrategy { + setContext(): Partial> { + return this.context; + } +} + +export const CONTEXT_STRATEGY = { + None | TemplateRef = any>() { + return new NoContextStrategy(); + }, + Component = any>(context: Partial>) { + return new ComponentContextStrategy(context); + }, + Template = any>(context: Partial>) { + return new TemplateContextStrategy(context); + }, +}; + +type ContextType = T extends Type | TemplateRef ? U : never; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/index.ts b/npm/ng-packs/packages/core/src/lib/strategies/index.ts index 2d6be484dd..2e621e7907 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/index.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/index.ts @@ -1,5 +1,8 @@ +export * from './container.strategy'; export * from './content-security.strategy'; export * from './content.strategy'; +export * from './context.strategy'; export * from './cross-origin.strategy'; export * from './dom.strategy'; export * from './loading.strategy'; +export * from './projection.strategy'; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts new file mode 100644 index 0000000000..e7a62383a2 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/projection.strategy.ts @@ -0,0 +1,176 @@ +import { + ApplicationRef, + ComponentFactoryResolver, + ComponentRef, + EmbeddedViewRef, + Injector, + TemplateRef, + Type, + ViewContainerRef, +} from '@angular/core'; +import { InferredContextOf, InferredInstanceOf } from '../models/utility'; +import { ContainerStrategy, CONTAINER_STRATEGY } from './container.strategy'; +import { ContextStrategy, CONTEXT_STRATEGY } from './context.strategy'; +import { DomStrategy, DOM_STRATEGY } from './dom.strategy'; + +export abstract class ProjectionStrategy { + constructor(public content: T) {} + + abstract injectContent(injector: Injector): ComponentRefOrEmbeddedViewRef; +} + +export class ComponentProjectionStrategy> extends ProjectionStrategy { + constructor( + component: T, + private containerStrategy: ContainerStrategy, + private contextStrategy: ContextStrategy = CONTEXT_STRATEGY.None(), + ) { + super(component); + } + + injectContent(injector: Injector) { + this.containerStrategy.prepare(); + + const resolver = injector.get(ComponentFactoryResolver) as ComponentFactoryResolver; + const factory = resolver.resolveComponentFactory>(this.content); + + const componentRef = this.containerStrategy.containerRef.createComponent( + factory, + this.containerStrategy.getIndex(), + injector, + ); + this.contextStrategy.setContext(componentRef); + + return componentRef as ComponentRefOrEmbeddedViewRef; + } +} + +export class RootComponentProjectionStrategy> extends ProjectionStrategy { + constructor( + component: T, + private contextStrategy: ContextStrategy = CONTEXT_STRATEGY.None(), + private domStrategy: DomStrategy = DOM_STRATEGY.AppendToBody(), + ) { + super(component); + } + + injectContent(injector: Injector) { + const appRef = injector.get(ApplicationRef); + const resolver = injector.get(ComponentFactoryResolver) as ComponentFactoryResolver; + const componentRef = resolver + .resolveComponentFactory>(this.content) + .create(injector); + + this.contextStrategy.setContext(componentRef); + + appRef.attachView(componentRef.hostView); + const element: HTMLElement = (componentRef.hostView as EmbeddedViewRef).rootNodes[0]; + this.domStrategy.insertElement(element); + + return componentRef as ComponentRefOrEmbeddedViewRef; + } +} + +export class TemplateProjectionStrategy> extends ProjectionStrategy { + constructor( + templateRef: T, + private containerStrategy: ContainerStrategy, + private contextStrategy = CONTEXT_STRATEGY.None(), + ) { + super(templateRef); + } + + injectContent() { + this.containerStrategy.prepare(); + + const embeddedViewRef = this.containerStrategy.containerRef.createEmbeddedView( + this.content, + this.contextStrategy.context, + this.containerStrategy.getIndex(), + ); + embeddedViewRef.detectChanges(); + + return embeddedViewRef as ComponentRefOrEmbeddedViewRef; + } +} + +export const PROJECTION_STRATEGY = { + AppendComponentToBody>(component: T, context?: InferredInstanceOf) { + return new RootComponentProjectionStrategy( + component, + context && CONTEXT_STRATEGY.Component(context), + ); + }, + AppendComponentToContainer>( + component: T, + containerRef: ViewContainerRef, + context?: InferredInstanceOf, + ) { + return new ComponentProjectionStrategy( + component, + CONTAINER_STRATEGY.Append(containerRef), + context && CONTEXT_STRATEGY.Component(context), + ); + }, + AppendTemplateToContainer>( + templateRef: T, + containerRef: ViewContainerRef, + context?: InferredContextOf, + ) { + return new TemplateProjectionStrategy( + templateRef, + CONTAINER_STRATEGY.Append(containerRef), + context && CONTEXT_STRATEGY.Template(context), + ); + }, + PrependComponentToContainer>( + component: T, + containerRef: ViewContainerRef, + context?: InferredInstanceOf, + ) { + return new ComponentProjectionStrategy( + component, + CONTAINER_STRATEGY.Prepend(containerRef), + context && CONTEXT_STRATEGY.Component(context), + ); + }, + PrependTemplateToContainer>( + templateRef: T, + containerRef: ViewContainerRef, + context?: InferredContextOf, + ) { + return new TemplateProjectionStrategy( + templateRef, + CONTAINER_STRATEGY.Prepend(containerRef), + context && CONTEXT_STRATEGY.Template(context), + ); + }, + ProjectComponentToContainer>( + component: T, + containerRef: ViewContainerRef, + context?: InferredInstanceOf, + ) { + return new ComponentProjectionStrategy( + component, + CONTAINER_STRATEGY.Clear(containerRef), + context && CONTEXT_STRATEGY.Component(context), + ); + }, + ProjectTemplateToContainer>( + templateRef: T, + containerRef: ViewContainerRef, + context?: InferredContextOf, + ) { + return new TemplateProjectionStrategy( + templateRef, + CONTAINER_STRATEGY.Clear(containerRef), + context && CONTEXT_STRATEGY.Template(context), + ); + }, +}; + +type ComponentRefOrEmbeddedViewRef = T extends Type + ? ComponentRef + : T extends TemplateRef + ? EmbeddedViewRef + : never; diff --git a/npm/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts new file mode 100644 index 0000000000..e85e7b5a50 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/container.strategy.spec.ts @@ -0,0 +1,80 @@ +import { ViewContainerRef } from '@angular/core'; +import { + ClearContainerStrategy, + CONTAINER_STRATEGY, + InsertIntoContainerStrategy, +} from '../strategies'; + +describe('ClearContainerStrategy', () => { + const containerRef = ({ + clear: jest.fn(), + length: 7, + } as any) as ViewContainerRef; + + describe('#getIndex', () => { + it('should return 0', () => { + const strategy = new ClearContainerStrategy(containerRef); + expect(strategy.getIndex()).toBe(0); + }); + }); + + describe('#prepare', () => { + it('should call clear method of containerRef once', () => { + const strategy = new ClearContainerStrategy(containerRef); + strategy.prepare(); + expect(strategy.getIndex()).toBe(0); + expect(containerRef.clear).toHaveBeenCalledTimes(1); + }); + }); +}); + +describe('InsertIntoContainerStrategy', () => { + const containerRef = ({ + clear: jest.fn(), + length: 7, + } as any) as ViewContainerRef; + + describe('#getIndex', () => { + test.each` + index | expected + ${0} | ${0} + ${4} | ${4} + ${9} | ${7} + ${-1} | ${0} + ${Infinity} | ${7} + `( + 'should return $expected when index is given $index', + ({ index, expected }: { index: number; expected: number }) => { + const strategy = new InsertIntoContainerStrategy(containerRef, index); + expect(strategy.getIndex()).toBe(expected); + }, + ); + }); + + describe('#prepare', () => { + it('should not call clear method of containerRef', () => { + const strategy = new InsertIntoContainerStrategy(containerRef, 0); + strategy.prepare(); + expect(containerRef.clear).not.toHaveBeenCalled(); + }); + }); +}); + +describe('CONTAINER_STRATEGY', () => { + const containerRef = ({ + clear: jest.fn(), + length: 7, + } as any) as ViewContainerRef; + + test.each` + name | Strategy | index + ${'Clear'} | ${ClearContainerStrategy} | ${undefined} + ${'Append'} | ${InsertIntoContainerStrategy} | ${containerRef.length} + ${'Prepend'} | ${InsertIntoContainerStrategy} | ${0} + ${'Insert'} | ${InsertIntoContainerStrategy} | ${4} + `('should successfully map $name to $Strategy.name', ({ name, Strategy, index }) => { + expect(CONTAINER_STRATEGY[name](containerRef, index)).toEqual( + new Strategy(containerRef, index), + ); + }); +}); diff --git a/npm/ng-packs/packages/core/src/lib/tests/content-projection.service.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/content-projection.service.spec.ts new file mode 100644 index 0000000000..30f9f92e73 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/content-projection.service.spec.ts @@ -0,0 +1,38 @@ +import { Component, ComponentRef, NgModule } from '@angular/core'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator'; +import { ContentProjectionService } from '../services'; +import { PROJECTION_STRATEGY } from '../strategies'; + +describe('ContentProjectionService', () => { + @Component({ template: '
bar
' }) + class TestComponent {} + + // createServiceFactory does not accept entryComponents directly + @NgModule({ + declarations: [TestComponent], + entryComponents: [TestComponent], + }) + class TestModule {} + + let componentRef: ComponentRef; + let spectator: SpectatorService; + const createService = createServiceFactory({ + service: ContentProjectionService, + imports: [TestModule], + }); + + beforeEach(() => (spectator = createService())); + + afterEach(() => componentRef.destroy()); + + describe('#projectContent', () => { + it('should call injectContent of given projectionStrategy and return what it returns', () => { + const strategy = PROJECTION_STRATEGY.AppendComponentToBody(TestComponent); + componentRef = spectator.service.projectContent(strategy); + const foo = document.querySelector('body > ng-component > div.foo'); + + expect(componentRef).toBeInstanceOf(ComponentRef); + expect(foo.textContent).toBe('bar'); + }); + }); +}); diff --git a/npm/ng-packs/packages/core/src/lib/tests/context.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/context.strategy.spec.ts new file mode 100644 index 0000000000..461c397457 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/context.strategy.spec.ts @@ -0,0 +1,79 @@ +import { ComponentRef } from '@angular/core'; +import { + ComponentContextStrategy, + CONTEXT_STRATEGY, + NoContextStrategy, + TemplateContextStrategy, +} from '../strategies'; +import { uuid } from '../utils'; + +describe('ComponentContextStrategy', () => { + describe('#setContext', () => { + let componentRef: ComponentRef; + + beforeEach( + () => + (componentRef = { + instance: { + x: '', + y: '', + z: '', + }, + changeDetectorRef: { + detectChanges: jest.fn(), + }, + } as any), + ); + + test.each` + props | values + ${['x']} | ${[uuid()]} + ${['x', 'y']} | ${[uuid(), uuid()]} + ${['x', 'y', 'z']} | ${[uuid(), uuid(), uuid()]} + `( + 'should set $props as $values and call detectChanges once', + ({ props, values }: { props: string[]; values: string[] }) => { + const context = {}; + props.forEach((prop, i) => { + context[prop] = values[i]; + }); + + const strategy = new ComponentContextStrategy(context); + strategy.setContext(componentRef); + + expect(props.every(prop => componentRef.instance[prop] === context[prop])).toBe(true); + expect(componentRef.changeDetectorRef.detectChanges).toHaveBeenCalledTimes(1); + }, + ); + }); +}); + +describe('NoContextStrategy', () => { + describe('#setContext', () => { + it('should return undefined', () => { + const strategy = new NoContextStrategy(); + expect(strategy.setContext(null)).toBeUndefined(); + }); + }); +}); + +describe('TemplateContextStrategy', () => { + describe('#setContext', () => { + it('should return context', () => { + const context = { x: uuid() }; + const strategy = new TemplateContextStrategy(context); + expect(strategy.setContext()).toEqual(context); + }); + }); +}); + +describe('CONTEXT_STRATEGY', () => { + test.each` + name | Strategy + ${'Component'} | ${ComponentContextStrategy} + ${'None'} | ${NoContextStrategy} + ${'Template'} | ${TemplateContextStrategy} + `('should successfully map $name to $Strategy.name', ({ name, Strategy }) => { + expect(CONTEXT_STRATEGY[name](undefined)).toEqual(new Strategy(undefined)); + }); +}); diff --git a/npm/ng-packs/packages/core/src/lib/tests/dom-insertion.service.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/dom-insertion.service.spec.ts index 2570636197..f8e8565496 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/dom-insertion.service.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/dom-insertion.service.spec.ts @@ -3,13 +3,43 @@ import { DomInsertionService } from '../services'; import { CONTENT_STRATEGY } from '../strategies'; describe('DomInsertionService', () => { + let styleElements: NodeListOf; let spectator: SpectatorService; const createService = createServiceFactory(DomInsertionService); beforeEach(() => (spectator = createService())); - it('should be insert an element', () => { - spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead('.test {}')); - expect(spectator.service.inserted.has(1437348290)).toBe(true); + afterEach(() => styleElements.forEach(element => element.remove())); + + describe('#insertContent', () => { + it('should be able to insert given content', () => { + spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead('.test {}')); + styleElements = document.head.querySelectorAll('style'); + expect(styleElements.length).toBe(1); + expect(styleElements[0].textContent).toBe('.test {}'); + }); + + it('should insert only once', () => { + expect(spectator.service.inserted.has(1437348290)).toBe(false); + + spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead('.test {}')); + styleElements = document.head.querySelectorAll('style'); + + expect(styleElements.length).toBe(1); + expect(styleElements[0].textContent).toBe('.test {}'); + expect(spectator.service.inserted.has(1437348290)).toBe(true); + + spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead('.test {}')); + styleElements = document.head.querySelectorAll('style'); + + expect(styleElements.length).toBe(1); + expect(styleElements[0].textContent).toBe('.test {}'); + expect(spectator.service.inserted.has(1437348290)).toBe(true); + }); + + it('should be able to insert given content', () => { + spectator.service.insertContent(CONTENT_STRATEGY.AppendStyleToHead('.test {}')); + expect(spectator.service.inserted.has(1437348290)).toBe(true); + }); }); }); diff --git a/npm/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts new file mode 100644 index 0000000000..a0b3bb61bb --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/projection.strategy.spec.ts @@ -0,0 +1,276 @@ +import { + Component, + ComponentRef, + EmbeddedViewRef, + TemplateRef, + ViewChild, + ViewContainerRef, +} from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; +import { + ComponentProjectionStrategy, + ContainerStrategy, + CONTAINER_STRATEGY, + CONTEXT_STRATEGY, + DOM_STRATEGY, + PROJECTION_STRATEGY, + RootComponentProjectionStrategy, + TemplateProjectionStrategy, +} from '../strategies'; + +describe('ComponentProjectionStrategy', () => { + @Component({ + template: '
{{ bar || baz }}
', + }) + class TestComponent { + bar: string; + baz = 'baz'; + } + + @Component({ + template: '', + }) + class HostComponent { + @ViewChild('container', { static: true, read: ViewContainerRef }) + containerRef: ViewContainerRef; + } + + let containerStrategy: ContainerStrategy; + let spectator: Spectator; + let componentRef: ComponentRef; + + const createComponent = createComponentFactory({ + component: HostComponent, + entryComponents: [TestComponent], + }); + + beforeEach(() => { + spectator = createComponent({}); + containerStrategy = CONTAINER_STRATEGY.Clear(spectator.component.containerRef); + }); + + afterEach(() => { + componentRef.destroy(); + spectator.detectChanges(); + }); + + describe('#injectContent', () => { + it('should should insert content into container and return a ComponentRef', () => { + const strategy = new ComponentProjectionStrategy(TestComponent, containerStrategy); + componentRef = strategy.injectContent(spectator); + spectator.detectChanges(); + + const div = spectator.query('div.foo'); + expect(div.textContent).toBe('baz'); + expect(componentRef).toBeInstanceOf(ComponentRef); + }); + + it('should be able to map context to projected component', () => { + const contextStrategy = CONTEXT_STRATEGY.Component({ bar: 'bar' }); + const strategy = new ComponentProjectionStrategy( + TestComponent, + containerStrategy, + contextStrategy, + ); + componentRef = strategy.injectContent(spectator); + spectator.detectChanges(); + + const div = spectator.query('div.foo'); + expect(div.textContent).toBe('bar'); + expect(componentRef.instance.bar).toBe('bar'); + }); + }); +}); + +describe('RootComponentProjectionStrategy', () => { + @Component({ + template: '
{{ bar || baz }}
', + }) + class TestComponent { + bar: string; + baz = 'baz'; + } + + @Component({ template: '' }) + class HostComponent {} + + let spectator: Spectator; + let componentRef: ComponentRef; + + const createComponent = createComponentFactory({ + component: HostComponent, + entryComponents: [TestComponent], + }); + + beforeEach(() => { + spectator = createComponent({}); + }); + + afterEach(() => { + componentRef.destroy(); + spectator.detectChanges(); + }); + + describe('#injectContent', () => { + it('should should insert content into body and return a ComponentRef', () => { + const strategy = new RootComponentProjectionStrategy(TestComponent); + componentRef = strategy.injectContent(spectator); + spectator.detectChanges(); + + const div = document.querySelector('body > ng-component > div.foo'); + expect(div.textContent).toBe('baz'); + expect(componentRef).toBeInstanceOf(ComponentRef); + componentRef.destroy(); + spectator.detectChanges(); + }); + + it('should be able to map context to projected component', () => { + const contextStrategy = CONTEXT_STRATEGY.Component({ bar: 'bar' }); + const strategy = new RootComponentProjectionStrategy(TestComponent, contextStrategy); + componentRef = strategy.injectContent(spectator); + spectator.detectChanges(); + + const div = document.querySelector('body > ng-component > div.foo'); + expect(div.textContent).toBe('bar'); + expect(componentRef.instance.bar).toBe('bar'); + }); + }); +}); + +describe('TemplateProjectionStrategy', () => { + @Component({ + template: ` + +
{{ bar || baz }}
+
+ + `, + }) + class HostComponent { + @ViewChild('container', { static: true, read: ViewContainerRef }) + containerRef: ViewContainerRef; + + @ViewChild('template', { static: true }) + templateRef: TemplateRef<{ $implicit?: string }>; + + baz = 'baz'; + } + + let containerStrategy: ContainerStrategy; + let spectator: Spectator; + let embeddedViewRef: EmbeddedViewRef<{ $implicit?: string }>; + + const createComponent = createComponentFactory({ + component: HostComponent, + }); + + beforeEach(() => { + spectator = createComponent({}); + containerStrategy = CONTAINER_STRATEGY.Clear(spectator.component.containerRef); + }); + + afterEach(() => { + embeddedViewRef.destroy(); + spectator.detectChanges(); + }); + + describe('#injectContent', () => { + it('should should insert content into container and return an EmbeddedViewRef', () => { + const templateRef = spectator.component.templateRef; + const strategy = new TemplateProjectionStrategy(templateRef, containerStrategy); + embeddedViewRef = strategy.injectContent(); + spectator.detectChanges(); + + const div = spectator.query('div.foo'); + expect(div.textContent).toBe('baz'); + expect(embeddedViewRef).toHaveProperty('detectChanges'); + expect(embeddedViewRef).toHaveProperty('markForCheck'); + expect(embeddedViewRef).toHaveProperty('detach'); + expect(embeddedViewRef).toHaveProperty('reattach'); + expect(embeddedViewRef).toHaveProperty('destroy'); + expect(embeddedViewRef).toHaveProperty('rootNodes'); + expect(embeddedViewRef).toHaveProperty('context'); + }); + + it('should be able to map context to projected template', () => { + const templateRef = spectator.component.templateRef; + const contextStrategy = CONTEXT_STRATEGY.Template({ $implicit: 'bar' }); + const strategy = new TemplateProjectionStrategy( + templateRef, + containerStrategy, + contextStrategy, + ); + embeddedViewRef = strategy.injectContent(); + spectator.detectChanges(); + + const div = spectator.query('div.foo'); + expect(div.textContent).toBe('bar'); + expect(embeddedViewRef.context).toEqual(contextStrategy.context); + }); + }); +}); + +describe('PROJECTION_STRATEGY', () => { + const content = undefined; + const containerRef = ({ length: 0 } as any) as ViewContainerRef; + let context: any; + + test.each` + name | Strategy | containerStrategy + ${'AppendComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Append} + ${'AppendTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Append} + ${'PrependComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Prepend} + ${'PrependTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Prepend} + ${'ProjectComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Clear} + ${'ProjectTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Clear} + `( + 'should successfully map $name to $Strategy.name with $containerStrategy.name container strategy and $contextStrategy.name context strategy', + ({ name, Strategy, containerStrategy }) => { + expect(PROJECTION_STRATEGY[name](content, containerRef, context)).toEqual( + new Strategy(content, containerStrategy(containerRef), CONTEXT_STRATEGY.None()), + ); + }, + ); + test.each` + name | Strategy | domStrategy + ${'AppendComponentToBody'} | ${RootComponentProjectionStrategy} | ${DOM_STRATEGY.AppendToBody} + `( + 'should successfully map $name to $Strategy.name with $domStrategy.name dom strategy', + ({ name, Strategy, domStrategy }) => { + expect(PROJECTION_STRATEGY[name](content, context)).toEqual( + new Strategy(content, CONTEXT_STRATEGY.None(), domStrategy()), + ); + }, + ); + + test.each` + name | Strategy | containerStrategy | contextStrategy + ${'AppendComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Append} | ${CONTEXT_STRATEGY.Component} + ${'AppendTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Append} | ${CONTEXT_STRATEGY.Template} + ${'PrependComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Prepend} | ${CONTEXT_STRATEGY.Component} + ${'PrependTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Prepend} | ${CONTEXT_STRATEGY.Template} + ${'ProjectComponentToContainer'} | ${ComponentProjectionStrategy} | ${CONTAINER_STRATEGY.Clear} | ${CONTEXT_STRATEGY.Component} + ${'ProjectTemplateToContainer'} | ${TemplateProjectionStrategy} | ${CONTAINER_STRATEGY.Clear} | ${CONTEXT_STRATEGY.Template} + `( + 'should successfully map $name to $Strategy.name with $containerStrategy.name container strategy and $contextStrategy.name context strategy', + ({ name, Strategy, containerStrategy, contextStrategy }) => { + context = { x: true }; + expect(PROJECTION_STRATEGY[name](content, containerRef, context)).toEqual( + new Strategy(content, containerStrategy(containerRef), contextStrategy(context)), + ); + }, + ); + + test.each` + name | Strategy | contextStrategy | domStrategy + ${'AppendComponentToBody'} | ${RootComponentProjectionStrategy} | ${CONTEXT_STRATEGY.Component} | ${DOM_STRATEGY.AppendToBody} + `( + 'should successfully map $name to $Strategy.name with $contextStrategy.name context strategy and $domStrategy.name dom strategy', + ({ name, Strategy, domStrategy, contextStrategy }) => { + context = { x: true }; + expect(PROJECTION_STRATEGY[name](content, context)).toEqual( + new Strategy(content, contextStrategy(context), domStrategy()), + ); + }, + ); +}); diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index eaf9eef8e4..b21bfc03bf 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^2.4.0" + "@abp/ng.theme.shared": "~2.5.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/feature-management/src/lib/enums/components.ts b/npm/ng-packs/packages/feature-management/src/lib/enums/components.ts new file mode 100644 index 0000000000..10d0b564a0 --- /dev/null +++ b/npm/ng-packs/packages/feature-management/src/lib/enums/components.ts @@ -0,0 +1,3 @@ +export const enum eFeatureManagementComponents { + FeatureManagement = 'FeatureManagement.FeatureManagementComponent', +} diff --git a/npm/ng-packs/packages/feature-management/src/public-api.ts b/npm/ng-packs/packages/feature-management/src/public-api.ts index 047ac00914..382e9ed884 100644 --- a/npm/ng-packs/packages/feature-management/src/public-api.ts +++ b/npm/ng-packs/packages/feature-management/src/public-api.ts @@ -1,2 +1,3 @@ export * from './lib/feature-management.module'; export * from './lib/components'; +export * from './lib/enums/components'; diff --git a/npm/ng-packs/packages/identity-config/package.json b/npm/ng-packs/packages/identity-config/package.json index c2ff492f31..91419b3d38 100644 --- a/npm/ng-packs/packages/identity-config/package.json +++ b/npm/ng-packs/packages/identity-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.identity.config", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 7d7fbc7a7f..5e9930608e 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.identity", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.identity.config": "^2.4.0", - "@abp/ng.permission-management": "^2.4.0", - "@abp/ng.theme.shared": "^2.4.0" + "@abp/ng.identity.config": "~2.5.0", + "@abp/ng.permission-management": "~2.5.0", + "@abp/ng.theme.shared": "~2.5.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html index f800c4a8e4..9962d8dbb4 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.html @@ -166,7 +166,7 @@ hideBadges: { value: true } }, outputs: { visibleChange: onVisiblePermissionChange }, - componentKey: 'PermissionManagement.PermissionManagementComponent' + componentKey: permissionManagementKey }; let init = initTemplate " diff --git a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts index 20b1114669..5e0f64e811 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/roles/roles.component.ts @@ -14,6 +14,7 @@ import { } from '../../actions/identity.actions'; import { Identity } from '../../models/identity'; import { IdentityState } from '../../states/identity.state'; +import { ePermissionManagementComponents } from '@abp/ng.permission-management'; @Component({ selector: 'abp-roles', @@ -46,6 +47,8 @@ export class RolesComponent implements OnInit { sortKey = ''; + permissionManagementKey = ePermissionManagementComponents.PermissionManagement; + @ViewChild('formRef', { static: false, read: ElementRef }) formRef: ElementRef; diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html index 38b22789e9..e00dbfe866 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html @@ -262,7 +262,7 @@ visible: { value: visiblePermissions, twoWay: true } }, outputs: { visibleChange: onVisiblePermissionChange }, - componentKey: 'PermissionManagement.PermissionManagementComponent' + componentKey: permissionManagementKey }; let init = initTemplate " diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts index 1e943a6be6..e208f9ffec 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts @@ -24,6 +24,7 @@ import { import { Identity } from '../../models/identity'; import { IdentityService } from '../../services/identity.service'; import { IdentityState } from '../../states/identity.state'; +import { ePermissionManagementComponents } from '@abp/ng.permission-management'; @Component({ selector: 'abp-users', templateUrl: './users.component.html', @@ -62,6 +63,8 @@ export class UsersComponent implements OnInit { sortKey = ''; + permissionManagementKey = ePermissionManagementComponents.PermissionManagement; + trackByFn: TrackByFunction = (index, item) => Object.keys(item)[0] || index; onVisiblePermissionChange = event => { diff --git a/npm/ng-packs/packages/identity/src/lib/enums/components.ts b/npm/ng-packs/packages/identity/src/lib/enums/components.ts new file mode 100644 index 0000000000..abadd38955 --- /dev/null +++ b/npm/ng-packs/packages/identity/src/lib/enums/components.ts @@ -0,0 +1,4 @@ +export const enum eIdentityComponents { + Roles = 'Identity.RolesComponent', + Users = 'Identity.UsersComponent', +} diff --git a/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts b/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts index eff6a7ce98..f7d5463fcd 100644 --- a/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts +++ b/npm/ng-packs/packages/identity/src/lib/identity-routing.module.ts @@ -10,6 +10,7 @@ import { NgModule, Type } from '@angular/core'; import { RouterModule, Routes, Router, ActivatedRoute } from '@angular/router'; import { RolesComponent } from './components/roles/roles.component'; import { UsersComponent } from './components/users/users.component'; +import { eIdentityComponents } from './enums/components'; const routes: Routes = [ { path: '', redirectTo: 'roles', pathMatch: 'full' }, @@ -24,7 +25,7 @@ const routes: Routes = [ data: { requiredPolicy: 'AbpIdentity.Roles', replaceableComponent: { - key: 'Identity.RolesComponent', + key: eIdentityComponents.Roles, defaultComponent: RolesComponent, } as ReplaceableComponents.RouteData, }, @@ -35,7 +36,7 @@ const routes: Routes = [ data: { requiredPolicy: 'AbpIdentity.Users', replaceableComponent: { - key: 'Identity.UsersComponent', + key: eIdentityComponents.Users, defaultComponent: UsersComponent, } as ReplaceableComponents.RouteData, }, diff --git a/npm/ng-packs/packages/identity/src/public-api.ts b/npm/ng-packs/packages/identity/src/public-api.ts index b401fed1c6..1a2b217931 100644 --- a/npm/ng-packs/packages/identity/src/public-api.ts +++ b/npm/ng-packs/packages/identity/src/public-api.ts @@ -4,6 +4,7 @@ export * from './lib/identity.module'; export * from './lib/actions/identity.actions'; +export * from './lib/enums/components'; export * from './lib/components'; export * from './lib/models/identity'; export * from './lib/services'; diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 9c6fb6bf5a..520ec54765 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^2.4.0" + "@abp/ng.theme.shared": "~2.5.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/permission-management/src/lib/enums/components.ts b/npm/ng-packs/packages/permission-management/src/lib/enums/components.ts new file mode 100644 index 0000000000..175d39c999 --- /dev/null +++ b/npm/ng-packs/packages/permission-management/src/lib/enums/components.ts @@ -0,0 +1,3 @@ +export const enum ePermissionManagementComponents { + PermissionManagement = 'PermissionManagement.PermissionManagementComponent', +} diff --git a/npm/ng-packs/packages/permission-management/src/public-api.ts b/npm/ng-packs/packages/permission-management/src/public-api.ts index 3182363f25..c9a8445ebd 100644 --- a/npm/ng-packs/packages/permission-management/src/public-api.ts +++ b/npm/ng-packs/packages/permission-management/src/public-api.ts @@ -5,6 +5,7 @@ export * from './lib/permission-management.module'; export * from './lib/actions'; export * from './lib/components'; +export * from './lib/enums/components'; export * from './lib/models'; export * from './lib/services'; export * from './lib/states'; diff --git a/npm/ng-packs/packages/setting-management-config/package.json b/npm/ng-packs/packages/setting-management-config/package.json index 03982d2a46..3e38fe8fc0 100644 --- a/npm/ng-packs/packages/setting-management-config/package.json +++ b/npm/ng-packs/packages/setting-management-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.setting-management.config", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 0198a9ff86..716df5385e 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.setting-management", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.setting-management.config": "^2.4.0", - "@abp/ng.theme.shared": "^2.4.0" + "@abp/ng.setting-management.config": "~2.5.0", + "@abp/ng.theme.shared": "~2.5.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/setting-management/src/lib/enums/components.ts b/npm/ng-packs/packages/setting-management/src/lib/enums/components.ts new file mode 100644 index 0000000000..7dafe76b7d --- /dev/null +++ b/npm/ng-packs/packages/setting-management/src/lib/enums/components.ts @@ -0,0 +1,3 @@ +export const enum eSettingManagementComponents { + SettingManagement = 'SettingManagement.SettingManagementComponent', +} diff --git a/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts b/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts index d9a50073e1..f394abc962 100644 --- a/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts +++ b/npm/ng-packs/packages/setting-management/src/lib/setting-management-routing.module.ts @@ -6,6 +6,7 @@ import { import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { SettingManagementComponent } from './components/setting-management.component'; +import { eSettingManagementComponents } from './enums/components'; const routes: Routes = [ { @@ -18,7 +19,7 @@ const routes: Routes = [ data: { requiredPolicy: 'AbpAccount.SettingManagement', replaceableComponent: { - key: 'SettingManagement.SettingManagementComponent', + key: eSettingManagementComponents.SettingManagement, defaultComponent: SettingManagementComponent, } as ReplaceableComponents.RouteData, }, diff --git a/npm/ng-packs/packages/setting-management/src/public-api.ts b/npm/ng-packs/packages/setting-management/src/public-api.ts index 8027d769f9..ac030c3ccf 100644 --- a/npm/ng-packs/packages/setting-management/src/public-api.ts +++ b/npm/ng-packs/packages/setting-management/src/public-api.ts @@ -1,2 +1,3 @@ export * from './lib/setting-management.module'; export * from './lib/components/setting-management.component'; +export * from './lib/enums/components'; diff --git a/npm/ng-packs/packages/tenant-management-config/package.json b/npm/ng-packs/packages/tenant-management-config/package.json index 7519c947c2..1fd027579b 100644 --- a/npm/ng-packs/packages/tenant-management-config/package.json +++ b/npm/ng-packs/packages/tenant-management-config/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.tenant-management.config", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index e23f2599e4..49baed552f 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.tenant-management", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "^2.4.0", - "@abp/ng.tenant-management.config": "^2.4.0", - "@abp/ng.theme.shared": "^2.4.0" + "@abp/ng.feature-management": "~2.5.0", + "@abp/ng.tenant-management.config": "~2.5.0", + "@abp/ng.theme.shared": "~2.5.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html index 2b0276ede8..10761a3618 100644 --- a/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html +++ b/npm/ng-packs/packages/tenant-management/src/lib/components/tenants/tenants.component.html @@ -141,7 +141,9 @@
- +
- + , }, diff --git a/npm/ng-packs/packages/tenant-management/src/public-api.ts b/npm/ng-packs/packages/tenant-management/src/public-api.ts index 20cecd353f..003074b2c4 100644 --- a/npm/ng-packs/packages/tenant-management/src/public-api.ts +++ b/npm/ng-packs/packages/tenant-management/src/public-api.ts @@ -1,6 +1,7 @@ export * from './lib/tenant-management.module'; export * from './lib/actions'; export * from './lib/components'; +export * from './lib/enums/components'; export * from './lib/models'; export * from './lib/services'; export * from './lib/states'; diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 2aa3a0f7cb..bfbe9e170b 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.basic", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "^2.4.0" + "@abp/ng.theme.shared": "~2.5.0" }, "publishConfig": { "access": "public" diff --git a/npm/ng-packs/packages/theme-basic/src/lib/enums/components.ts b/npm/ng-packs/packages/theme-basic/src/lib/enums/components.ts new file mode 100644 index 0000000000..e773e17464 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/enums/components.ts @@ -0,0 +1,5 @@ +export const enum eThemeBasicComponents { + ApplicationLayout = 'Theme.ApplicationLayoutComponent', + AccountLayout = 'Theme.AccountLayoutComponent', + EmptyLayout = 'Theme.EmptyLayoutComponent', +} diff --git a/npm/ng-packs/packages/theme-basic/src/lib/services/initial.service.ts b/npm/ng-packs/packages/theme-basic/src/lib/services/initial.service.ts index 2510b77a8d..c5bc93cbf0 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/services/initial.service.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/services/initial.service.ts @@ -5,6 +5,7 @@ import styles from '../constants/styles'; import { ApplicationLayoutComponent } from '../components/application-layout/application-layout.component'; import { AccountLayoutComponent } from '../components/account-layout/account-layout.component'; import { EmptyLayoutComponent } from '../components/empty-layout/empty-layout.component'; +import { eThemeBasicComponents } from '../enums/components'; @Injectable({ providedIn: 'root' }) export class InitialService { @@ -13,15 +14,15 @@ export class InitialService { this.store.dispatch([ new AddReplaceableComponent({ - key: 'Theme.ApplicationLayoutComponent', + key: eThemeBasicComponents.ApplicationLayout, component: ApplicationLayoutComponent, }), new AddReplaceableComponent({ - key: 'Theme.AccountLayoutComponent', + key: eThemeBasicComponents.AccountLayout, component: AccountLayoutComponent, }), new AddReplaceableComponent({ - key: 'Theme.EmptyLayoutComponent', + key: eThemeBasicComponents.EmptyLayout, component: EmptyLayoutComponent, }), ]); diff --git a/npm/ng-packs/packages/theme-basic/src/public-api.ts b/npm/ng-packs/packages/theme-basic/src/public-api.ts index b1316143c0..ee01995829 100644 --- a/npm/ng-packs/packages/theme-basic/src/public-api.ts +++ b/npm/ng-packs/packages/theme-basic/src/public-api.ts @@ -5,5 +5,6 @@ export * from './lib/theme-basic.module'; export * from './lib/actions'; export * from './lib/components'; +export * from './lib/enums/components'; export * from './lib/models'; export * from './lib/states'; diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 81711ccd7d..ce8ee044b9 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "2.4.0", + "version": "2.5.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "^2.4.0", + "@abp/ng.core": "~2.5.0", "@fortawesome/fontawesome-free": "^5.12.1", "@ng-bootstrap/ng-bootstrap": "^5.3.0", "@ngx-validate/core": "^0.0.7", diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html b/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html index 95f259225c..046e8bb67a 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.html @@ -1,5 +1,16 @@ -
- @@ -11,7 +22,11 @@ {{ details | abpLocalization }}
- {{ { key: '::Menu:Home', defaultValue: 'Home' } | abpLocalization }} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts index a102672ad6..0ada431f4f 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/http-error-wrapper/http-error-wrapper.component.ts @@ -42,6 +42,8 @@ export class HttpErrorWrapperComponent implements AfterViewInit, OnDestroy, OnIn backgroundColor: string; + isHomeShow = true; + @ViewChild('container', { static: false }) containerRef: ElementRef; @@ -51,16 +53,21 @@ export class HttpErrorWrapperComponent implements AfterViewInit, OnDestroy, OnIn ngOnInit() { this.backgroundColor = - snq(() => window.getComputedStyle(document.body).getPropertyValue('background-color')) || '#fff'; + snq(() => window.getComputedStyle(document.body).getPropertyValue('background-color')) || + '#fff'; } ngAfterViewInit() { if (this.customComponent) { - const customComponentRef = this.cfRes.resolveComponentFactory(this.customComponent).create(this.injector); + const customComponentRef = this.cfRes + .resolveComponentFactory(this.customComponent) + .create(this.injector); customComponentRef.instance.errorStatus = this.status; customComponentRef.instance.destroy$ = this.destroy$; this.appRef.attachView(customComponentRef.hostView); - this.containerRef.nativeElement.appendChild((customComponentRef.hostView as EmbeddedViewRef).rootNodes[0]); + this.containerRef.nativeElement.appendChild( + (customComponentRef.hostView as EmbeddedViewRef).rootNodes[0], + ); customComponentRef.changeDetectorRef.detectChanges(); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index e00cda5b55..2527ab033d 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -102,17 +102,7 @@ export class ModalComponent implements OnDestroy { destroy$ = new Subject(); get isFormDirty(): boolean { - let node: HTMLDivElement; - if (!this.modalContent) { - node = document.getElementById('modal-container') as HTMLDivElement; - } - - const nodes = getFlatNodes( - ((node || this.modalContent.nativeElement).querySelector('#abp-modal-body') as HTMLElement) - .childNodes, - ); - - return hasNgDirty(nodes); + return Boolean(document.querySelector('.modal-dialog .ng-dirty')); } constructor(private renderer: Renderer2, private confirmationService: ConfirmationService) {} @@ -178,17 +168,3 @@ export class ModalComponent implements OnDestroy { this.init.emit(); } } - -function getFlatNodes(nodes: NodeList): HTMLElement[] { - return Array.from(nodes).reduce( - (acc, val) => [ - ...acc, - ...(val.childNodes && val.childNodes.length ? getFlatNodes(val.childNodes) : [val]), - ], - [], - ); -} - -function hasNgDirty(nodes: HTMLElement[]) { - return nodes.findIndex(node => (node.className || '').indexOf('ng-dirty') > -1) > -1; -} diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts index 40b76cbfc8..bed4fab0da 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/loading.directive.ts @@ -54,7 +54,7 @@ export class LoadingDirective implements OnInit, OnDestroy { if (newValue && !this.rootNode) { this.rootNode = (this.componentRef.hostView as EmbeddedViewRef).rootNodes[0]; this.targetElement.appendChild(this.rootNode); - } else { + } else if (this.rootNode) { this.renderer.removeChild(this.rootNode.parentElement, this.rootNode); this.rootNode = null; } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts index c84bf30470..93d3080cc0 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts @@ -138,6 +138,8 @@ export class ErrorHandler { key: 'AbpAccount::DefaultErrorMessage', defaultValue: DEFAULT_ERROR_MESSAGES.defaultError.title, }, + details: err.message, + isHomeShow: false, }); } break; diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 9bd1c259c4..5e156ae867 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,117 +2,119 @@ # yarn lockfile v1 -"@abp/ng.account.config@^2.3.0", "@abp/ng.account.config@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.account.config/-/ng.account.config-2.3.0.tgz#28d65e2eb889d8b44fc726edbed7509214e8034a" - integrity sha512-Vg4+8PvGfgUC+pFtPIS53ZekJM+O4JZ8wGPGaZ/ySLpk2oSfzC/5RFS2rKq3cmySeRCJunmQinCAlBCm5zir8A== +"@abp/ng.account.config@^2.5.0", "@abp/ng.account.config@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account.config/-/ng.account.config-2.5.0.tgz#08122916985765f62b0cd9ef2d9a8609a485131b" + integrity sha512-Ld7nsGOw3TafWaJ64umHB3NwI4tgeLKkhU6IO7/Dbx0UZvcRepND07pLPAbpgxPxSffNDmREHnA+lrtP1i96vA== dependencies: tslib "^1.9.0" -"@abp/ng.account@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-2.3.0.tgz#9ca2a564c177c43b53f69f141405914baefbc7b2" - integrity sha512-kJCek8woGGEC1WTgo75Qr2ucyD5VV1nqqnkw8UMJ96/pqASpBJHczGTL8R4ug961i4vexKDnMbiv0SmfMlBDig== +"@abp/ng.account@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-2.5.0.tgz#b5271da490136f7e23cbae21588e9fd6f8f398c7" + integrity sha512-C6RD9L0+gkyjuCSUGP9C55h+oMIoPNkSe3fF4RWkLaqb1hLriIEqyeTODHnhdV4TfEVkVCmhS88XhoNGwmFz/g== dependencies: - "@abp/ng.account.config" "^2.3.0" - "@abp/ng.theme.shared" "^2.3.0" + "@abp/ng.account.config" "^2.5.0" + "@abp/ng.theme.shared" "^2.5.0" tslib "^1.9.0" -"@abp/ng.core@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-2.3.0.tgz#96bad951da07e589f11a0345171e1a142463671e" - integrity sha512-6SsgcRJQWjXvyEZ7VO2ekOoVmKkFB17vJgTvQLiyB+j2t9guAo3LPDcMGGKNum/oInkiYczf8MY7sculrElyKQ== +"@abp/ng.core@^2.5.0", "@abp/ng.core@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-2.5.0.tgz#e7168615b4078e3fa494c4efcc69842acbd2c627" + integrity sha512-opYkOFCKeU17YvNJhfcG1dOwZZ4F2QGspTNTagNZ9fepmeNl0yqFamFdRM6irfEEL3cOBQhUpI2NQZP+ugLOEg== dependencies: - "@angular/localize" "~9.0.2" + "@abp/utils" "^2.4.0" + "@angular/localize" "~9.1.0" "@ngxs/router-plugin" "^3.6.2" "@ngxs/storage-plugin" "^3.6.2" "@ngxs/store" "^3.6.2" angular-oauth2-oidc "^8.0.4" - just-clone "3.1.0" + just-clone "^3.1.0" just-compare "^1.3.0" snq "^1.0.3" + ts-toolbelt "^6.3.6" tslib "^1.9.0" -"@abp/ng.feature-management@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-2.3.0.tgz#91172fa9f308b3a792a2bf1e762e24560556f412" - integrity sha512-ShytiV1SC3PwP4Hs8Ss3bk2UAZBXteHKWcrIhAvqtWsOQ2aql6e7t+FutRA3wtUuRdX6PTrMRXbMRvhCwGZUKQ== +"@abp/ng.feature-management@^2.5.0", "@abp/ng.feature-management@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-2.5.0.tgz#3bc4501a2abbe6b6447e5b4a2b2d86fb07ce8a59" + integrity sha512-keZ3gCDMvU/e17tsBBrZpLmpIpDm/2TTSAmCoRRy3GH4BQICXr/XJmssStNx7V7sdo6vAPiW9pcM9zI/C8IrBw== dependencies: - "@abp/ng.theme.shared" "^2.3.0" + "@abp/ng.theme.shared" "^2.5.0" tslib "^1.9.0" -"@abp/ng.identity.config@^2.3.0", "@abp/ng.identity.config@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.identity.config/-/ng.identity.config-2.3.0.tgz#e9f4904d60f94cc01b3254e0221d7cdb2274aa3b" - integrity sha512-bqCaPHCwaHUfAfNfFskGTJHGvv+hPK9Tmm7PouVa884AmeQs2j0Gwl3o93YHK2VwXENV09qb01feXapSVPsmTw== +"@abp/ng.identity.config@^2.5.0", "@abp/ng.identity.config@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity.config/-/ng.identity.config-2.5.0.tgz#d5daad786ae8c6d61e887f4ec52497635abfff94" + integrity sha512-nvVkRzT3gsLZTzjjMkR20FjmmnxDC7viUNRSjp4ufGqHfWbUaNS16chrWqvr+0f7JEzeULKWfXQEjWafqLWBbg== dependencies: tslib "^1.9.0" -"@abp/ng.identity@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-2.3.0.tgz#c973f12f5490b1d29c80f510540b18343f998b8d" - integrity sha512-vBLLxCax7MoHilakpW9XMRFGUXcdMM0syiz0PtkgKmYADIQIQ9AzcfwslK2D6wwy447s6NIoGnThtfbshoRtLw== +"@abp/ng.identity@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-2.5.0.tgz#b2e2dea559ce89dce52a82cf02d612864076ab2c" + integrity sha512-RIZnYRhNMbyjaX/Nb43fgG8/hBcvfBLpd3ZpP6arJDUY4YLvN3zvGJ9d52+3nGgj9WpXZTm+/X7c8Iuu5a2ocA== dependencies: - "@abp/ng.identity.config" "^2.3.0" - "@abp/ng.permission-management" "^2.3.0" - "@abp/ng.theme.shared" "^2.3.0" + "@abp/ng.identity.config" "^2.5.0" + "@abp/ng.permission-management" "^2.5.0" + "@abp/ng.theme.shared" "^2.5.0" tslib "^1.9.0" -"@abp/ng.permission-management@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-2.3.0.tgz#16599a2e1583c9d6769edb1dc9b78a45b75b7402" - integrity sha512-vJSfcmXCXpBHMjeRb/0QoKlAcvpCQ/qS2quHFUr23nriXIeNxgEdCVHkTBZU8FMxfyTfwwrFRzF2oxn33gubbg== +"@abp/ng.permission-management@^2.5.0", "@abp/ng.permission-management@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-2.5.0.tgz#c769a97aee8517ec724dc5b7756e1dfc8fe7fcf1" + integrity sha512-grmJ46Qf26cwGfDt5acL6eXXWBDgjvL/04/ZLtxsP4Hf+tSlnL/1rWz5fxMF8548sQ6vZlVIdrSa4Tz/Dh0WLw== dependencies: - "@abp/ng.theme.shared" "^2.3.0" + "@abp/ng.theme.shared" "^2.5.0" tslib "^1.9.0" -"@abp/ng.setting-management.config@^2.3.0", "@abp/ng.setting-management.config@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management.config/-/ng.setting-management.config-2.3.0.tgz#80b9ebc659c34be4c4c45cc6f2fe2b593f491aab" - integrity sha512-nj6Hl8hlzrGJFJZo4d9DWQtf1PCSFnXup/3ajqMOCPPE+oBItY3aNY05jDyGgdr2wEdyWo/u9Invy3Jsvq8itQ== +"@abp/ng.setting-management.config@^2.5.0", "@abp/ng.setting-management.config@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management.config/-/ng.setting-management.config-2.5.0.tgz#4841d73b9df7763084dcac45bd656fbee87c4602" + integrity sha512-mSihz0aoB5Ly+tanPE4Vh3Aam9g3nDtSQelUuFJoyRnw1HSmMmWOqnJi9UEguhCEBtww9G5P6OC8/icpHaq/3Q== dependencies: tslib "^1.9.0" -"@abp/ng.setting-management@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-2.3.0.tgz#478c603f67416df763228bc958b6ea05e7d13dd7" - integrity sha512-xJk09NdpXeg3/KezvKl+h0B4T08Hy1SofOATQpVTrE4TIsFxyXKmasMcSY4i/3+wwE1umH+6TZJwPE+pXTu9Ng== +"@abp/ng.setting-management@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-2.5.0.tgz#32291ebc6610838f825cc79d091700d578586e0a" + integrity sha512-maamVGc5L/44XsRANXaVYLn9uocGUH8RUtKXZT9iKdlcsemKa7xEMzZ84lzoiAu+xAfqfJm/R7TolC/gWonUDg== dependencies: - "@abp/ng.setting-management.config" "^2.3.0" - "@abp/ng.theme.shared" "^2.3.0" + "@abp/ng.setting-management.config" "^2.5.0" + "@abp/ng.theme.shared" "^2.5.0" tslib "^1.9.0" -"@abp/ng.tenant-management.config@^2.3.0", "@abp/ng.tenant-management.config@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management.config/-/ng.tenant-management.config-2.3.0.tgz#8501a3a53f1abac8a65a87782752afb2ba648bb1" - integrity sha512-gGqg7rZd5X37z9glYF2lSiFpJ3Lyi1NdqHnaxdCTui+3/weMo/5RKlf+ilUAPqR5YAMVSLi4mBYYsuShWEBBIQ== +"@abp/ng.tenant-management.config@^2.5.0", "@abp/ng.tenant-management.config@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management.config/-/ng.tenant-management.config-2.5.0.tgz#00b3abae5d513d61fcc0aae6c73d64a61d087e5f" + integrity sha512-gaW9n+Fo9AH2OPw3V3qaxTvG8zIe4jjMXKIvzqk+e4djXVjLHZ3fdP+uyJqpMmaypyd2REoVCARqVFHgvZBzaA== dependencies: tslib "^1.9.0" -"@abp/ng.tenant-management@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-2.3.0.tgz#5ec092ad9c597d4aa9f2f849fc12e955d2d24696" - integrity sha512-LyJaXuzgZr2tfFPknuGz1spOzfxfaEhPuQ6zHBOhVfQ6KtMBeagsQQoEiLJMtcygR0MRox0kzmUiyTKm4H5DoA== +"@abp/ng.tenant-management@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-2.5.0.tgz#7452ab92d9d7f2bf1200a956e7ad8800c4ccebb1" + integrity sha512-7O7tsJl2OVbEIiSJ17r+ZJFcynOo89el0RREwihACkBz+2TeQoHo2ycZ7oPXauMy1aRjsjpkmbCJGP28OD0a6w== dependencies: - "@abp/ng.feature-management" "^2.3.0" - "@abp/ng.tenant-management.config" "^2.3.0" - "@abp/ng.theme.shared" "^2.3.0" + "@abp/ng.feature-management" "^2.5.0" + "@abp/ng.tenant-management.config" "^2.5.0" + "@abp/ng.theme.shared" "^2.5.0" tslib "^1.9.0" -"@abp/ng.theme.basic@~2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-2.3.0.tgz#e5857864ae4c3274a57cc785b06cccd0ff3515a8" - integrity sha512-LuAlKqmqEFUUwI/ruB6aO1rhfsCD19Pt7PCE3M+vr/KvlYAKb89K1U8nphIfMV8PCz9IU07BwvTn/T2qIt39HQ== +"@abp/ng.theme.basic@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-2.5.0.tgz#ef13f448ea6f356a5571d364da00e971e715cfec" + integrity sha512-+q22k5AfxgFRtGP4YO602jmeeuH2pfVBzCcJUmwRzE2xiINx4e55zCwKiFl5YvNUttcKkaNNhj9LcOXU6W42rw== dependencies: - "@abp/ng.theme.shared" "^2.3.0" + "@abp/ng.theme.shared" "^2.5.0" tslib "^1.9.0" -"@abp/ng.theme.shared@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-2.3.0.tgz#5b13b8e170fb0c2a4afca34434bd455ee8dfb9d6" - integrity sha512-keYnD17K8QkdSLqBbsATfeh7KwKNoUj/XsHZO8hawE3OfRuy4qYY9xghGFZUUqdIE5kF6gKlLKj4ZTZmuCvOmQ== +"@abp/ng.theme.shared@^2.5.0", "@abp/ng.theme.shared@~2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-2.5.0.tgz#a9c53f95f1a0bdf2fe046838e64c658ce54c5655" + integrity sha512-iRft0LWh9dzpnrKxmo0AuAXND6+o3Eov6LFpNbZD7guuZfeFVehcSX/X0ZYIpq1a/A7cfegtMEokdwRb0cGdGA== dependencies: - "@abp/ng.core" "^2.3.0" + "@abp/ng.core" "^2.5.0" "@fortawesome/fontawesome-free" "^5.12.1" "@ng-bootstrap/ng-bootstrap" "^5.3.0" "@ngx-validate/core" "^0.0.7" @@ -120,10 +122,10 @@ chart.js "^2.9.3" tslib "^1.9.0" -"@abp/utils@~2.3.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-2.3.1.tgz#728b978d598a98b643562250be54c92988b986e5" - integrity sha512-sZ1nrl8pV1Zx3WAqHRUQ2V3aJlsjaq1ggg2VIPYY4FjCYHFZ3L+Fkq5cPPZb/MczG1YZpAQiMtCJ/+8slvPHHQ== +"@abp/utils@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-2.4.0.tgz#2ca0666b9f6f2a442cf78d0812cdf1e3b63c41d0" + integrity sha512-viydYI0ArISItewH2cBHSj0M2f3YJ07a+TItOg970h6caSsMvDROK5Ai4VWoaB0r+Y2nz+n3msvrQK63P9Newg== dependencies: just-compare "^1.3.0" @@ -353,14 +355,14 @@ resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-8.2.14.tgz#e18b27a6841577ce489ad31540150da5a444ca37" integrity sha512-7EhN9JJbAJcH2xCa+rIOmekjiEuB0qwPdHuD5qn/wwMfRzMZo+Db4hHbR9KHrLH6H82PTwYKye/LLpDaZqoHOA== -"@angular/localize@~9.0.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-9.0.2.tgz#0139ad35fda754b8730fae20c87feb1a85457a9e" - integrity sha512-Dd/aNZXPSVIU5+AuX25Qm8fBCN95eL9fad6K+tNY+hdF6ruz8u2R4AVTHtTKtM6gzWeG8rJ/rt+7qh667HV09A== +"@angular/localize@~9.1.0": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-9.1.1.tgz#267d7cecb288b3019482744330da0ef9e049c85d" + integrity sha512-5mYdSL7IwqFXWRgBXj9c5vHT15AQy2kjD40fJJsmUx4WUFr+uf0Ss9ADCfL2FjCHpATrjYKpiyJs1mAF60USPQ== dependencies: "@babel/core" "7.8.3" glob "7.1.2" - yargs "13.1.0" + yargs "15.3.0" "@angular/platform-browser-dynamic@~8.2.14": version "8.2.14" @@ -7587,7 +7589,7 @@ jszip@^3.1.3: readable-stream "~2.3.6" set-immediate-shim "~1.0.1" -just-clone@3.1.0: +just-clone@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/just-clone/-/just-clone-3.1.0.tgz#10efc422e9b041355c43b8076d7b768b7a09fbbd" integrity sha512-sROn15yHaeNYSTG49HmfbQLtsZvMBb2COvVofNXbeUXx6GkERkdjG3dfejD0fe78gdHJLyS+fOz897H73S8LqA== @@ -12551,6 +12553,14 @@ yargs-parser@^16.1.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^18.1.0: + version "18.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" + integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs@12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -12586,6 +12596,23 @@ yargs@13.1.0: y18n "^4.0.0" yargs-parser "^13.0.0" +yargs@15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" + integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.0" + yargs@^13.3.0: version "13.3.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index 9cfd5748d5..17d600861b 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "anchor-js": "^4.2.2" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 6609d7a815..d69fb052b1 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,11 +1,11 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "^2.5.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 79da4ed38f..c3bc5b4b47 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,24 +1,24 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "^2.4.0", - "@abp/bootstrap": "^2.4.0", - "@abp/bootstrap-datepicker": "^2.4.0", - "@abp/datatables.net-bs4": "^2.4.0", - "@abp/font-awesome": "^2.4.0", - "@abp/jquery-form": "^2.4.0", - "@abp/jquery-validation-unobtrusive": "^2.4.0", - "@abp/lodash": "^2.4.0", - "@abp/luxon": "^2.4.0", - "@abp/malihu-custom-scrollbar-plugin": "^2.4.0", - "@abp/select2": "^2.4.0", - "@abp/sweetalert": "^2.4.0", - "@abp/timeago": "^2.4.0", - "@abp/toastr": "^2.4.0" + "@abp/aspnetcore.mvc.ui": "^2.5.0", + "@abp/bootstrap": "^2.5.0", + "@abp/bootstrap-datepicker": "^2.5.0", + "@abp/datatables.net-bs4": "^2.5.0", + "@abp/font-awesome": "^2.5.0", + "@abp/jquery-form": "^2.5.0", + "@abp/jquery-validation-unobtrusive": "^2.5.0", + "@abp/lodash": "^2.5.0", + "@abp/luxon": "^2.5.0", + "@abp/malihu-custom-scrollbar-plugin": "^2.5.0", + "@abp/select2": "^2.5.0", + "@abp/sweetalert": "^2.5.0", + "@abp/timeago": "^2.5.0", + "@abp/toastr": "^2.5.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 631da93f04..ad1a188963 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/aspnetcore.mvc.ui", "publishConfig": { "access": "public" @@ -12,5 +12,5 @@ "path": "^0.12.7", "rimraf": "^3.0.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index 9490e0850a..9a35998ac2 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,13 +1,13 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^2.4.0", - "@abp/owl.carousel": "^2.4.0", - "@abp/tui-editor": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared": "^2.5.0", + "@abp/owl.carousel": "^2.5.0", + "@abp/tui-editor": "^2.5.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index f654420085..cd210ed93e 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/bootstrap-datepicker", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "bootstrap-datepicker": "^1.9.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 04f8e1e29f..acb0f4d0df 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/bootstrap", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "bootstrap": "^4.3.1" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index fcdb8bf05b..4fdeaf8dae 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/chart.js", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "chart.js": "^2.9.3" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 18e0c1b51d..c7669aa6ea 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "clipboard": "^2.0.4" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index 71936fe29d..b8b7b40a40 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "codemirror": "^5.49.2" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index 17d34ef529..02d429234e 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,8 +1,8 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/core", "publishConfig": { "access": "public" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index 232f62fc77..2af1d293b7 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/datatables.net-bs4", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "^2.4.0", + "@abp/datatables.net": "^2.5.0", "datatables.net-bs4": "^1.10.20" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index aa7f435c2d..1527c50503 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/datatables.net", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "datatables.net": "^1.10.20" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index 6f0822ce0d..77af74f5b3 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "^2.4.0", - "@abp/clipboard": "^2.4.0", - "@abp/malihu-custom-scrollbar-plugin": "^2.4.0", - "@abp/popper.js": "^2.4.0", - "@abp/prismjs": "^2.4.0" + "@abp/anchor-js": "^2.5.0", + "@abp/clipboard": "^2.5.0", + "@abp/malihu-custom-scrollbar-plugin": "^2.5.0", + "@abp/popper.js": "^2.5.0", + "@abp/prismjs": "^2.5.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index 88f8eb1ae7..c96634328e 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "flag-icon-css": "^3.4.5" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index 5a65031884..4cd7497660 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/font-awesome", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "@fortawesome/fontawesome-free": "^5.11.2" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 8b46cf5316..6d9c0b57b0 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0" + "@abp/core": "^2.5.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 32e4636ec4..1bb9cfb2cd 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/jquery-form", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^2.4.0", + "@abp/jquery": "^2.5.0", "jquery-form": "^4.2.2" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index c36ec76f99..a73677409c 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/jquery-validation-unobtrusive", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery-validation": "^2.4.0", + "@abp/jquery-validation": "^2.5.0", "jquery-validation-unobtrusive": "^3.2.11" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index fb7e1a8809..4f2ef75312 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/jquery-validation", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^2.4.0", + "@abp/jquery": "^2.5.0", "jquery-validation": "^1.19.1" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index bff1fef346..a7ebfb9eee 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/jquery", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "jquery": "^3.4.1" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 112e29d08f..94118ce71e 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/lodash", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "lodash": "^4.17.15" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 7ab8d39f57..8d3deb902b 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/luxon", "publishConfig": { "access": "public" @@ -7,5 +7,5 @@ "dependencies": { "luxon": "^1.21.3" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index 44e3f15f3c..dd452a7cb9 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/malihu-custom-scrollbar-plugin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "malihu-custom-scrollbar-plugin": "^3.1.5" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index 13681bb473..c26067a005 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "markdown-it": "^10.0.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index 09ecf601a5..d154c564f5 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "owl.carousel": "^2.3.4" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 108c457428..e54787a5f7 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "popper.js": "^1.16.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index 3c4065c525..4afba5e780 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "prismjs": "^1.17.1" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index f49cfb5771..0056d99464 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/select2", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "select2": "^4.0.12" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/sweetalert/package.json b/npm/packs/sweetalert/package.json index 81e10a2e02..00ca4c5c4a 100644 --- a/npm/packs/sweetalert/package.json +++ b/npm/packs/sweetalert/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/sweetalert", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "^2.4.0", + "@abp/core": "^2.5.0", "sweetalert": "^2.1.2" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index e2daee11ef..51682cc815 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/timeago", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^2.4.0", + "@abp/jquery": "^2.5.0", "timeago": "^1.6.7" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index a4da2de041..892ac4915d 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,12 +1,12 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/toastr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "^2.4.0", + "@abp/jquery": "^2.5.0", "toastr": "^2.1.4" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 0344f90fcb..7cc6d6745d 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,15 +1,15 @@ { - "version": "2.4.0", + "version": "2.5.0", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "^2.4.0", - "@abp/highlight.js": "^2.4.0", - "@abp/jquery": "^2.4.0", - "@abp/markdown-it": "^2.4.0", + "@abp/codemirror": "^2.5.0", + "@abp/highlight.js": "^2.5.0", + "@abp/jquery": "^2.5.0", + "@abp/markdown-it": "^2.5.0", "tui-editor": "^1.4.8" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 3733baff60..34dfd0c2fd 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "2.4.0", + "version": "2.5.0", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", @@ -55,5 +55,5 @@ "dependencies": { "just-compare": "^1.3.0" }, - "gitHead": "aadffb76ee4ac7aef2842074e4f9c9f425b3ebe7" + "gitHead": "a9a36b8a4681df04377497addf94b15e6c521664" } diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index b71720774d..b8e5be4397 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -11,11 +11,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~2.4.0", - "@abp/ng.identity": "~2.4.0", - "@abp/ng.setting-management": "~2.4.0", - "@abp/ng.tenant-management": "~2.4.0", - "@abp/ng.theme.basic": "~2.4.0", + "@abp/ng.account": "~2.5.0", + "@abp/ng.identity": "~2.5.0", + "@abp/ng.setting-management": "~2.5.0", + "@abp/ng.tenant-management": "~2.5.0", + "@abp/ng.theme.basic": "~2.5.0", "@angular/animations": "~9.1.0", "@angular/common": "~9.1.0", "@angular/compiler": "~9.1.0", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index f347cfecce..c9099b2aed 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.5.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock index 55fafb8630..9cc07d676b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.4.0.tgz#dca466220b690cb1a87c63694b007775c7001bba" - integrity sha512-SMH9zc3JIHNFbmvFbaH6RCJ2SXtTswyzaopz3td9jFZJLx9rhmVJyyLQhONRU+9k5vlXbW5yDNjMnbFzJY/gqw== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.5.0.tgz#edfc51a5acac3a25747efc7c8664d025f81aef97" + integrity sha512-us2ARkEpmwhMwbCeVukYJvkiweQi4AF/C7YPgDLZGdioaeERJEh2UP0wsiPveh0RokcThIh3Egz6Xp/w8He3wQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.5.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.4.0.tgz#126b46f60c8ff26bd0e5e932f5d14aec11180f2c" - integrity sha512-p3qaSpZLabqVdcuanPYuT14G58ScXkzcUcl0rB4RxeN9hFSYMmlOQim6+Aawzn/OkUNrWO2NowsCg8E6KGVncQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^2.4.0" - "@abp/bootstrap" "^2.4.0" - "@abp/bootstrap-datepicker" "^2.4.0" - "@abp/datatables.net-bs4" "^2.4.0" - "@abp/font-awesome" "^2.4.0" - "@abp/jquery-form" "^2.4.0" - "@abp/jquery-validation-unobtrusive" "^2.4.0" - "@abp/lodash" "^2.4.0" - "@abp/luxon" "^2.4.0" - "@abp/malihu-custom-scrollbar-plugin" "^2.4.0" - "@abp/select2" "^2.4.0" - "@abp/sweetalert" "^2.4.0" - "@abp/timeago" "^2.4.0" - "@abp/toastr" "^2.4.0" - -"@abp/aspnetcore.mvc.ui@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.4.0.tgz#3c35b48019ee2e735bd8e1f761ff5e5e040bf3c7" - integrity sha512-pVS4lSjbLEUyuyZCasaSRO3KRb+eJ9/U2tz52bm2DJSbm7PQVipq1Ru+R2KuEz7rQ/BPULXwK9ehggQwvRWRww== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.5.0.tgz#e023443211de5d2ce50d38bb8ae7612cb303157e" + integrity sha512-8AFCucSBgFzGX5NtCpB8MaZnGgfY1/XLMjnfdQSv+DF2ZW6Ld0d3qY/evfimy8raFU8W8AtaTS510rEUsgkmog== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.5.0" + "@abp/bootstrap" "^2.5.0" + "@abp/bootstrap-datepicker" "^2.5.0" + "@abp/datatables.net-bs4" "^2.5.0" + "@abp/font-awesome" "^2.5.0" + "@abp/jquery-form" "^2.5.0" + "@abp/jquery-validation-unobtrusive" "^2.5.0" + "@abp/lodash" "^2.5.0" + "@abp/luxon" "^2.5.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.5.0" + "@abp/select2" "^2.5.0" + "@abp/sweetalert" "^2.5.0" + "@abp/timeago" "^2.5.0" + "@abp/toastr" "^2.5.0" + +"@abp/aspnetcore.mvc.ui@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.5.0.tgz#03bb105bfd6cce0730f109cfe188ad83ad3839ce" + integrity sha512-gyXHGFkSzPFaAx8QSwmlKlaoQtuLfe7OqLZcQZZco6wtyonn1qsI86sgFAxJx0bDf5FZDZGEHRgPqgWHc7Txlw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.4.0.tgz#b40b61065635b66a7b1ef60a7d07bde7917b2a58" - integrity sha512-88RtPk0U6XlpsL8GxlQ056fgUDMQ3+w4SZncHyYjL2uYBU0q5/Swkhm4oF4KxxHQ4nwxhD98UCwkB9gj6H4gZw== +"@abp/bootstrap-datepicker@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.5.0.tgz#f30a7430b25d8d467b3e1f3c6f1a82ffb4fde28c" + integrity sha512-2ivTurvVcSj35i+s66g9xrUFd+3TZ6Y7qiCSZWpYKc1LvavveM/t10/t9pcmgcsmUngH2adFzpeeZ1psweYtIw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.4.0.tgz#e0321834ea2ac5d3a1185e203cf9a01351c0d6e6" - integrity sha512-LRPR2vumMAMg3CZ2vpcrFYzXySLX8qsCQKA5THyw6LyrhVonmif5b6QgChFxJozUZB4vMQSeN/Zl6UDpGNa1RA== +"@abp/bootstrap@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.5.0.tgz#e034698e613bae16b8469cca579215378af65f54" + integrity sha512-2Y4p3a0HeHnU+h5wMtk6sSvPqOqulzBZ1p96/+21Y+oIEhlYk33d63wUmXbhzalX6Grcp5DYGMYlHyMDEd55wQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" bootstrap "^4.3.1" -"@abp/core@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.4.0.tgz#0a8fd49ce85844bc0430ac4aaf7f1a025695c560" - integrity sha512-lmgM9Yk/u22/suuNMSH+pIt0G4oxZ26+SGM3lC0vIxXUl52pacOuXwL5zxKQrcRsdchvWjhRZkO4mHg8NBB8Ow== +"@abp/core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.5.0.tgz#6eba2680716834b57fc7c5228d767aa9b0a379be" + integrity sha512-VLGSdW9/QpqrrzuWMZas7NZh202wC2Px+mw89BRHJGcPSHdZRWhxwTG1pjl1h7qE9aVFMrm8iZ639Jk+K1o9eQ== -"@abp/datatables.net-bs4@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.4.0.tgz#c280afc0a30ceb1eabced7d813bc4a4840973152" - integrity sha512-9A5k3+3pt3T7160QAUo+Qa/EK1eRI5AFeXoV0Bo2x0jzEmMUriYoGIZva12vjc9kIcgk99WSeNUwKVnT3cJ8iA== +"@abp/datatables.net-bs4@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.5.0.tgz#6f9bc14f27ed5ba21654d9eef2cbd0d88dbff74b" + integrity sha512-f/t+VKfLWYFXOkQNIEXLsH9HlnHYnC24nivjGKHcG1Kznj1/4gMZXEyStT5yiNo/a75G0PoMicxBsyDrOndwhg== dependencies: - "@abp/datatables.net" "^2.4.0" + "@abp/datatables.net" "^2.5.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.4.0.tgz#09a9085b8d3292415c8464bcad3e5bed829e731e" - integrity sha512-4xmfSk0C2hRYyK7KZsF7TS5OuMq4vm+rtpG8vmEyVsZOlUDUaZF0nwDvesx4WMDRgsxt5Iw67XlAP1JctpWs0g== +"@abp/datatables.net@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.5.0.tgz#d9c52ed048fff9f92a938fa23a1fe93dcc2265e2" + integrity sha512-ntKt69oZOqdO2O9hSbgtmiU0TbWu1U3lwCNy1kYbj0qAqdBBukZ1dg4k1JBrLRAbp3u9+v0+zP97EjziNTrHxA== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" datatables.net "^1.10.20" -"@abp/font-awesome@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.4.0.tgz#cf67cc5fd19a0c8cb29dac58636cdb84ec3d9bb2" - integrity sha512-HVTW5hzj9HXMGBNlPh2CElvur2qFCg57+wjgx3Q8m01yiIMDpgvLd9s6xSeLu0YhhQweBF1G3IV1aXZ40W5bbg== +"@abp/font-awesome@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.5.0.tgz#99facfdd571a4089442da6ef5b142c4d9d110db1" + integrity sha512-tKlFxArLJGX9AzV8IzdnyVh4Feh+yoQa7PN3dAnlcLbNMX5kjhvVju4zBjaKaO6DBxWrT8BmKW0EOJNfIcksmw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.4.0.tgz#d5dac3d4f953bd5d9ec8cf54c7f723085b953b48" - integrity sha512-msbNH320c4trZVcdOD+2GUOdsaV4kKEA5cjK43XLjCtzb6cKZWXCt8cFfJu8z8fTuX6C8EbmAg1j5BDEumsa8A== +"@abp/jquery-form@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.5.0.tgz#75ae14a29f949e510c301a650923a4acef2b6b94" + integrity sha512-A9Oi6shfr1w309sFnfmxjOlFMqVe7udtXitSP9PrYi/hovAsKLb5niIFnvo7DlklM0+VLIsZ5WFf2Y8zAGzX7w== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.4.0.tgz#c2a2d0ce72d2b6af42af088a14775d80a4c334a1" - integrity sha512-E1TWBeTUStgS4hiQtIkjvkBrt1n737HoxN+w35jXjTbugXYRVgnjU6hoLR1n64FuUpHJ8jVBd64e5JwNjYEKkg== +"@abp/jquery-validation-unobtrusive@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.5.0.tgz#86a3a6c344d32e8f7583f376b9b6fdcbb9472777" + integrity sha512-eMPrb3W0AMWkU982abUA0zdu8fUErI4cDaYkDaEggxK0YfUK/EkR914+TWVFkHCPgm5PK+uEpfmWKYiCu7Ie4A== dependencies: - "@abp/jquery-validation" "^2.4.0" + "@abp/jquery-validation" "^2.5.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.4.0.tgz#e31ebc36e5c22405bccc8602beb007d4a3cd1303" - integrity sha512-pzpvGenz4CffdPQOXFL6wFUWMbzEw1KrjhpMogEn9GeIDf8bFFeyihlynGpwA/m3TR8JHqewf3/Aq2nhOxlQLg== +"@abp/jquery-validation@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.5.0.tgz#b62d309c65ac2e5607ecb112be21370b87dbb702" + integrity sha512-U8fXDHEQOLw7fZSvDTcLICnddsJ6xDeDprwsrAHnQoY7xLb+9eyY//7fgPhdusM/GSw4x5Lm4sSNkUOkRdnHnQ== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-validation "^1.19.1" -"@abp/jquery@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.4.0.tgz#6f3880490c77ff66643b962c63758ecdb2a41d9b" - integrity sha512-nAWbFd/vs+Zy2VQcscInG0hExujNQ+1XQEpY22rhqGAd2OY4ojhuY/df85zdiqbeqbgN06AywiFWaLi2Ue3h0g== +"@abp/jquery@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.5.0.tgz#61569e2cc9f28e03cbbaaa3c19896fa39e08f71e" + integrity sha512-9RyHZoOo+c3vjHUnSp/vGUfac2N2hRYyIcjEksiaaIJwRfBZZ3AhULgPkWKhQ5dXeGKllb+U1NnU7GisIPsPlw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" jquery "^3.4.1" -"@abp/lodash@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.4.0.tgz#8bc232d1c28bd1fe083d7e104875dba11162bb21" - integrity sha512-NAGv1b6W3pakyGvnVgu6WG2nJsHUVrcZOxTLBCbmUsaSBFXeyZuot3priDS1ZYZf+61r/gKBZ9UgcuhTFNyBFg== +"@abp/lodash@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.5.0.tgz#92bb5dec3280c96334baf063f2d1ddebde58b031" + integrity sha512-QRvqy3XPFnodJ8+gYRLb+ArcgqTE1BfeHhfw3Tr3LiofxfS1esPDiznWKCNCcVHx+wQ8sVYzniN7dtVGWPQW4w== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" lodash "^4.17.15" -"@abp/luxon@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.4.0.tgz#a33e8d0f5f986cbd5548fd47c5b302b13365a49b" - integrity sha512-IunEAeYz6mWCYwIbE9PlBSEFZiuCKwY/SQ9HrW4/a1Dbm7PbPzX7DcZ5+QT2pMB4wvWKNvl/adXum3o15Z+zJg== +"@abp/luxon@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.5.0.tgz#f40e5e8b97765361894744e029d0b96da4e4dde3" + integrity sha512-31v+wd8xogbC0aI+5rfaE/D0cnS2kjDWcoJEg9Zsb3CDjzmvxdAhCPdoQw22oRG72NKR0bBNZ/jG5wp+vyFsbA== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.4.0.tgz#9821f642affed77b9eb887aedc50bf419df55ccf" - integrity sha512-ZB7Bo3nY/fOVLkGkSCCh8JFVqV8dvwjf3NJUowdj8X0zC6ecQ0lxIaNOcgxetdcKabK+UzywybZqit9Uo2Sk8A== +"@abp/malihu-custom-scrollbar-plugin@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.5.0.tgz#6f7e4e903419f48e93806c88c007241bdfc0a4cb" + integrity sha512-Dl10cwvTI7OTH57kYuF0JLtMn35dKimgy/Uval+8nGJTXFU3r40xUyIFIKD9WPpkCtzGxYIrWRNfMzrt1Q17Ng== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.4.0.tgz#87a97d4130e74df20f0f605c8b207603e545ca3c" - integrity sha512-gmNWRTlM0j0LHdYEBYBJsTDdw1rNMPoVgQtszSwjPBpnKl0M8SKb7lLG0j/+2MkZQY7XkGNajJkntqvRlQAAvg== +"@abp/select2@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.5.0.tgz#070d8bf4e02a18119e0980971b9d5bad12da9c5c" + integrity sha512-8H6FD7wboBrxBIWOdNtNV26L9ef/gPP53V4S7senmKrU+9WoG3etFBkwO4pqQHuQxZmTlazuSJN+38/5sAYlSQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" select2 "^4.0.12" -"@abp/sweetalert@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.4.0.tgz#37ff153fc3df184fd1e19d45e2b8bfdfcfe0e0d9" - integrity sha512-fDmS+1yCgD1uEQg4bO+l52Vhr/3ZKSp1v3VIEJk8yxek6ICMCXgW+GZT0PJ7ZLJ766sZL+m6NnWS0XR4tiPtUQ== +"@abp/sweetalert@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.5.0.tgz#120492acf0815008a96bb907e0d5e81fbca8c1d2" + integrity sha512-6nKgwDOSdCYglZYvwTO6Fl7MLBC9Wk98c4CHhJKzgsR4UssKFi9MWyBcTU7fTDj8YFqXyTJoW4HSkMr1Eu2KZQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" sweetalert "^2.1.2" -"@abp/timeago@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.4.0.tgz#78b54ec5a678fe4b3c20db4bb502d462163144a5" - integrity sha512-Dqs7JC7mc+O08aEkp/+8qlBoMA5IqK09sPRN94j5jtRiOFFAq5q6wU8p9s1yxf50nr+6WHF2epIT85ZBNaWgdg== +"@abp/timeago@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.5.0.tgz#314a8ab1c8d6a2e2be3faee3d9eb18d26a7ded5e" + integrity sha512-J9xhJEVT8uCpSBCAa8Ssuer8WpmVrwICe/70i/YlPzW/q+dWXPvM2pmkdY22dkQOX1RKZqkqiAmFMUcl+DSyDA== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" timeago "^1.6.7" -"@abp/toastr@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.4.0.tgz#71816a45057b3b855095a9584def1c6887352727" - integrity sha512-vHztnU/l12KplH/c4HFgdj9FzZO1jTGLb+EzJQQqqQcDuLEijUOK9tUNjO8PmVM1gncjNsWL1ABvbd93oXCeXA== +"@abp/toastr@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.5.0.tgz#3f8f5fc6f6e8945f41039deeec8fbbdadd9f4617" + integrity sha512-pFPiDlZAAxPnMv5LPBEp2DpTSoGP4PE7L+9HS78EK28jqHYcfQvkswPeDmKNkMLTcI4+9CJ+geZWf9p6cnwxcw== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json index 8d1f5d36d1..5761f9feb9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.5.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index b4a55740f1..345479f8bb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.4.0.tgz#dca466220b690cb1a87c63694b007775c7001bba" - integrity sha512-SMH9zc3JIHNFbmvFbaH6RCJ2SXtTswyzaopz3td9jFZJLx9rhmVJyyLQhONRU+9k5vlXbW5yDNjMnbFzJY/gqw== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.5.0.tgz#edfc51a5acac3a25747efc7c8664d025f81aef97" + integrity sha512-us2ARkEpmwhMwbCeVukYJvkiweQi4AF/C7YPgDLZGdioaeERJEh2UP0wsiPveh0RokcThIh3Egz6Xp/w8He3wQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.5.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.4.0.tgz#126b46f60c8ff26bd0e5e932f5d14aec11180f2c" - integrity sha512-p3qaSpZLabqVdcuanPYuT14G58ScXkzcUcl0rB4RxeN9hFSYMmlOQim6+Aawzn/OkUNrWO2NowsCg8E6KGVncQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^2.4.0" - "@abp/bootstrap" "^2.4.0" - "@abp/bootstrap-datepicker" "^2.4.0" - "@abp/datatables.net-bs4" "^2.4.0" - "@abp/font-awesome" "^2.4.0" - "@abp/jquery-form" "^2.4.0" - "@abp/jquery-validation-unobtrusive" "^2.4.0" - "@abp/lodash" "^2.4.0" - "@abp/luxon" "^2.4.0" - "@abp/malihu-custom-scrollbar-plugin" "^2.4.0" - "@abp/select2" "^2.4.0" - "@abp/sweetalert" "^2.4.0" - "@abp/timeago" "^2.4.0" - "@abp/toastr" "^2.4.0" - -"@abp/aspnetcore.mvc.ui@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.4.0.tgz#3c35b48019ee2e735bd8e1f761ff5e5e040bf3c7" - integrity sha512-pVS4lSjbLEUyuyZCasaSRO3KRb+eJ9/U2tz52bm2DJSbm7PQVipq1Ru+R2KuEz7rQ/BPULXwK9ehggQwvRWRww== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.5.0.tgz#e023443211de5d2ce50d38bb8ae7612cb303157e" + integrity sha512-8AFCucSBgFzGX5NtCpB8MaZnGgfY1/XLMjnfdQSv+DF2ZW6Ld0d3qY/evfimy8raFU8W8AtaTS510rEUsgkmog== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.5.0" + "@abp/bootstrap" "^2.5.0" + "@abp/bootstrap-datepicker" "^2.5.0" + "@abp/datatables.net-bs4" "^2.5.0" + "@abp/font-awesome" "^2.5.0" + "@abp/jquery-form" "^2.5.0" + "@abp/jquery-validation-unobtrusive" "^2.5.0" + "@abp/lodash" "^2.5.0" + "@abp/luxon" "^2.5.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.5.0" + "@abp/select2" "^2.5.0" + "@abp/sweetalert" "^2.5.0" + "@abp/timeago" "^2.5.0" + "@abp/toastr" "^2.5.0" + +"@abp/aspnetcore.mvc.ui@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.5.0.tgz#03bb105bfd6cce0730f109cfe188ad83ad3839ce" + integrity sha512-gyXHGFkSzPFaAx8QSwmlKlaoQtuLfe7OqLZcQZZco6wtyonn1qsI86sgFAxJx0bDf5FZDZGEHRgPqgWHc7Txlw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.4.0.tgz#b40b61065635b66a7b1ef60a7d07bde7917b2a58" - integrity sha512-88RtPk0U6XlpsL8GxlQ056fgUDMQ3+w4SZncHyYjL2uYBU0q5/Swkhm4oF4KxxHQ4nwxhD98UCwkB9gj6H4gZw== +"@abp/bootstrap-datepicker@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.5.0.tgz#f30a7430b25d8d467b3e1f3c6f1a82ffb4fde28c" + integrity sha512-2ivTurvVcSj35i+s66g9xrUFd+3TZ6Y7qiCSZWpYKc1LvavveM/t10/t9pcmgcsmUngH2adFzpeeZ1psweYtIw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.4.0.tgz#e0321834ea2ac5d3a1185e203cf9a01351c0d6e6" - integrity sha512-LRPR2vumMAMg3CZ2vpcrFYzXySLX8qsCQKA5THyw6LyrhVonmif5b6QgChFxJozUZB4vMQSeN/Zl6UDpGNa1RA== +"@abp/bootstrap@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.5.0.tgz#e034698e613bae16b8469cca579215378af65f54" + integrity sha512-2Y4p3a0HeHnU+h5wMtk6sSvPqOqulzBZ1p96/+21Y+oIEhlYk33d63wUmXbhzalX6Grcp5DYGMYlHyMDEd55wQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" bootstrap "^4.3.1" -"@abp/core@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.4.0.tgz#0a8fd49ce85844bc0430ac4aaf7f1a025695c560" - integrity sha512-lmgM9Yk/u22/suuNMSH+pIt0G4oxZ26+SGM3lC0vIxXUl52pacOuXwL5zxKQrcRsdchvWjhRZkO4mHg8NBB8Ow== +"@abp/core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.5.0.tgz#6eba2680716834b57fc7c5228d767aa9b0a379be" + integrity sha512-VLGSdW9/QpqrrzuWMZas7NZh202wC2Px+mw89BRHJGcPSHdZRWhxwTG1pjl1h7qE9aVFMrm8iZ639Jk+K1o9eQ== -"@abp/datatables.net-bs4@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.4.0.tgz#c280afc0a30ceb1eabced7d813bc4a4840973152" - integrity sha512-9A5k3+3pt3T7160QAUo+Qa/EK1eRI5AFeXoV0Bo2x0jzEmMUriYoGIZva12vjc9kIcgk99WSeNUwKVnT3cJ8iA== +"@abp/datatables.net-bs4@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.5.0.tgz#6f9bc14f27ed5ba21654d9eef2cbd0d88dbff74b" + integrity sha512-f/t+VKfLWYFXOkQNIEXLsH9HlnHYnC24nivjGKHcG1Kznj1/4gMZXEyStT5yiNo/a75G0PoMicxBsyDrOndwhg== dependencies: - "@abp/datatables.net" "^2.4.0" + "@abp/datatables.net" "^2.5.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.4.0.tgz#09a9085b8d3292415c8464bcad3e5bed829e731e" - integrity sha512-4xmfSk0C2hRYyK7KZsF7TS5OuMq4vm+rtpG8vmEyVsZOlUDUaZF0nwDvesx4WMDRgsxt5Iw67XlAP1JctpWs0g== +"@abp/datatables.net@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.5.0.tgz#d9c52ed048fff9f92a938fa23a1fe93dcc2265e2" + integrity sha512-ntKt69oZOqdO2O9hSbgtmiU0TbWu1U3lwCNy1kYbj0qAqdBBukZ1dg4k1JBrLRAbp3u9+v0+zP97EjziNTrHxA== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" datatables.net "^1.10.20" -"@abp/font-awesome@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.4.0.tgz#cf67cc5fd19a0c8cb29dac58636cdb84ec3d9bb2" - integrity sha512-HVTW5hzj9HXMGBNlPh2CElvur2qFCg57+wjgx3Q8m01yiIMDpgvLd9s6xSeLu0YhhQweBF1G3IV1aXZ40W5bbg== +"@abp/font-awesome@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.5.0.tgz#99facfdd571a4089442da6ef5b142c4d9d110db1" + integrity sha512-tKlFxArLJGX9AzV8IzdnyVh4Feh+yoQa7PN3dAnlcLbNMX5kjhvVju4zBjaKaO6DBxWrT8BmKW0EOJNfIcksmw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.4.0.tgz#d5dac3d4f953bd5d9ec8cf54c7f723085b953b48" - integrity sha512-msbNH320c4trZVcdOD+2GUOdsaV4kKEA5cjK43XLjCtzb6cKZWXCt8cFfJu8z8fTuX6C8EbmAg1j5BDEumsa8A== +"@abp/jquery-form@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.5.0.tgz#75ae14a29f949e510c301a650923a4acef2b6b94" + integrity sha512-A9Oi6shfr1w309sFnfmxjOlFMqVe7udtXitSP9PrYi/hovAsKLb5niIFnvo7DlklM0+VLIsZ5WFf2Y8zAGzX7w== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.4.0.tgz#c2a2d0ce72d2b6af42af088a14775d80a4c334a1" - integrity sha512-E1TWBeTUStgS4hiQtIkjvkBrt1n737HoxN+w35jXjTbugXYRVgnjU6hoLR1n64FuUpHJ8jVBd64e5JwNjYEKkg== +"@abp/jquery-validation-unobtrusive@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.5.0.tgz#86a3a6c344d32e8f7583f376b9b6fdcbb9472777" + integrity sha512-eMPrb3W0AMWkU982abUA0zdu8fUErI4cDaYkDaEggxK0YfUK/EkR914+TWVFkHCPgm5PK+uEpfmWKYiCu7Ie4A== dependencies: - "@abp/jquery-validation" "^2.4.0" + "@abp/jquery-validation" "^2.5.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.4.0.tgz#e31ebc36e5c22405bccc8602beb007d4a3cd1303" - integrity sha512-pzpvGenz4CffdPQOXFL6wFUWMbzEw1KrjhpMogEn9GeIDf8bFFeyihlynGpwA/m3TR8JHqewf3/Aq2nhOxlQLg== +"@abp/jquery-validation@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.5.0.tgz#b62d309c65ac2e5607ecb112be21370b87dbb702" + integrity sha512-U8fXDHEQOLw7fZSvDTcLICnddsJ6xDeDprwsrAHnQoY7xLb+9eyY//7fgPhdusM/GSw4x5Lm4sSNkUOkRdnHnQ== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-validation "^1.19.1" -"@abp/jquery@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.4.0.tgz#6f3880490c77ff66643b962c63758ecdb2a41d9b" - integrity sha512-nAWbFd/vs+Zy2VQcscInG0hExujNQ+1XQEpY22rhqGAd2OY4ojhuY/df85zdiqbeqbgN06AywiFWaLi2Ue3h0g== +"@abp/jquery@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.5.0.tgz#61569e2cc9f28e03cbbaaa3c19896fa39e08f71e" + integrity sha512-9RyHZoOo+c3vjHUnSp/vGUfac2N2hRYyIcjEksiaaIJwRfBZZ3AhULgPkWKhQ5dXeGKllb+U1NnU7GisIPsPlw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" jquery "^3.4.1" -"@abp/lodash@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.4.0.tgz#8bc232d1c28bd1fe083d7e104875dba11162bb21" - integrity sha512-NAGv1b6W3pakyGvnVgu6WG2nJsHUVrcZOxTLBCbmUsaSBFXeyZuot3priDS1ZYZf+61r/gKBZ9UgcuhTFNyBFg== +"@abp/lodash@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.5.0.tgz#92bb5dec3280c96334baf063f2d1ddebde58b031" + integrity sha512-QRvqy3XPFnodJ8+gYRLb+ArcgqTE1BfeHhfw3Tr3LiofxfS1esPDiznWKCNCcVHx+wQ8sVYzniN7dtVGWPQW4w== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" lodash "^4.17.15" -"@abp/luxon@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.4.0.tgz#a33e8d0f5f986cbd5548fd47c5b302b13365a49b" - integrity sha512-IunEAeYz6mWCYwIbE9PlBSEFZiuCKwY/SQ9HrW4/a1Dbm7PbPzX7DcZ5+QT2pMB4wvWKNvl/adXum3o15Z+zJg== +"@abp/luxon@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.5.0.tgz#f40e5e8b97765361894744e029d0b96da4e4dde3" + integrity sha512-31v+wd8xogbC0aI+5rfaE/D0cnS2kjDWcoJEg9Zsb3CDjzmvxdAhCPdoQw22oRG72NKR0bBNZ/jG5wp+vyFsbA== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.4.0.tgz#9821f642affed77b9eb887aedc50bf419df55ccf" - integrity sha512-ZB7Bo3nY/fOVLkGkSCCh8JFVqV8dvwjf3NJUowdj8X0zC6ecQ0lxIaNOcgxetdcKabK+UzywybZqit9Uo2Sk8A== +"@abp/malihu-custom-scrollbar-plugin@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.5.0.tgz#6f7e4e903419f48e93806c88c007241bdfc0a4cb" + integrity sha512-Dl10cwvTI7OTH57kYuF0JLtMn35dKimgy/Uval+8nGJTXFU3r40xUyIFIKD9WPpkCtzGxYIrWRNfMzrt1Q17Ng== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.4.0.tgz#87a97d4130e74df20f0f605c8b207603e545ca3c" - integrity sha512-gmNWRTlM0j0LHdYEBYBJsTDdw1rNMPoVgQtszSwjPBpnKl0M8SKb7lLG0j/+2MkZQY7XkGNajJkntqvRlQAAvg== +"@abp/select2@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.5.0.tgz#070d8bf4e02a18119e0980971b9d5bad12da9c5c" + integrity sha512-8H6FD7wboBrxBIWOdNtNV26L9ef/gPP53V4S7senmKrU+9WoG3etFBkwO4pqQHuQxZmTlazuSJN+38/5sAYlSQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" select2 "^4.0.12" -"@abp/sweetalert@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.4.0.tgz#37ff153fc3df184fd1e19d45e2b8bfdfcfe0e0d9" - integrity sha512-fDmS+1yCgD1uEQg4bO+l52Vhr/3ZKSp1v3VIEJk8yxek6ICMCXgW+GZT0PJ7ZLJ766sZL+m6NnWS0XR4tiPtUQ== +"@abp/sweetalert@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.5.0.tgz#120492acf0815008a96bb907e0d5e81fbca8c1d2" + integrity sha512-6nKgwDOSdCYglZYvwTO6Fl7MLBC9Wk98c4CHhJKzgsR4UssKFi9MWyBcTU7fTDj8YFqXyTJoW4HSkMr1Eu2KZQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" sweetalert "^2.1.2" -"@abp/timeago@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.4.0.tgz#78b54ec5a678fe4b3c20db4bb502d462163144a5" - integrity sha512-Dqs7JC7mc+O08aEkp/+8qlBoMA5IqK09sPRN94j5jtRiOFFAq5q6wU8p9s1yxf50nr+6WHF2epIT85ZBNaWgdg== +"@abp/timeago@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.5.0.tgz#314a8ab1c8d6a2e2be3faee3d9eb18d26a7ded5e" + integrity sha512-J9xhJEVT8uCpSBCAa8Ssuer8WpmVrwICe/70i/YlPzW/q+dWXPvM2pmkdY22dkQOX1RKZqkqiAmFMUcl+DSyDA== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" timeago "^1.6.7" -"@abp/toastr@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.4.0.tgz#71816a45057b3b855095a9584def1c6887352727" - integrity sha512-vHztnU/l12KplH/c4HFgdj9FzZO1jTGLb+EzJQQqqQcDuLEijUOK9tUNjO8PmVM1gncjNsWL1ABvbd93oXCeXA== +"@abp/toastr@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.5.0.tgz#3f8f5fc6f6e8945f41039deeec8fbbdadd9f4617" + integrity sha512-pFPiDlZAAxPnMv5LPBEp2DpTSoGP4PE7L+9HS78EK28jqHYcfQvkswPeDmKNkMLTcI4+9CJ+geZWf9p6cnwxcw== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index f347cfecce..c9099b2aed 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.5.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock index b4a55740f1..345479f8bb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.4.0.tgz#dca466220b690cb1a87c63694b007775c7001bba" - integrity sha512-SMH9zc3JIHNFbmvFbaH6RCJ2SXtTswyzaopz3td9jFZJLx9rhmVJyyLQhONRU+9k5vlXbW5yDNjMnbFzJY/gqw== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.5.0.tgz#edfc51a5acac3a25747efc7c8664d025f81aef97" + integrity sha512-us2ARkEpmwhMwbCeVukYJvkiweQi4AF/C7YPgDLZGdioaeERJEh2UP0wsiPveh0RokcThIh3Egz6Xp/w8He3wQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.5.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.4.0.tgz#126b46f60c8ff26bd0e5e932f5d14aec11180f2c" - integrity sha512-p3qaSpZLabqVdcuanPYuT14G58ScXkzcUcl0rB4RxeN9hFSYMmlOQim6+Aawzn/OkUNrWO2NowsCg8E6KGVncQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^2.4.0" - "@abp/bootstrap" "^2.4.0" - "@abp/bootstrap-datepicker" "^2.4.0" - "@abp/datatables.net-bs4" "^2.4.0" - "@abp/font-awesome" "^2.4.0" - "@abp/jquery-form" "^2.4.0" - "@abp/jquery-validation-unobtrusive" "^2.4.0" - "@abp/lodash" "^2.4.0" - "@abp/luxon" "^2.4.0" - "@abp/malihu-custom-scrollbar-plugin" "^2.4.0" - "@abp/select2" "^2.4.0" - "@abp/sweetalert" "^2.4.0" - "@abp/timeago" "^2.4.0" - "@abp/toastr" "^2.4.0" - -"@abp/aspnetcore.mvc.ui@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.4.0.tgz#3c35b48019ee2e735bd8e1f761ff5e5e040bf3c7" - integrity sha512-pVS4lSjbLEUyuyZCasaSRO3KRb+eJ9/U2tz52bm2DJSbm7PQVipq1Ru+R2KuEz7rQ/BPULXwK9ehggQwvRWRww== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.5.0.tgz#e023443211de5d2ce50d38bb8ae7612cb303157e" + integrity sha512-8AFCucSBgFzGX5NtCpB8MaZnGgfY1/XLMjnfdQSv+DF2ZW6Ld0d3qY/evfimy8raFU8W8AtaTS510rEUsgkmog== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.5.0" + "@abp/bootstrap" "^2.5.0" + "@abp/bootstrap-datepicker" "^2.5.0" + "@abp/datatables.net-bs4" "^2.5.0" + "@abp/font-awesome" "^2.5.0" + "@abp/jquery-form" "^2.5.0" + "@abp/jquery-validation-unobtrusive" "^2.5.0" + "@abp/lodash" "^2.5.0" + "@abp/luxon" "^2.5.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.5.0" + "@abp/select2" "^2.5.0" + "@abp/sweetalert" "^2.5.0" + "@abp/timeago" "^2.5.0" + "@abp/toastr" "^2.5.0" + +"@abp/aspnetcore.mvc.ui@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.5.0.tgz#03bb105bfd6cce0730f109cfe188ad83ad3839ce" + integrity sha512-gyXHGFkSzPFaAx8QSwmlKlaoQtuLfe7OqLZcQZZco6wtyonn1qsI86sgFAxJx0bDf5FZDZGEHRgPqgWHc7Txlw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.4.0.tgz#b40b61065635b66a7b1ef60a7d07bde7917b2a58" - integrity sha512-88RtPk0U6XlpsL8GxlQ056fgUDMQ3+w4SZncHyYjL2uYBU0q5/Swkhm4oF4KxxHQ4nwxhD98UCwkB9gj6H4gZw== +"@abp/bootstrap-datepicker@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.5.0.tgz#f30a7430b25d8d467b3e1f3c6f1a82ffb4fde28c" + integrity sha512-2ivTurvVcSj35i+s66g9xrUFd+3TZ6Y7qiCSZWpYKc1LvavveM/t10/t9pcmgcsmUngH2adFzpeeZ1psweYtIw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.4.0.tgz#e0321834ea2ac5d3a1185e203cf9a01351c0d6e6" - integrity sha512-LRPR2vumMAMg3CZ2vpcrFYzXySLX8qsCQKA5THyw6LyrhVonmif5b6QgChFxJozUZB4vMQSeN/Zl6UDpGNa1RA== +"@abp/bootstrap@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.5.0.tgz#e034698e613bae16b8469cca579215378af65f54" + integrity sha512-2Y4p3a0HeHnU+h5wMtk6sSvPqOqulzBZ1p96/+21Y+oIEhlYk33d63wUmXbhzalX6Grcp5DYGMYlHyMDEd55wQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" bootstrap "^4.3.1" -"@abp/core@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.4.0.tgz#0a8fd49ce85844bc0430ac4aaf7f1a025695c560" - integrity sha512-lmgM9Yk/u22/suuNMSH+pIt0G4oxZ26+SGM3lC0vIxXUl52pacOuXwL5zxKQrcRsdchvWjhRZkO4mHg8NBB8Ow== +"@abp/core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.5.0.tgz#6eba2680716834b57fc7c5228d767aa9b0a379be" + integrity sha512-VLGSdW9/QpqrrzuWMZas7NZh202wC2Px+mw89BRHJGcPSHdZRWhxwTG1pjl1h7qE9aVFMrm8iZ639Jk+K1o9eQ== -"@abp/datatables.net-bs4@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.4.0.tgz#c280afc0a30ceb1eabced7d813bc4a4840973152" - integrity sha512-9A5k3+3pt3T7160QAUo+Qa/EK1eRI5AFeXoV0Bo2x0jzEmMUriYoGIZva12vjc9kIcgk99WSeNUwKVnT3cJ8iA== +"@abp/datatables.net-bs4@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.5.0.tgz#6f9bc14f27ed5ba21654d9eef2cbd0d88dbff74b" + integrity sha512-f/t+VKfLWYFXOkQNIEXLsH9HlnHYnC24nivjGKHcG1Kznj1/4gMZXEyStT5yiNo/a75G0PoMicxBsyDrOndwhg== dependencies: - "@abp/datatables.net" "^2.4.0" + "@abp/datatables.net" "^2.5.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.4.0.tgz#09a9085b8d3292415c8464bcad3e5bed829e731e" - integrity sha512-4xmfSk0C2hRYyK7KZsF7TS5OuMq4vm+rtpG8vmEyVsZOlUDUaZF0nwDvesx4WMDRgsxt5Iw67XlAP1JctpWs0g== +"@abp/datatables.net@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.5.0.tgz#d9c52ed048fff9f92a938fa23a1fe93dcc2265e2" + integrity sha512-ntKt69oZOqdO2O9hSbgtmiU0TbWu1U3lwCNy1kYbj0qAqdBBukZ1dg4k1JBrLRAbp3u9+v0+zP97EjziNTrHxA== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" datatables.net "^1.10.20" -"@abp/font-awesome@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.4.0.tgz#cf67cc5fd19a0c8cb29dac58636cdb84ec3d9bb2" - integrity sha512-HVTW5hzj9HXMGBNlPh2CElvur2qFCg57+wjgx3Q8m01yiIMDpgvLd9s6xSeLu0YhhQweBF1G3IV1aXZ40W5bbg== +"@abp/font-awesome@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.5.0.tgz#99facfdd571a4089442da6ef5b142c4d9d110db1" + integrity sha512-tKlFxArLJGX9AzV8IzdnyVh4Feh+yoQa7PN3dAnlcLbNMX5kjhvVju4zBjaKaO6DBxWrT8BmKW0EOJNfIcksmw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.4.0.tgz#d5dac3d4f953bd5d9ec8cf54c7f723085b953b48" - integrity sha512-msbNH320c4trZVcdOD+2GUOdsaV4kKEA5cjK43XLjCtzb6cKZWXCt8cFfJu8z8fTuX6C8EbmAg1j5BDEumsa8A== +"@abp/jquery-form@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.5.0.tgz#75ae14a29f949e510c301a650923a4acef2b6b94" + integrity sha512-A9Oi6shfr1w309sFnfmxjOlFMqVe7udtXitSP9PrYi/hovAsKLb5niIFnvo7DlklM0+VLIsZ5WFf2Y8zAGzX7w== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.4.0.tgz#c2a2d0ce72d2b6af42af088a14775d80a4c334a1" - integrity sha512-E1TWBeTUStgS4hiQtIkjvkBrt1n737HoxN+w35jXjTbugXYRVgnjU6hoLR1n64FuUpHJ8jVBd64e5JwNjYEKkg== +"@abp/jquery-validation-unobtrusive@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.5.0.tgz#86a3a6c344d32e8f7583f376b9b6fdcbb9472777" + integrity sha512-eMPrb3W0AMWkU982abUA0zdu8fUErI4cDaYkDaEggxK0YfUK/EkR914+TWVFkHCPgm5PK+uEpfmWKYiCu7Ie4A== dependencies: - "@abp/jquery-validation" "^2.4.0" + "@abp/jquery-validation" "^2.5.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.4.0.tgz#e31ebc36e5c22405bccc8602beb007d4a3cd1303" - integrity sha512-pzpvGenz4CffdPQOXFL6wFUWMbzEw1KrjhpMogEn9GeIDf8bFFeyihlynGpwA/m3TR8JHqewf3/Aq2nhOxlQLg== +"@abp/jquery-validation@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.5.0.tgz#b62d309c65ac2e5607ecb112be21370b87dbb702" + integrity sha512-U8fXDHEQOLw7fZSvDTcLICnddsJ6xDeDprwsrAHnQoY7xLb+9eyY//7fgPhdusM/GSw4x5Lm4sSNkUOkRdnHnQ== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-validation "^1.19.1" -"@abp/jquery@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.4.0.tgz#6f3880490c77ff66643b962c63758ecdb2a41d9b" - integrity sha512-nAWbFd/vs+Zy2VQcscInG0hExujNQ+1XQEpY22rhqGAd2OY4ojhuY/df85zdiqbeqbgN06AywiFWaLi2Ue3h0g== +"@abp/jquery@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.5.0.tgz#61569e2cc9f28e03cbbaaa3c19896fa39e08f71e" + integrity sha512-9RyHZoOo+c3vjHUnSp/vGUfac2N2hRYyIcjEksiaaIJwRfBZZ3AhULgPkWKhQ5dXeGKllb+U1NnU7GisIPsPlw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" jquery "^3.4.1" -"@abp/lodash@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.4.0.tgz#8bc232d1c28bd1fe083d7e104875dba11162bb21" - integrity sha512-NAGv1b6W3pakyGvnVgu6WG2nJsHUVrcZOxTLBCbmUsaSBFXeyZuot3priDS1ZYZf+61r/gKBZ9UgcuhTFNyBFg== +"@abp/lodash@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.5.0.tgz#92bb5dec3280c96334baf063f2d1ddebde58b031" + integrity sha512-QRvqy3XPFnodJ8+gYRLb+ArcgqTE1BfeHhfw3Tr3LiofxfS1esPDiznWKCNCcVHx+wQ8sVYzniN7dtVGWPQW4w== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" lodash "^4.17.15" -"@abp/luxon@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.4.0.tgz#a33e8d0f5f986cbd5548fd47c5b302b13365a49b" - integrity sha512-IunEAeYz6mWCYwIbE9PlBSEFZiuCKwY/SQ9HrW4/a1Dbm7PbPzX7DcZ5+QT2pMB4wvWKNvl/adXum3o15Z+zJg== +"@abp/luxon@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.5.0.tgz#f40e5e8b97765361894744e029d0b96da4e4dde3" + integrity sha512-31v+wd8xogbC0aI+5rfaE/D0cnS2kjDWcoJEg9Zsb3CDjzmvxdAhCPdoQw22oRG72NKR0bBNZ/jG5wp+vyFsbA== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.4.0.tgz#9821f642affed77b9eb887aedc50bf419df55ccf" - integrity sha512-ZB7Bo3nY/fOVLkGkSCCh8JFVqV8dvwjf3NJUowdj8X0zC6ecQ0lxIaNOcgxetdcKabK+UzywybZqit9Uo2Sk8A== +"@abp/malihu-custom-scrollbar-plugin@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.5.0.tgz#6f7e4e903419f48e93806c88c007241bdfc0a4cb" + integrity sha512-Dl10cwvTI7OTH57kYuF0JLtMn35dKimgy/Uval+8nGJTXFU3r40xUyIFIKD9WPpkCtzGxYIrWRNfMzrt1Q17Ng== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.4.0.tgz#87a97d4130e74df20f0f605c8b207603e545ca3c" - integrity sha512-gmNWRTlM0j0LHdYEBYBJsTDdw1rNMPoVgQtszSwjPBpnKl0M8SKb7lLG0j/+2MkZQY7XkGNajJkntqvRlQAAvg== +"@abp/select2@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.5.0.tgz#070d8bf4e02a18119e0980971b9d5bad12da9c5c" + integrity sha512-8H6FD7wboBrxBIWOdNtNV26L9ef/gPP53V4S7senmKrU+9WoG3etFBkwO4pqQHuQxZmTlazuSJN+38/5sAYlSQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" select2 "^4.0.12" -"@abp/sweetalert@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.4.0.tgz#37ff153fc3df184fd1e19d45e2b8bfdfcfe0e0d9" - integrity sha512-fDmS+1yCgD1uEQg4bO+l52Vhr/3ZKSp1v3VIEJk8yxek6ICMCXgW+GZT0PJ7ZLJ766sZL+m6NnWS0XR4tiPtUQ== +"@abp/sweetalert@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.5.0.tgz#120492acf0815008a96bb907e0d5e81fbca8c1d2" + integrity sha512-6nKgwDOSdCYglZYvwTO6Fl7MLBC9Wk98c4CHhJKzgsR4UssKFi9MWyBcTU7fTDj8YFqXyTJoW4HSkMr1Eu2KZQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" sweetalert "^2.1.2" -"@abp/timeago@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.4.0.tgz#78b54ec5a678fe4b3c20db4bb502d462163144a5" - integrity sha512-Dqs7JC7mc+O08aEkp/+8qlBoMA5IqK09sPRN94j5jtRiOFFAq5q6wU8p9s1yxf50nr+6WHF2epIT85ZBNaWgdg== +"@abp/timeago@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.5.0.tgz#314a8ab1c8d6a2e2be3faee3d9eb18d26a7ded5e" + integrity sha512-J9xhJEVT8uCpSBCAa8Ssuer8WpmVrwICe/70i/YlPzW/q+dWXPvM2pmkdY22dkQOX1RKZqkqiAmFMUcl+DSyDA== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" timeago "^1.6.7" -"@abp/toastr@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.4.0.tgz#71816a45057b3b855095a9584def1c6887352727" - integrity sha512-vHztnU/l12KplH/c4HFgdj9FzZO1jTGLb+EzJQQqqQcDuLEijUOK9tUNjO8PmVM1gncjNsWL1ABvbd93oXCeXA== +"@abp/toastr@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.5.0.tgz#3f8f5fc6f6e8945f41039deeec8fbbdadd9f4617" + integrity sha512-pFPiDlZAAxPnMv5LPBEp2DpTSoGP4PE7L+9HS78EK28jqHYcfQvkswPeDmKNkMLTcI4+9CJ+geZWf9p6cnwxcw== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index f347cfecce..c9099b2aed 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.5.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index 55fafb8630..9cc07d676b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.4.0.tgz#dca466220b690cb1a87c63694b007775c7001bba" - integrity sha512-SMH9zc3JIHNFbmvFbaH6RCJ2SXtTswyzaopz3td9jFZJLx9rhmVJyyLQhONRU+9k5vlXbW5yDNjMnbFzJY/gqw== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.5.0.tgz#edfc51a5acac3a25747efc7c8664d025f81aef97" + integrity sha512-us2ARkEpmwhMwbCeVukYJvkiweQi4AF/C7YPgDLZGdioaeERJEh2UP0wsiPveh0RokcThIh3Egz6Xp/w8He3wQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.5.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.4.0.tgz#126b46f60c8ff26bd0e5e932f5d14aec11180f2c" - integrity sha512-p3qaSpZLabqVdcuanPYuT14G58ScXkzcUcl0rB4RxeN9hFSYMmlOQim6+Aawzn/OkUNrWO2NowsCg8E6KGVncQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^2.4.0" - "@abp/bootstrap" "^2.4.0" - "@abp/bootstrap-datepicker" "^2.4.0" - "@abp/datatables.net-bs4" "^2.4.0" - "@abp/font-awesome" "^2.4.0" - "@abp/jquery-form" "^2.4.0" - "@abp/jquery-validation-unobtrusive" "^2.4.0" - "@abp/lodash" "^2.4.0" - "@abp/luxon" "^2.4.0" - "@abp/malihu-custom-scrollbar-plugin" "^2.4.0" - "@abp/select2" "^2.4.0" - "@abp/sweetalert" "^2.4.0" - "@abp/timeago" "^2.4.0" - "@abp/toastr" "^2.4.0" - -"@abp/aspnetcore.mvc.ui@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.4.0.tgz#3c35b48019ee2e735bd8e1f761ff5e5e040bf3c7" - integrity sha512-pVS4lSjbLEUyuyZCasaSRO3KRb+eJ9/U2tz52bm2DJSbm7PQVipq1Ru+R2KuEz7rQ/BPULXwK9ehggQwvRWRww== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.5.0.tgz#e023443211de5d2ce50d38bb8ae7612cb303157e" + integrity sha512-8AFCucSBgFzGX5NtCpB8MaZnGgfY1/XLMjnfdQSv+DF2ZW6Ld0d3qY/evfimy8raFU8W8AtaTS510rEUsgkmog== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.5.0" + "@abp/bootstrap" "^2.5.0" + "@abp/bootstrap-datepicker" "^2.5.0" + "@abp/datatables.net-bs4" "^2.5.0" + "@abp/font-awesome" "^2.5.0" + "@abp/jquery-form" "^2.5.0" + "@abp/jquery-validation-unobtrusive" "^2.5.0" + "@abp/lodash" "^2.5.0" + "@abp/luxon" "^2.5.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.5.0" + "@abp/select2" "^2.5.0" + "@abp/sweetalert" "^2.5.0" + "@abp/timeago" "^2.5.0" + "@abp/toastr" "^2.5.0" + +"@abp/aspnetcore.mvc.ui@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.5.0.tgz#03bb105bfd6cce0730f109cfe188ad83ad3839ce" + integrity sha512-gyXHGFkSzPFaAx8QSwmlKlaoQtuLfe7OqLZcQZZco6wtyonn1qsI86sgFAxJx0bDf5FZDZGEHRgPqgWHc7Txlw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.4.0.tgz#b40b61065635b66a7b1ef60a7d07bde7917b2a58" - integrity sha512-88RtPk0U6XlpsL8GxlQ056fgUDMQ3+w4SZncHyYjL2uYBU0q5/Swkhm4oF4KxxHQ4nwxhD98UCwkB9gj6H4gZw== +"@abp/bootstrap-datepicker@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.5.0.tgz#f30a7430b25d8d467b3e1f3c6f1a82ffb4fde28c" + integrity sha512-2ivTurvVcSj35i+s66g9xrUFd+3TZ6Y7qiCSZWpYKc1LvavveM/t10/t9pcmgcsmUngH2adFzpeeZ1psweYtIw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.4.0.tgz#e0321834ea2ac5d3a1185e203cf9a01351c0d6e6" - integrity sha512-LRPR2vumMAMg3CZ2vpcrFYzXySLX8qsCQKA5THyw6LyrhVonmif5b6QgChFxJozUZB4vMQSeN/Zl6UDpGNa1RA== +"@abp/bootstrap@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.5.0.tgz#e034698e613bae16b8469cca579215378af65f54" + integrity sha512-2Y4p3a0HeHnU+h5wMtk6sSvPqOqulzBZ1p96/+21Y+oIEhlYk33d63wUmXbhzalX6Grcp5DYGMYlHyMDEd55wQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" bootstrap "^4.3.1" -"@abp/core@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.4.0.tgz#0a8fd49ce85844bc0430ac4aaf7f1a025695c560" - integrity sha512-lmgM9Yk/u22/suuNMSH+pIt0G4oxZ26+SGM3lC0vIxXUl52pacOuXwL5zxKQrcRsdchvWjhRZkO4mHg8NBB8Ow== +"@abp/core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.5.0.tgz#6eba2680716834b57fc7c5228d767aa9b0a379be" + integrity sha512-VLGSdW9/QpqrrzuWMZas7NZh202wC2Px+mw89BRHJGcPSHdZRWhxwTG1pjl1h7qE9aVFMrm8iZ639Jk+K1o9eQ== -"@abp/datatables.net-bs4@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.4.0.tgz#c280afc0a30ceb1eabced7d813bc4a4840973152" - integrity sha512-9A5k3+3pt3T7160QAUo+Qa/EK1eRI5AFeXoV0Bo2x0jzEmMUriYoGIZva12vjc9kIcgk99WSeNUwKVnT3cJ8iA== +"@abp/datatables.net-bs4@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.5.0.tgz#6f9bc14f27ed5ba21654d9eef2cbd0d88dbff74b" + integrity sha512-f/t+VKfLWYFXOkQNIEXLsH9HlnHYnC24nivjGKHcG1Kznj1/4gMZXEyStT5yiNo/a75G0PoMicxBsyDrOndwhg== dependencies: - "@abp/datatables.net" "^2.4.0" + "@abp/datatables.net" "^2.5.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.4.0.tgz#09a9085b8d3292415c8464bcad3e5bed829e731e" - integrity sha512-4xmfSk0C2hRYyK7KZsF7TS5OuMq4vm+rtpG8vmEyVsZOlUDUaZF0nwDvesx4WMDRgsxt5Iw67XlAP1JctpWs0g== +"@abp/datatables.net@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.5.0.tgz#d9c52ed048fff9f92a938fa23a1fe93dcc2265e2" + integrity sha512-ntKt69oZOqdO2O9hSbgtmiU0TbWu1U3lwCNy1kYbj0qAqdBBukZ1dg4k1JBrLRAbp3u9+v0+zP97EjziNTrHxA== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" datatables.net "^1.10.20" -"@abp/font-awesome@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.4.0.tgz#cf67cc5fd19a0c8cb29dac58636cdb84ec3d9bb2" - integrity sha512-HVTW5hzj9HXMGBNlPh2CElvur2qFCg57+wjgx3Q8m01yiIMDpgvLd9s6xSeLu0YhhQweBF1G3IV1aXZ40W5bbg== +"@abp/font-awesome@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.5.0.tgz#99facfdd571a4089442da6ef5b142c4d9d110db1" + integrity sha512-tKlFxArLJGX9AzV8IzdnyVh4Feh+yoQa7PN3dAnlcLbNMX5kjhvVju4zBjaKaO6DBxWrT8BmKW0EOJNfIcksmw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.4.0.tgz#d5dac3d4f953bd5d9ec8cf54c7f723085b953b48" - integrity sha512-msbNH320c4trZVcdOD+2GUOdsaV4kKEA5cjK43XLjCtzb6cKZWXCt8cFfJu8z8fTuX6C8EbmAg1j5BDEumsa8A== +"@abp/jquery-form@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.5.0.tgz#75ae14a29f949e510c301a650923a4acef2b6b94" + integrity sha512-A9Oi6shfr1w309sFnfmxjOlFMqVe7udtXitSP9PrYi/hovAsKLb5niIFnvo7DlklM0+VLIsZ5WFf2Y8zAGzX7w== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.4.0.tgz#c2a2d0ce72d2b6af42af088a14775d80a4c334a1" - integrity sha512-E1TWBeTUStgS4hiQtIkjvkBrt1n737HoxN+w35jXjTbugXYRVgnjU6hoLR1n64FuUpHJ8jVBd64e5JwNjYEKkg== +"@abp/jquery-validation-unobtrusive@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.5.0.tgz#86a3a6c344d32e8f7583f376b9b6fdcbb9472777" + integrity sha512-eMPrb3W0AMWkU982abUA0zdu8fUErI4cDaYkDaEggxK0YfUK/EkR914+TWVFkHCPgm5PK+uEpfmWKYiCu7Ie4A== dependencies: - "@abp/jquery-validation" "^2.4.0" + "@abp/jquery-validation" "^2.5.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.4.0.tgz#e31ebc36e5c22405bccc8602beb007d4a3cd1303" - integrity sha512-pzpvGenz4CffdPQOXFL6wFUWMbzEw1KrjhpMogEn9GeIDf8bFFeyihlynGpwA/m3TR8JHqewf3/Aq2nhOxlQLg== +"@abp/jquery-validation@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.5.0.tgz#b62d309c65ac2e5607ecb112be21370b87dbb702" + integrity sha512-U8fXDHEQOLw7fZSvDTcLICnddsJ6xDeDprwsrAHnQoY7xLb+9eyY//7fgPhdusM/GSw4x5Lm4sSNkUOkRdnHnQ== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-validation "^1.19.1" -"@abp/jquery@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.4.0.tgz#6f3880490c77ff66643b962c63758ecdb2a41d9b" - integrity sha512-nAWbFd/vs+Zy2VQcscInG0hExujNQ+1XQEpY22rhqGAd2OY4ojhuY/df85zdiqbeqbgN06AywiFWaLi2Ue3h0g== +"@abp/jquery@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.5.0.tgz#61569e2cc9f28e03cbbaaa3c19896fa39e08f71e" + integrity sha512-9RyHZoOo+c3vjHUnSp/vGUfac2N2hRYyIcjEksiaaIJwRfBZZ3AhULgPkWKhQ5dXeGKllb+U1NnU7GisIPsPlw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" jquery "^3.4.1" -"@abp/lodash@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.4.0.tgz#8bc232d1c28bd1fe083d7e104875dba11162bb21" - integrity sha512-NAGv1b6W3pakyGvnVgu6WG2nJsHUVrcZOxTLBCbmUsaSBFXeyZuot3priDS1ZYZf+61r/gKBZ9UgcuhTFNyBFg== +"@abp/lodash@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.5.0.tgz#92bb5dec3280c96334baf063f2d1ddebde58b031" + integrity sha512-QRvqy3XPFnodJ8+gYRLb+ArcgqTE1BfeHhfw3Tr3LiofxfS1esPDiznWKCNCcVHx+wQ8sVYzniN7dtVGWPQW4w== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" lodash "^4.17.15" -"@abp/luxon@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.4.0.tgz#a33e8d0f5f986cbd5548fd47c5b302b13365a49b" - integrity sha512-IunEAeYz6mWCYwIbE9PlBSEFZiuCKwY/SQ9HrW4/a1Dbm7PbPzX7DcZ5+QT2pMB4wvWKNvl/adXum3o15Z+zJg== +"@abp/luxon@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.5.0.tgz#f40e5e8b97765361894744e029d0b96da4e4dde3" + integrity sha512-31v+wd8xogbC0aI+5rfaE/D0cnS2kjDWcoJEg9Zsb3CDjzmvxdAhCPdoQw22oRG72NKR0bBNZ/jG5wp+vyFsbA== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.4.0.tgz#9821f642affed77b9eb887aedc50bf419df55ccf" - integrity sha512-ZB7Bo3nY/fOVLkGkSCCh8JFVqV8dvwjf3NJUowdj8X0zC6ecQ0lxIaNOcgxetdcKabK+UzywybZqit9Uo2Sk8A== +"@abp/malihu-custom-scrollbar-plugin@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.5.0.tgz#6f7e4e903419f48e93806c88c007241bdfc0a4cb" + integrity sha512-Dl10cwvTI7OTH57kYuF0JLtMn35dKimgy/Uval+8nGJTXFU3r40xUyIFIKD9WPpkCtzGxYIrWRNfMzrt1Q17Ng== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.4.0.tgz#87a97d4130e74df20f0f605c8b207603e545ca3c" - integrity sha512-gmNWRTlM0j0LHdYEBYBJsTDdw1rNMPoVgQtszSwjPBpnKl0M8SKb7lLG0j/+2MkZQY7XkGNajJkntqvRlQAAvg== +"@abp/select2@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.5.0.tgz#070d8bf4e02a18119e0980971b9d5bad12da9c5c" + integrity sha512-8H6FD7wboBrxBIWOdNtNV26L9ef/gPP53V4S7senmKrU+9WoG3etFBkwO4pqQHuQxZmTlazuSJN+38/5sAYlSQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" select2 "^4.0.12" -"@abp/sweetalert@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.4.0.tgz#37ff153fc3df184fd1e19d45e2b8bfdfcfe0e0d9" - integrity sha512-fDmS+1yCgD1uEQg4bO+l52Vhr/3ZKSp1v3VIEJk8yxek6ICMCXgW+GZT0PJ7ZLJ766sZL+m6NnWS0XR4tiPtUQ== +"@abp/sweetalert@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.5.0.tgz#120492acf0815008a96bb907e0d5e81fbca8c1d2" + integrity sha512-6nKgwDOSdCYglZYvwTO6Fl7MLBC9Wk98c4CHhJKzgsR4UssKFi9MWyBcTU7fTDj8YFqXyTJoW4HSkMr1Eu2KZQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" sweetalert "^2.1.2" -"@abp/timeago@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.4.0.tgz#78b54ec5a678fe4b3c20db4bb502d462163144a5" - integrity sha512-Dqs7JC7mc+O08aEkp/+8qlBoMA5IqK09sPRN94j5jtRiOFFAq5q6wU8p9s1yxf50nr+6WHF2epIT85ZBNaWgdg== +"@abp/timeago@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.5.0.tgz#314a8ab1c8d6a2e2be3faee3d9eb18d26a7ded5e" + integrity sha512-J9xhJEVT8uCpSBCAa8Ssuer8WpmVrwICe/70i/YlPzW/q+dWXPvM2pmkdY22dkQOX1RKZqkqiAmFMUcl+DSyDA== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" timeago "^1.6.7" -"@abp/toastr@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.4.0.tgz#71816a45057b3b855095a9584def1c6887352727" - integrity sha512-vHztnU/l12KplH/c4HFgdj9FzZO1jTGLb+EzJQQqqQcDuLEijUOK9tUNjO8PmVM1gncjNsWL1ABvbd93oXCeXA== +"@abp/toastr@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.5.0.tgz#3f8f5fc6f6e8945f41039deeec8fbbdadd9f4617" + integrity sha512-pFPiDlZAAxPnMv5LPBEp2DpTSoGP4PE7L+9HS78EK28jqHYcfQvkswPeDmKNkMLTcI4+9CJ+geZWf9p6cnwxcw== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 6239a2f59f..ede2db7ff0 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -12,11 +12,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~2.4.0", - "@abp/ng.theme.basic": "~2.4.0", - "@abp/ng.identity": "~2.4.0", - "@abp/ng.tenant-management": "~2.4.0", - "@abp/ng.setting-management": "~2.4.0", + "@abp/ng.account": "~2.5.0", + "@abp/ng.theme.basic": "~2.5.0", + "@abp/ng.identity": "~2.5.0", + "@abp/ng.tenant-management": "~2.5.0", + "@abp/ng.setting-management": "~2.5.0", "@angular/animations": "~8.2.14", "@angular/common": "~8.2.14", "@angular/compiler": "~8.2.14", diff --git a/templates/module/angular/projects/my-project-name-config/package.json b/templates/module/angular/projects/my-project-name-config/package.json index 805038cacb..8e9e6388fe 100644 --- a/templates/module/angular/projects/my-project-name-config/package.json +++ b/templates/module/angular/projects/my-project-name-config/package.json @@ -2,6 +2,6 @@ "name": "my-project-name.config", "version": "0.0.1", "peerDependencies": { - "@abp/ng.core": "~2.4.0" + "@abp/ng.core": "~2.5.0" } } diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index d82f2a812f..b384a2290d 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -2,7 +2,7 @@ "name": "my-project-name", "version": "0.0.1", "dependencies": { - "@abp/ng.theme.shared": "~2.4.0", + "@abp/ng.theme.shared": "~2.5.0", "my-project-name.config": "^0.0.1" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json index 8d1f5d36d1..5761f9feb9 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.5.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index b4a55740f1..345479f8bb 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.4.0.tgz#dca466220b690cb1a87c63694b007775c7001bba" - integrity sha512-SMH9zc3JIHNFbmvFbaH6RCJ2SXtTswyzaopz3td9jFZJLx9rhmVJyyLQhONRU+9k5vlXbW5yDNjMnbFzJY/gqw== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.5.0.tgz#edfc51a5acac3a25747efc7c8664d025f81aef97" + integrity sha512-us2ARkEpmwhMwbCeVukYJvkiweQi4AF/C7YPgDLZGdioaeERJEh2UP0wsiPveh0RokcThIh3Egz6Xp/w8He3wQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.5.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.4.0.tgz#126b46f60c8ff26bd0e5e932f5d14aec11180f2c" - integrity sha512-p3qaSpZLabqVdcuanPYuT14G58ScXkzcUcl0rB4RxeN9hFSYMmlOQim6+Aawzn/OkUNrWO2NowsCg8E6KGVncQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^2.4.0" - "@abp/bootstrap" "^2.4.0" - "@abp/bootstrap-datepicker" "^2.4.0" - "@abp/datatables.net-bs4" "^2.4.0" - "@abp/font-awesome" "^2.4.0" - "@abp/jquery-form" "^2.4.0" - "@abp/jquery-validation-unobtrusive" "^2.4.0" - "@abp/lodash" "^2.4.0" - "@abp/luxon" "^2.4.0" - "@abp/malihu-custom-scrollbar-plugin" "^2.4.0" - "@abp/select2" "^2.4.0" - "@abp/sweetalert" "^2.4.0" - "@abp/timeago" "^2.4.0" - "@abp/toastr" "^2.4.0" - -"@abp/aspnetcore.mvc.ui@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.4.0.tgz#3c35b48019ee2e735bd8e1f761ff5e5e040bf3c7" - integrity sha512-pVS4lSjbLEUyuyZCasaSRO3KRb+eJ9/U2tz52bm2DJSbm7PQVipq1Ru+R2KuEz7rQ/BPULXwK9ehggQwvRWRww== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.5.0.tgz#e023443211de5d2ce50d38bb8ae7612cb303157e" + integrity sha512-8AFCucSBgFzGX5NtCpB8MaZnGgfY1/XLMjnfdQSv+DF2ZW6Ld0d3qY/evfimy8raFU8W8AtaTS510rEUsgkmog== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.5.0" + "@abp/bootstrap" "^2.5.0" + "@abp/bootstrap-datepicker" "^2.5.0" + "@abp/datatables.net-bs4" "^2.5.0" + "@abp/font-awesome" "^2.5.0" + "@abp/jquery-form" "^2.5.0" + "@abp/jquery-validation-unobtrusive" "^2.5.0" + "@abp/lodash" "^2.5.0" + "@abp/luxon" "^2.5.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.5.0" + "@abp/select2" "^2.5.0" + "@abp/sweetalert" "^2.5.0" + "@abp/timeago" "^2.5.0" + "@abp/toastr" "^2.5.0" + +"@abp/aspnetcore.mvc.ui@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.5.0.tgz#03bb105bfd6cce0730f109cfe188ad83ad3839ce" + integrity sha512-gyXHGFkSzPFaAx8QSwmlKlaoQtuLfe7OqLZcQZZco6wtyonn1qsI86sgFAxJx0bDf5FZDZGEHRgPqgWHc7Txlw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.4.0.tgz#b40b61065635b66a7b1ef60a7d07bde7917b2a58" - integrity sha512-88RtPk0U6XlpsL8GxlQ056fgUDMQ3+w4SZncHyYjL2uYBU0q5/Swkhm4oF4KxxHQ4nwxhD98UCwkB9gj6H4gZw== +"@abp/bootstrap-datepicker@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.5.0.tgz#f30a7430b25d8d467b3e1f3c6f1a82ffb4fde28c" + integrity sha512-2ivTurvVcSj35i+s66g9xrUFd+3TZ6Y7qiCSZWpYKc1LvavveM/t10/t9pcmgcsmUngH2adFzpeeZ1psweYtIw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.4.0.tgz#e0321834ea2ac5d3a1185e203cf9a01351c0d6e6" - integrity sha512-LRPR2vumMAMg3CZ2vpcrFYzXySLX8qsCQKA5THyw6LyrhVonmif5b6QgChFxJozUZB4vMQSeN/Zl6UDpGNa1RA== +"@abp/bootstrap@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.5.0.tgz#e034698e613bae16b8469cca579215378af65f54" + integrity sha512-2Y4p3a0HeHnU+h5wMtk6sSvPqOqulzBZ1p96/+21Y+oIEhlYk33d63wUmXbhzalX6Grcp5DYGMYlHyMDEd55wQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" bootstrap "^4.3.1" -"@abp/core@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.4.0.tgz#0a8fd49ce85844bc0430ac4aaf7f1a025695c560" - integrity sha512-lmgM9Yk/u22/suuNMSH+pIt0G4oxZ26+SGM3lC0vIxXUl52pacOuXwL5zxKQrcRsdchvWjhRZkO4mHg8NBB8Ow== +"@abp/core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.5.0.tgz#6eba2680716834b57fc7c5228d767aa9b0a379be" + integrity sha512-VLGSdW9/QpqrrzuWMZas7NZh202wC2Px+mw89BRHJGcPSHdZRWhxwTG1pjl1h7qE9aVFMrm8iZ639Jk+K1o9eQ== -"@abp/datatables.net-bs4@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.4.0.tgz#c280afc0a30ceb1eabced7d813bc4a4840973152" - integrity sha512-9A5k3+3pt3T7160QAUo+Qa/EK1eRI5AFeXoV0Bo2x0jzEmMUriYoGIZva12vjc9kIcgk99WSeNUwKVnT3cJ8iA== +"@abp/datatables.net-bs4@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.5.0.tgz#6f9bc14f27ed5ba21654d9eef2cbd0d88dbff74b" + integrity sha512-f/t+VKfLWYFXOkQNIEXLsH9HlnHYnC24nivjGKHcG1Kznj1/4gMZXEyStT5yiNo/a75G0PoMicxBsyDrOndwhg== dependencies: - "@abp/datatables.net" "^2.4.0" + "@abp/datatables.net" "^2.5.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.4.0.tgz#09a9085b8d3292415c8464bcad3e5bed829e731e" - integrity sha512-4xmfSk0C2hRYyK7KZsF7TS5OuMq4vm+rtpG8vmEyVsZOlUDUaZF0nwDvesx4WMDRgsxt5Iw67XlAP1JctpWs0g== +"@abp/datatables.net@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.5.0.tgz#d9c52ed048fff9f92a938fa23a1fe93dcc2265e2" + integrity sha512-ntKt69oZOqdO2O9hSbgtmiU0TbWu1U3lwCNy1kYbj0qAqdBBukZ1dg4k1JBrLRAbp3u9+v0+zP97EjziNTrHxA== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" datatables.net "^1.10.20" -"@abp/font-awesome@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.4.0.tgz#cf67cc5fd19a0c8cb29dac58636cdb84ec3d9bb2" - integrity sha512-HVTW5hzj9HXMGBNlPh2CElvur2qFCg57+wjgx3Q8m01yiIMDpgvLd9s6xSeLu0YhhQweBF1G3IV1aXZ40W5bbg== +"@abp/font-awesome@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.5.0.tgz#99facfdd571a4089442da6ef5b142c4d9d110db1" + integrity sha512-tKlFxArLJGX9AzV8IzdnyVh4Feh+yoQa7PN3dAnlcLbNMX5kjhvVju4zBjaKaO6DBxWrT8BmKW0EOJNfIcksmw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.4.0.tgz#d5dac3d4f953bd5d9ec8cf54c7f723085b953b48" - integrity sha512-msbNH320c4trZVcdOD+2GUOdsaV4kKEA5cjK43XLjCtzb6cKZWXCt8cFfJu8z8fTuX6C8EbmAg1j5BDEumsa8A== +"@abp/jquery-form@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.5.0.tgz#75ae14a29f949e510c301a650923a4acef2b6b94" + integrity sha512-A9Oi6shfr1w309sFnfmxjOlFMqVe7udtXitSP9PrYi/hovAsKLb5niIFnvo7DlklM0+VLIsZ5WFf2Y8zAGzX7w== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.4.0.tgz#c2a2d0ce72d2b6af42af088a14775d80a4c334a1" - integrity sha512-E1TWBeTUStgS4hiQtIkjvkBrt1n737HoxN+w35jXjTbugXYRVgnjU6hoLR1n64FuUpHJ8jVBd64e5JwNjYEKkg== +"@abp/jquery-validation-unobtrusive@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.5.0.tgz#86a3a6c344d32e8f7583f376b9b6fdcbb9472777" + integrity sha512-eMPrb3W0AMWkU982abUA0zdu8fUErI4cDaYkDaEggxK0YfUK/EkR914+TWVFkHCPgm5PK+uEpfmWKYiCu7Ie4A== dependencies: - "@abp/jquery-validation" "^2.4.0" + "@abp/jquery-validation" "^2.5.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.4.0.tgz#e31ebc36e5c22405bccc8602beb007d4a3cd1303" - integrity sha512-pzpvGenz4CffdPQOXFL6wFUWMbzEw1KrjhpMogEn9GeIDf8bFFeyihlynGpwA/m3TR8JHqewf3/Aq2nhOxlQLg== +"@abp/jquery-validation@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.5.0.tgz#b62d309c65ac2e5607ecb112be21370b87dbb702" + integrity sha512-U8fXDHEQOLw7fZSvDTcLICnddsJ6xDeDprwsrAHnQoY7xLb+9eyY//7fgPhdusM/GSw4x5Lm4sSNkUOkRdnHnQ== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-validation "^1.19.1" -"@abp/jquery@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.4.0.tgz#6f3880490c77ff66643b962c63758ecdb2a41d9b" - integrity sha512-nAWbFd/vs+Zy2VQcscInG0hExujNQ+1XQEpY22rhqGAd2OY4ojhuY/df85zdiqbeqbgN06AywiFWaLi2Ue3h0g== +"@abp/jquery@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.5.0.tgz#61569e2cc9f28e03cbbaaa3c19896fa39e08f71e" + integrity sha512-9RyHZoOo+c3vjHUnSp/vGUfac2N2hRYyIcjEksiaaIJwRfBZZ3AhULgPkWKhQ5dXeGKllb+U1NnU7GisIPsPlw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" jquery "^3.4.1" -"@abp/lodash@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.4.0.tgz#8bc232d1c28bd1fe083d7e104875dba11162bb21" - integrity sha512-NAGv1b6W3pakyGvnVgu6WG2nJsHUVrcZOxTLBCbmUsaSBFXeyZuot3priDS1ZYZf+61r/gKBZ9UgcuhTFNyBFg== +"@abp/lodash@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.5.0.tgz#92bb5dec3280c96334baf063f2d1ddebde58b031" + integrity sha512-QRvqy3XPFnodJ8+gYRLb+ArcgqTE1BfeHhfw3Tr3LiofxfS1esPDiznWKCNCcVHx+wQ8sVYzniN7dtVGWPQW4w== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" lodash "^4.17.15" -"@abp/luxon@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.4.0.tgz#a33e8d0f5f986cbd5548fd47c5b302b13365a49b" - integrity sha512-IunEAeYz6mWCYwIbE9PlBSEFZiuCKwY/SQ9HrW4/a1Dbm7PbPzX7DcZ5+QT2pMB4wvWKNvl/adXum3o15Z+zJg== +"@abp/luxon@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.5.0.tgz#f40e5e8b97765361894744e029d0b96da4e4dde3" + integrity sha512-31v+wd8xogbC0aI+5rfaE/D0cnS2kjDWcoJEg9Zsb3CDjzmvxdAhCPdoQw22oRG72NKR0bBNZ/jG5wp+vyFsbA== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.4.0.tgz#9821f642affed77b9eb887aedc50bf419df55ccf" - integrity sha512-ZB7Bo3nY/fOVLkGkSCCh8JFVqV8dvwjf3NJUowdj8X0zC6ecQ0lxIaNOcgxetdcKabK+UzywybZqit9Uo2Sk8A== +"@abp/malihu-custom-scrollbar-plugin@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.5.0.tgz#6f7e4e903419f48e93806c88c007241bdfc0a4cb" + integrity sha512-Dl10cwvTI7OTH57kYuF0JLtMn35dKimgy/Uval+8nGJTXFU3r40xUyIFIKD9WPpkCtzGxYIrWRNfMzrt1Q17Ng== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.4.0.tgz#87a97d4130e74df20f0f605c8b207603e545ca3c" - integrity sha512-gmNWRTlM0j0LHdYEBYBJsTDdw1rNMPoVgQtszSwjPBpnKl0M8SKb7lLG0j/+2MkZQY7XkGNajJkntqvRlQAAvg== +"@abp/select2@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.5.0.tgz#070d8bf4e02a18119e0980971b9d5bad12da9c5c" + integrity sha512-8H6FD7wboBrxBIWOdNtNV26L9ef/gPP53V4S7senmKrU+9WoG3etFBkwO4pqQHuQxZmTlazuSJN+38/5sAYlSQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" select2 "^4.0.12" -"@abp/sweetalert@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.4.0.tgz#37ff153fc3df184fd1e19d45e2b8bfdfcfe0e0d9" - integrity sha512-fDmS+1yCgD1uEQg4bO+l52Vhr/3ZKSp1v3VIEJk8yxek6ICMCXgW+GZT0PJ7ZLJ766sZL+m6NnWS0XR4tiPtUQ== +"@abp/sweetalert@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.5.0.tgz#120492acf0815008a96bb907e0d5e81fbca8c1d2" + integrity sha512-6nKgwDOSdCYglZYvwTO6Fl7MLBC9Wk98c4CHhJKzgsR4UssKFi9MWyBcTU7fTDj8YFqXyTJoW4HSkMr1Eu2KZQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" sweetalert "^2.1.2" -"@abp/timeago@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.4.0.tgz#78b54ec5a678fe4b3c20db4bb502d462163144a5" - integrity sha512-Dqs7JC7mc+O08aEkp/+8qlBoMA5IqK09sPRN94j5jtRiOFFAq5q6wU8p9s1yxf50nr+6WHF2epIT85ZBNaWgdg== +"@abp/timeago@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.5.0.tgz#314a8ab1c8d6a2e2be3faee3d9eb18d26a7ded5e" + integrity sha512-J9xhJEVT8uCpSBCAa8Ssuer8WpmVrwICe/70i/YlPzW/q+dWXPvM2pmkdY22dkQOX1RKZqkqiAmFMUcl+DSyDA== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" timeago "^1.6.7" -"@abp/toastr@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.4.0.tgz#71816a45057b3b855095a9584def1c6887352727" - integrity sha512-vHztnU/l12KplH/c4HFgdj9FzZO1jTGLb+EzJQQqqQcDuLEijUOK9tUNjO8PmVM1gncjNsWL1ABvbd93oXCeXA== +"@abp/toastr@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.5.0.tgz#3f8f5fc6f6e8945f41039deeec8fbbdadd9f4617" + integrity sha512-pFPiDlZAAxPnMv5LPBEp2DpTSoGP4PE7L+9HS78EK28jqHYcfQvkswPeDmKNkMLTcI4+9CJ+geZWf9p6cnwxcw== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index f347cfecce..c9099b2aed 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.5.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock index b4a55740f1..345479f8bb 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.4.0.tgz#dca466220b690cb1a87c63694b007775c7001bba" - integrity sha512-SMH9zc3JIHNFbmvFbaH6RCJ2SXtTswyzaopz3td9jFZJLx9rhmVJyyLQhONRU+9k5vlXbW5yDNjMnbFzJY/gqw== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.5.0.tgz#edfc51a5acac3a25747efc7c8664d025f81aef97" + integrity sha512-us2ARkEpmwhMwbCeVukYJvkiweQi4AF/C7YPgDLZGdioaeERJEh2UP0wsiPveh0RokcThIh3Egz6Xp/w8He3wQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.5.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.4.0.tgz#126b46f60c8ff26bd0e5e932f5d14aec11180f2c" - integrity sha512-p3qaSpZLabqVdcuanPYuT14G58ScXkzcUcl0rB4RxeN9hFSYMmlOQim6+Aawzn/OkUNrWO2NowsCg8E6KGVncQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^2.4.0" - "@abp/bootstrap" "^2.4.0" - "@abp/bootstrap-datepicker" "^2.4.0" - "@abp/datatables.net-bs4" "^2.4.0" - "@abp/font-awesome" "^2.4.0" - "@abp/jquery-form" "^2.4.0" - "@abp/jquery-validation-unobtrusive" "^2.4.0" - "@abp/lodash" "^2.4.0" - "@abp/luxon" "^2.4.0" - "@abp/malihu-custom-scrollbar-plugin" "^2.4.0" - "@abp/select2" "^2.4.0" - "@abp/sweetalert" "^2.4.0" - "@abp/timeago" "^2.4.0" - "@abp/toastr" "^2.4.0" - -"@abp/aspnetcore.mvc.ui@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.4.0.tgz#3c35b48019ee2e735bd8e1f761ff5e5e040bf3c7" - integrity sha512-pVS4lSjbLEUyuyZCasaSRO3KRb+eJ9/U2tz52bm2DJSbm7PQVipq1Ru+R2KuEz7rQ/BPULXwK9ehggQwvRWRww== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.5.0.tgz#e023443211de5d2ce50d38bb8ae7612cb303157e" + integrity sha512-8AFCucSBgFzGX5NtCpB8MaZnGgfY1/XLMjnfdQSv+DF2ZW6Ld0d3qY/evfimy8raFU8W8AtaTS510rEUsgkmog== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.5.0" + "@abp/bootstrap" "^2.5.0" + "@abp/bootstrap-datepicker" "^2.5.0" + "@abp/datatables.net-bs4" "^2.5.0" + "@abp/font-awesome" "^2.5.0" + "@abp/jquery-form" "^2.5.0" + "@abp/jquery-validation-unobtrusive" "^2.5.0" + "@abp/lodash" "^2.5.0" + "@abp/luxon" "^2.5.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.5.0" + "@abp/select2" "^2.5.0" + "@abp/sweetalert" "^2.5.0" + "@abp/timeago" "^2.5.0" + "@abp/toastr" "^2.5.0" + +"@abp/aspnetcore.mvc.ui@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.5.0.tgz#03bb105bfd6cce0730f109cfe188ad83ad3839ce" + integrity sha512-gyXHGFkSzPFaAx8QSwmlKlaoQtuLfe7OqLZcQZZco6wtyonn1qsI86sgFAxJx0bDf5FZDZGEHRgPqgWHc7Txlw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.4.0.tgz#b40b61065635b66a7b1ef60a7d07bde7917b2a58" - integrity sha512-88RtPk0U6XlpsL8GxlQ056fgUDMQ3+w4SZncHyYjL2uYBU0q5/Swkhm4oF4KxxHQ4nwxhD98UCwkB9gj6H4gZw== +"@abp/bootstrap-datepicker@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.5.0.tgz#f30a7430b25d8d467b3e1f3c6f1a82ffb4fde28c" + integrity sha512-2ivTurvVcSj35i+s66g9xrUFd+3TZ6Y7qiCSZWpYKc1LvavveM/t10/t9pcmgcsmUngH2adFzpeeZ1psweYtIw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.4.0.tgz#e0321834ea2ac5d3a1185e203cf9a01351c0d6e6" - integrity sha512-LRPR2vumMAMg3CZ2vpcrFYzXySLX8qsCQKA5THyw6LyrhVonmif5b6QgChFxJozUZB4vMQSeN/Zl6UDpGNa1RA== +"@abp/bootstrap@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.5.0.tgz#e034698e613bae16b8469cca579215378af65f54" + integrity sha512-2Y4p3a0HeHnU+h5wMtk6sSvPqOqulzBZ1p96/+21Y+oIEhlYk33d63wUmXbhzalX6Grcp5DYGMYlHyMDEd55wQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" bootstrap "^4.3.1" -"@abp/core@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.4.0.tgz#0a8fd49ce85844bc0430ac4aaf7f1a025695c560" - integrity sha512-lmgM9Yk/u22/suuNMSH+pIt0G4oxZ26+SGM3lC0vIxXUl52pacOuXwL5zxKQrcRsdchvWjhRZkO4mHg8NBB8Ow== +"@abp/core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.5.0.tgz#6eba2680716834b57fc7c5228d767aa9b0a379be" + integrity sha512-VLGSdW9/QpqrrzuWMZas7NZh202wC2Px+mw89BRHJGcPSHdZRWhxwTG1pjl1h7qE9aVFMrm8iZ639Jk+K1o9eQ== -"@abp/datatables.net-bs4@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.4.0.tgz#c280afc0a30ceb1eabced7d813bc4a4840973152" - integrity sha512-9A5k3+3pt3T7160QAUo+Qa/EK1eRI5AFeXoV0Bo2x0jzEmMUriYoGIZva12vjc9kIcgk99WSeNUwKVnT3cJ8iA== +"@abp/datatables.net-bs4@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.5.0.tgz#6f9bc14f27ed5ba21654d9eef2cbd0d88dbff74b" + integrity sha512-f/t+VKfLWYFXOkQNIEXLsH9HlnHYnC24nivjGKHcG1Kznj1/4gMZXEyStT5yiNo/a75G0PoMicxBsyDrOndwhg== dependencies: - "@abp/datatables.net" "^2.4.0" + "@abp/datatables.net" "^2.5.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.4.0.tgz#09a9085b8d3292415c8464bcad3e5bed829e731e" - integrity sha512-4xmfSk0C2hRYyK7KZsF7TS5OuMq4vm+rtpG8vmEyVsZOlUDUaZF0nwDvesx4WMDRgsxt5Iw67XlAP1JctpWs0g== +"@abp/datatables.net@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.5.0.tgz#d9c52ed048fff9f92a938fa23a1fe93dcc2265e2" + integrity sha512-ntKt69oZOqdO2O9hSbgtmiU0TbWu1U3lwCNy1kYbj0qAqdBBukZ1dg4k1JBrLRAbp3u9+v0+zP97EjziNTrHxA== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" datatables.net "^1.10.20" -"@abp/font-awesome@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.4.0.tgz#cf67cc5fd19a0c8cb29dac58636cdb84ec3d9bb2" - integrity sha512-HVTW5hzj9HXMGBNlPh2CElvur2qFCg57+wjgx3Q8m01yiIMDpgvLd9s6xSeLu0YhhQweBF1G3IV1aXZ40W5bbg== +"@abp/font-awesome@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.5.0.tgz#99facfdd571a4089442da6ef5b142c4d9d110db1" + integrity sha512-tKlFxArLJGX9AzV8IzdnyVh4Feh+yoQa7PN3dAnlcLbNMX5kjhvVju4zBjaKaO6DBxWrT8BmKW0EOJNfIcksmw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.4.0.tgz#d5dac3d4f953bd5d9ec8cf54c7f723085b953b48" - integrity sha512-msbNH320c4trZVcdOD+2GUOdsaV4kKEA5cjK43XLjCtzb6cKZWXCt8cFfJu8z8fTuX6C8EbmAg1j5BDEumsa8A== +"@abp/jquery-form@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.5.0.tgz#75ae14a29f949e510c301a650923a4acef2b6b94" + integrity sha512-A9Oi6shfr1w309sFnfmxjOlFMqVe7udtXitSP9PrYi/hovAsKLb5niIFnvo7DlklM0+VLIsZ5WFf2Y8zAGzX7w== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.4.0.tgz#c2a2d0ce72d2b6af42af088a14775d80a4c334a1" - integrity sha512-E1TWBeTUStgS4hiQtIkjvkBrt1n737HoxN+w35jXjTbugXYRVgnjU6hoLR1n64FuUpHJ8jVBd64e5JwNjYEKkg== +"@abp/jquery-validation-unobtrusive@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.5.0.tgz#86a3a6c344d32e8f7583f376b9b6fdcbb9472777" + integrity sha512-eMPrb3W0AMWkU982abUA0zdu8fUErI4cDaYkDaEggxK0YfUK/EkR914+TWVFkHCPgm5PK+uEpfmWKYiCu7Ie4A== dependencies: - "@abp/jquery-validation" "^2.4.0" + "@abp/jquery-validation" "^2.5.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.4.0.tgz#e31ebc36e5c22405bccc8602beb007d4a3cd1303" - integrity sha512-pzpvGenz4CffdPQOXFL6wFUWMbzEw1KrjhpMogEn9GeIDf8bFFeyihlynGpwA/m3TR8JHqewf3/Aq2nhOxlQLg== +"@abp/jquery-validation@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.5.0.tgz#b62d309c65ac2e5607ecb112be21370b87dbb702" + integrity sha512-U8fXDHEQOLw7fZSvDTcLICnddsJ6xDeDprwsrAHnQoY7xLb+9eyY//7fgPhdusM/GSw4x5Lm4sSNkUOkRdnHnQ== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-validation "^1.19.1" -"@abp/jquery@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.4.0.tgz#6f3880490c77ff66643b962c63758ecdb2a41d9b" - integrity sha512-nAWbFd/vs+Zy2VQcscInG0hExujNQ+1XQEpY22rhqGAd2OY4ojhuY/df85zdiqbeqbgN06AywiFWaLi2Ue3h0g== +"@abp/jquery@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.5.0.tgz#61569e2cc9f28e03cbbaaa3c19896fa39e08f71e" + integrity sha512-9RyHZoOo+c3vjHUnSp/vGUfac2N2hRYyIcjEksiaaIJwRfBZZ3AhULgPkWKhQ5dXeGKllb+U1NnU7GisIPsPlw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" jquery "^3.4.1" -"@abp/lodash@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.4.0.tgz#8bc232d1c28bd1fe083d7e104875dba11162bb21" - integrity sha512-NAGv1b6W3pakyGvnVgu6WG2nJsHUVrcZOxTLBCbmUsaSBFXeyZuot3priDS1ZYZf+61r/gKBZ9UgcuhTFNyBFg== +"@abp/lodash@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.5.0.tgz#92bb5dec3280c96334baf063f2d1ddebde58b031" + integrity sha512-QRvqy3XPFnodJ8+gYRLb+ArcgqTE1BfeHhfw3Tr3LiofxfS1esPDiznWKCNCcVHx+wQ8sVYzniN7dtVGWPQW4w== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" lodash "^4.17.15" -"@abp/luxon@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.4.0.tgz#a33e8d0f5f986cbd5548fd47c5b302b13365a49b" - integrity sha512-IunEAeYz6mWCYwIbE9PlBSEFZiuCKwY/SQ9HrW4/a1Dbm7PbPzX7DcZ5+QT2pMB4wvWKNvl/adXum3o15Z+zJg== +"@abp/luxon@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.5.0.tgz#f40e5e8b97765361894744e029d0b96da4e4dde3" + integrity sha512-31v+wd8xogbC0aI+5rfaE/D0cnS2kjDWcoJEg9Zsb3CDjzmvxdAhCPdoQw22oRG72NKR0bBNZ/jG5wp+vyFsbA== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.4.0.tgz#9821f642affed77b9eb887aedc50bf419df55ccf" - integrity sha512-ZB7Bo3nY/fOVLkGkSCCh8JFVqV8dvwjf3NJUowdj8X0zC6ecQ0lxIaNOcgxetdcKabK+UzywybZqit9Uo2Sk8A== +"@abp/malihu-custom-scrollbar-plugin@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.5.0.tgz#6f7e4e903419f48e93806c88c007241bdfc0a4cb" + integrity sha512-Dl10cwvTI7OTH57kYuF0JLtMn35dKimgy/Uval+8nGJTXFU3r40xUyIFIKD9WPpkCtzGxYIrWRNfMzrt1Q17Ng== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.4.0.tgz#87a97d4130e74df20f0f605c8b207603e545ca3c" - integrity sha512-gmNWRTlM0j0LHdYEBYBJsTDdw1rNMPoVgQtszSwjPBpnKl0M8SKb7lLG0j/+2MkZQY7XkGNajJkntqvRlQAAvg== +"@abp/select2@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.5.0.tgz#070d8bf4e02a18119e0980971b9d5bad12da9c5c" + integrity sha512-8H6FD7wboBrxBIWOdNtNV26L9ef/gPP53V4S7senmKrU+9WoG3etFBkwO4pqQHuQxZmTlazuSJN+38/5sAYlSQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" select2 "^4.0.12" -"@abp/sweetalert@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.4.0.tgz#37ff153fc3df184fd1e19d45e2b8bfdfcfe0e0d9" - integrity sha512-fDmS+1yCgD1uEQg4bO+l52Vhr/3ZKSp1v3VIEJk8yxek6ICMCXgW+GZT0PJ7ZLJ766sZL+m6NnWS0XR4tiPtUQ== +"@abp/sweetalert@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.5.0.tgz#120492acf0815008a96bb907e0d5e81fbca8c1d2" + integrity sha512-6nKgwDOSdCYglZYvwTO6Fl7MLBC9Wk98c4CHhJKzgsR4UssKFi9MWyBcTU7fTDj8YFqXyTJoW4HSkMr1Eu2KZQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" sweetalert "^2.1.2" -"@abp/timeago@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.4.0.tgz#78b54ec5a678fe4b3c20db4bb502d462163144a5" - integrity sha512-Dqs7JC7mc+O08aEkp/+8qlBoMA5IqK09sPRN94j5jtRiOFFAq5q6wU8p9s1yxf50nr+6WHF2epIT85ZBNaWgdg== +"@abp/timeago@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.5.0.tgz#314a8ab1c8d6a2e2be3faee3d9eb18d26a7ded5e" + integrity sha512-J9xhJEVT8uCpSBCAa8Ssuer8WpmVrwICe/70i/YlPzW/q+dWXPvM2pmkdY22dkQOX1RKZqkqiAmFMUcl+DSyDA== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" timeago "^1.6.7" -"@abp/toastr@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.4.0.tgz#71816a45057b3b855095a9584def1c6887352727" - integrity sha512-vHztnU/l12KplH/c4HFgdj9FzZO1jTGLb+EzJQQqqQcDuLEijUOK9tUNjO8PmVM1gncjNsWL1ABvbd93oXCeXA== +"@abp/toastr@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.5.0.tgz#3f8f5fc6f6e8945f41039deeec8fbbdadd9f4617" + integrity sha512-pFPiDlZAAxPnMv5LPBEp2DpTSoGP4PE7L+9HS78EK28jqHYcfQvkswPeDmKNkMLTcI4+9CJ+geZWf9p6cnwxcw== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2": diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index f347cfecce..c9099b2aed 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.basic": "^2.5.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock index d579b2fc43..bb5aefb3b8 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.4.0.tgz#dca466220b690cb1a87c63694b007775c7001bba" - integrity sha512-SMH9zc3JIHNFbmvFbaH6RCJ2SXtTswyzaopz3td9jFZJLx9rhmVJyyLQhONRU+9k5vlXbW5yDNjMnbFzJY/gqw== +"@abp/aspnetcore.mvc.ui.theme.basic@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-2.5.0.tgz#edfc51a5acac3a25747efc7c8664d025f81aef97" + integrity sha512-us2ARkEpmwhMwbCeVukYJvkiweQi4AF/C7YPgDLZGdioaeERJEh2UP0wsiPveh0RokcThIh3Egz6Xp/w8He3wQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "^2.4.0" + "@abp/aspnetcore.mvc.ui.theme.shared" "^2.5.0" -"@abp/aspnetcore.mvc.ui.theme.shared@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.4.0.tgz#126b46f60c8ff26bd0e5e932f5d14aec11180f2c" - integrity sha512-p3qaSpZLabqVdcuanPYuT14G58ScXkzcUcl0rB4RxeN9hFSYMmlOQim6+Aawzn/OkUNrWO2NowsCg8E6KGVncQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "^2.4.0" - "@abp/bootstrap" "^2.4.0" - "@abp/bootstrap-datepicker" "^2.4.0" - "@abp/datatables.net-bs4" "^2.4.0" - "@abp/font-awesome" "^2.4.0" - "@abp/jquery-form" "^2.4.0" - "@abp/jquery-validation-unobtrusive" "^2.4.0" - "@abp/lodash" "^2.4.0" - "@abp/luxon" "^2.4.0" - "@abp/malihu-custom-scrollbar-plugin" "^2.4.0" - "@abp/select2" "^2.4.0" - "@abp/sweetalert" "^2.4.0" - "@abp/timeago" "^2.4.0" - "@abp/toastr" "^2.4.0" - -"@abp/aspnetcore.mvc.ui@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.4.0.tgz#3c35b48019ee2e735bd8e1f761ff5e5e040bf3c7" - integrity sha512-pVS4lSjbLEUyuyZCasaSRO3KRb+eJ9/U2tz52bm2DJSbm7PQVipq1Ru+R2KuEz7rQ/BPULXwK9ehggQwvRWRww== +"@abp/aspnetcore.mvc.ui.theme.shared@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-2.5.0.tgz#e023443211de5d2ce50d38bb8ae7612cb303157e" + integrity sha512-8AFCucSBgFzGX5NtCpB8MaZnGgfY1/XLMjnfdQSv+DF2ZW6Ld0d3qY/evfimy8raFU8W8AtaTS510rEUsgkmog== + dependencies: + "@abp/aspnetcore.mvc.ui" "^2.5.0" + "@abp/bootstrap" "^2.5.0" + "@abp/bootstrap-datepicker" "^2.5.0" + "@abp/datatables.net-bs4" "^2.5.0" + "@abp/font-awesome" "^2.5.0" + "@abp/jquery-form" "^2.5.0" + "@abp/jquery-validation-unobtrusive" "^2.5.0" + "@abp/lodash" "^2.5.0" + "@abp/luxon" "^2.5.0" + "@abp/malihu-custom-scrollbar-plugin" "^2.5.0" + "@abp/select2" "^2.5.0" + "@abp/sweetalert" "^2.5.0" + "@abp/timeago" "^2.5.0" + "@abp/toastr" "^2.5.0" + +"@abp/aspnetcore.mvc.ui@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-2.5.0.tgz#03bb105bfd6cce0730f109cfe188ad83ad3839ce" + integrity sha512-gyXHGFkSzPFaAx8QSwmlKlaoQtuLfe7OqLZcQZZco6wtyonn1qsI86sgFAxJx0bDf5FZDZGEHRgPqgWHc7Txlw== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,135 +41,135 @@ path "^0.12.7" rimraf "^3.0.0" -"@abp/bootstrap-datepicker@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.4.0.tgz#b40b61065635b66a7b1ef60a7d07bde7917b2a58" - integrity sha512-88RtPk0U6XlpsL8GxlQ056fgUDMQ3+w4SZncHyYjL2uYBU0q5/Swkhm4oF4KxxHQ4nwxhD98UCwkB9gj6H4gZw== +"@abp/bootstrap-datepicker@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-2.5.0.tgz#f30a7430b25d8d467b3e1f3c6f1a82ffb4fde28c" + integrity sha512-2ivTurvVcSj35i+s66g9xrUFd+3TZ6Y7qiCSZWpYKc1LvavveM/t10/t9pcmgcsmUngH2adFzpeeZ1psweYtIw== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.4.0.tgz#e0321834ea2ac5d3a1185e203cf9a01351c0d6e6" - integrity sha512-LRPR2vumMAMg3CZ2vpcrFYzXySLX8qsCQKA5THyw6LyrhVonmif5b6QgChFxJozUZB4vMQSeN/Zl6UDpGNa1RA== +"@abp/bootstrap@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-2.5.0.tgz#e034698e613bae16b8469cca579215378af65f54" + integrity sha512-2Y4p3a0HeHnU+h5wMtk6sSvPqOqulzBZ1p96/+21Y+oIEhlYk33d63wUmXbhzalX6Grcp5DYGMYlHyMDEd55wQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" bootstrap "^4.3.1" -"@abp/core@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.4.0.tgz#0a8fd49ce85844bc0430ac4aaf7f1a025695c560" - integrity sha512-lmgM9Yk/u22/suuNMSH+pIt0G4oxZ26+SGM3lC0vIxXUl52pacOuXwL5zxKQrcRsdchvWjhRZkO4mHg8NBB8Ow== +"@abp/core@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.5.0.tgz#6eba2680716834b57fc7c5228d767aa9b0a379be" + integrity sha512-VLGSdW9/QpqrrzuWMZas7NZh202wC2Px+mw89BRHJGcPSHdZRWhxwTG1pjl1h7qE9aVFMrm8iZ639Jk+K1o9eQ== -"@abp/datatables.net-bs4@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.4.0.tgz#c280afc0a30ceb1eabced7d813bc4a4840973152" - integrity sha512-9A5k3+3pt3T7160QAUo+Qa/EK1eRI5AFeXoV0Bo2x0jzEmMUriYoGIZva12vjc9kIcgk99WSeNUwKVnT3cJ8iA== +"@abp/datatables.net-bs4@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.5.0.tgz#6f9bc14f27ed5ba21654d9eef2cbd0d88dbff74b" + integrity sha512-f/t+VKfLWYFXOkQNIEXLsH9HlnHYnC24nivjGKHcG1Kznj1/4gMZXEyStT5yiNo/a75G0PoMicxBsyDrOndwhg== dependencies: - "@abp/datatables.net" "^2.4.0" + "@abp/datatables.net" "^2.5.0" datatables.net-bs4 "^1.10.20" -"@abp/datatables.net@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.4.0.tgz#09a9085b8d3292415c8464bcad3e5bed829e731e" - integrity sha512-4xmfSk0C2hRYyK7KZsF7TS5OuMq4vm+rtpG8vmEyVsZOlUDUaZF0nwDvesx4WMDRgsxt5Iw67XlAP1JctpWs0g== +"@abp/datatables.net@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-2.5.0.tgz#d9c52ed048fff9f92a938fa23a1fe93dcc2265e2" + integrity sha512-ntKt69oZOqdO2O9hSbgtmiU0TbWu1U3lwCNy1kYbj0qAqdBBukZ1dg4k1JBrLRAbp3u9+v0+zP97EjziNTrHxA== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" datatables.net "^1.10.20" -"@abp/font-awesome@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.4.0.tgz#cf67cc5fd19a0c8cb29dac58636cdb84ec3d9bb2" - integrity sha512-HVTW5hzj9HXMGBNlPh2CElvur2qFCg57+wjgx3Q8m01yiIMDpgvLd9s6xSeLu0YhhQweBF1G3IV1aXZ40W5bbg== +"@abp/font-awesome@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-2.5.0.tgz#99facfdd571a4089442da6ef5b142c4d9d110db1" + integrity sha512-tKlFxArLJGX9AzV8IzdnyVh4Feh+yoQa7PN3dAnlcLbNMX5kjhvVju4zBjaKaO6DBxWrT8BmKW0EOJNfIcksmw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" "@fortawesome/fontawesome-free" "^5.11.2" -"@abp/jquery-form@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.4.0.tgz#d5dac3d4f953bd5d9ec8cf54c7f723085b953b48" - integrity sha512-msbNH320c4trZVcdOD+2GUOdsaV4kKEA5cjK43XLjCtzb6cKZWXCt8cFfJu8z8fTuX6C8EbmAg1j5BDEumsa8A== +"@abp/jquery-form@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-2.5.0.tgz#75ae14a29f949e510c301a650923a4acef2b6b94" + integrity sha512-A9Oi6shfr1w309sFnfmxjOlFMqVe7udtXitSP9PrYi/hovAsKLb5niIFnvo7DlklM0+VLIsZ5WFf2Y8zAGzX7w== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-form "^4.2.2" -"@abp/jquery-validation-unobtrusive@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.4.0.tgz#c2a2d0ce72d2b6af42af088a14775d80a4c334a1" - integrity sha512-E1TWBeTUStgS4hiQtIkjvkBrt1n737HoxN+w35jXjTbugXYRVgnjU6hoLR1n64FuUpHJ8jVBd64e5JwNjYEKkg== +"@abp/jquery-validation-unobtrusive@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-2.5.0.tgz#86a3a6c344d32e8f7583f376b9b6fdcbb9472777" + integrity sha512-eMPrb3W0AMWkU982abUA0zdu8fUErI4cDaYkDaEggxK0YfUK/EkR914+TWVFkHCPgm5PK+uEpfmWKYiCu7Ie4A== dependencies: - "@abp/jquery-validation" "^2.4.0" + "@abp/jquery-validation" "^2.5.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.4.0.tgz#e31ebc36e5c22405bccc8602beb007d4a3cd1303" - integrity sha512-pzpvGenz4CffdPQOXFL6wFUWMbzEw1KrjhpMogEn9GeIDf8bFFeyihlynGpwA/m3TR8JHqewf3/Aq2nhOxlQLg== +"@abp/jquery-validation@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-2.5.0.tgz#b62d309c65ac2e5607ecb112be21370b87dbb702" + integrity sha512-U8fXDHEQOLw7fZSvDTcLICnddsJ6xDeDprwsrAHnQoY7xLb+9eyY//7fgPhdusM/GSw4x5Lm4sSNkUOkRdnHnQ== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" jquery-validation "^1.19.1" -"@abp/jquery@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.4.0.tgz#6f3880490c77ff66643b962c63758ecdb2a41d9b" - integrity sha512-nAWbFd/vs+Zy2VQcscInG0hExujNQ+1XQEpY22rhqGAd2OY4ojhuY/df85zdiqbeqbgN06AywiFWaLi2Ue3h0g== +"@abp/jquery@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-2.5.0.tgz#61569e2cc9f28e03cbbaaa3c19896fa39e08f71e" + integrity sha512-9RyHZoOo+c3vjHUnSp/vGUfac2N2hRYyIcjEksiaaIJwRfBZZ3AhULgPkWKhQ5dXeGKllb+U1NnU7GisIPsPlw== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" jquery "^3.4.1" -"@abp/lodash@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.4.0.tgz#8bc232d1c28bd1fe083d7e104875dba11162bb21" - integrity sha512-NAGv1b6W3pakyGvnVgu6WG2nJsHUVrcZOxTLBCbmUsaSBFXeyZuot3priDS1ZYZf+61r/gKBZ9UgcuhTFNyBFg== +"@abp/lodash@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-2.5.0.tgz#92bb5dec3280c96334baf063f2d1ddebde58b031" + integrity sha512-QRvqy3XPFnodJ8+gYRLb+ArcgqTE1BfeHhfw3Tr3LiofxfS1esPDiznWKCNCcVHx+wQ8sVYzniN7dtVGWPQW4w== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" lodash "^4.17.15" -"@abp/luxon@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.4.0.tgz#a33e8d0f5f986cbd5548fd47c5b302b13365a49b" - integrity sha512-IunEAeYz6mWCYwIbE9PlBSEFZiuCKwY/SQ9HrW4/a1Dbm7PbPzX7DcZ5+QT2pMB4wvWKNvl/adXum3o15Z+zJg== +"@abp/luxon@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-2.5.0.tgz#f40e5e8b97765361894744e029d0b96da4e4dde3" + integrity sha512-31v+wd8xogbC0aI+5rfaE/D0cnS2kjDWcoJEg9Zsb3CDjzmvxdAhCPdoQw22oRG72NKR0bBNZ/jG5wp+vyFsbA== dependencies: luxon "^1.21.3" -"@abp/malihu-custom-scrollbar-plugin@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.4.0.tgz#9821f642affed77b9eb887aedc50bf419df55ccf" - integrity sha512-ZB7Bo3nY/fOVLkGkSCCh8JFVqV8dvwjf3NJUowdj8X0zC6ecQ0lxIaNOcgxetdcKabK+UzywybZqit9Uo2Sk8A== +"@abp/malihu-custom-scrollbar-plugin@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-2.5.0.tgz#6f7e4e903419f48e93806c88c007241bdfc0a4cb" + integrity sha512-Dl10cwvTI7OTH57kYuF0JLtMn35dKimgy/Uval+8nGJTXFU3r40xUyIFIKD9WPpkCtzGxYIrWRNfMzrt1Q17Ng== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.4.0.tgz#87a97d4130e74df20f0f605c8b207603e545ca3c" - integrity sha512-gmNWRTlM0j0LHdYEBYBJsTDdw1rNMPoVgQtszSwjPBpnKl0M8SKb7lLG0j/+2MkZQY7XkGNajJkntqvRlQAAvg== +"@abp/select2@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-2.5.0.tgz#070d8bf4e02a18119e0980971b9d5bad12da9c5c" + integrity sha512-8H6FD7wboBrxBIWOdNtNV26L9ef/gPP53V4S7senmKrU+9WoG3etFBkwO4pqQHuQxZmTlazuSJN+38/5sAYlSQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" select2 "^4.0.12" -"@abp/sweetalert@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.4.0.tgz#37ff153fc3df184fd1e19d45e2b8bfdfcfe0e0d9" - integrity sha512-fDmS+1yCgD1uEQg4bO+l52Vhr/3ZKSp1v3VIEJk8yxek6ICMCXgW+GZT0PJ7ZLJ766sZL+m6NnWS0XR4tiPtUQ== +"@abp/sweetalert@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-2.5.0.tgz#120492acf0815008a96bb907e0d5e81fbca8c1d2" + integrity sha512-6nKgwDOSdCYglZYvwTO6Fl7MLBC9Wk98c4CHhJKzgsR4UssKFi9MWyBcTU7fTDj8YFqXyTJoW4HSkMr1Eu2KZQ== dependencies: - "@abp/core" "^2.4.0" + "@abp/core" "^2.5.0" sweetalert "^2.1.2" -"@abp/timeago@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.4.0.tgz#78b54ec5a678fe4b3c20db4bb502d462163144a5" - integrity sha512-Dqs7JC7mc+O08aEkp/+8qlBoMA5IqK09sPRN94j5jtRiOFFAq5q6wU8p9s1yxf50nr+6WHF2epIT85ZBNaWgdg== +"@abp/timeago@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-2.5.0.tgz#314a8ab1c8d6a2e2be3faee3d9eb18d26a7ded5e" + integrity sha512-J9xhJEVT8uCpSBCAa8Ssuer8WpmVrwICe/70i/YlPzW/q+dWXPvM2pmkdY22dkQOX1RKZqkqiAmFMUcl+DSyDA== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" timeago "^1.6.7" -"@abp/toastr@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.4.0.tgz#71816a45057b3b855095a9584def1c6887352727" - integrity sha512-vHztnU/l12KplH/c4HFgdj9FzZO1jTGLb+EzJQQqqQcDuLEijUOK9tUNjO8PmVM1gncjNsWL1ABvbd93oXCeXA== +"@abp/toastr@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-2.5.0.tgz#3f8f5fc6f6e8945f41039deeec8fbbdadd9f4617" + integrity sha512-pFPiDlZAAxPnMv5LPBEp2DpTSoGP4PE7L+9HS78EK28jqHYcfQvkswPeDmKNkMLTcI4+9CJ+geZWf9p6cnwxcw== dependencies: - "@abp/jquery" "^2.4.0" + "@abp/jquery" "^2.5.0" toastr "^2.1.4" "@fortawesome/fontawesome-free@^5.11.2":