diff --git a/.github/workflows/angular.yml b/.github/workflows/angular.yml
index ee66fbcf2c..cd48c0448a 100644
--- a/.github/workflows/angular.yml
+++ b/.github/workflows/angular.yml
@@ -27,12 +27,12 @@ jobs:
with:
fetch-depth: 0
- - uses: actions/cache@v2
+ - uses: actions/cache@v4
with:
path: 'npm/ng-packs/node_modules'
key: ${{ runner.os }}-${{ hashFiles('npm/ng-packs/yarn.lock') }}
- - uses: actions/cache@v2
+ - uses: actions/cache@v4
with:
path: 'templates/app/angular/node_modules'
key: ${{ runner.os }}-${{ hashFiles('templates/app/angular/yarn.lock') }}
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 06c6333a76..39cdffbe87 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -44,8 +44,8 @@
-
-
+
+
@@ -119,7 +119,7 @@
-
+
@@ -177,7 +177,7 @@
-
+
diff --git a/common.props b/common.props
index 2f9866e26a..1e35c43bae 100644
--- a/common.props
+++ b/common.props
@@ -1,8 +1,8 @@
latest
- 9.2.0-rc.1
- 4.2.0-rc.1
+ 9.2.0-rc.2
+ 4.2.0-rc.2
$(NoWarn);CS1591;CS0436
https://abp.io/assets/abp_nupkg.png
https://abp.io/
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list-utc1.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list-utc1.png
new file mode 100644
index 0000000000..9adbd41062
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list-utc1.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list-utc3.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list-utc3.png
new file mode 100644
index 0000000000..51256b2d62
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list-utc3.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list.png
new file mode 100644
index 0000000000..cc0a92b591
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/auth-list.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/berlin.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/berlin.png
new file mode 100644
index 0000000000..07715caabd
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/berlin.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-create.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-create.png
new file mode 100644
index 0000000000..5385c14167
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-create.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-edit.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-edit.png
new file mode 100644
index 0000000000..95c0357171
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-edit.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-list.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-list.png
new file mode 100644
index 0000000000..181983492c
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/blazor-list.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-create.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-create.png
new file mode 100644
index 0000000000..827e8911d7
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-create.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-edit.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-edit.png
new file mode 100644
index 0000000000..a3cc8a6a0c
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-edit.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list-utc1.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list-utc1.png
new file mode 100644
index 0000000000..9904c56df5
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list-utc1.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list-utc3.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list-utc3.png
new file mode 100644
index 0000000000..7d472296fb
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list-utc3.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list.png
new file mode 100644
index 0000000000..282f288855
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-list.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-post.png b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-post.png
new file mode 100644
index 0000000000..35bff4aded
Binary files /dev/null and b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/mvc-post.png differ
diff --git a/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/post.md b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/post.md
new file mode 100644
index 0000000000..bfde4d5318
--- /dev/null
+++ b/docs/en/Community-Articles/2025-03-11-Developing-A-Multi-Timezone-Application-Using-The-ABP-Framework/post.md
@@ -0,0 +1,779 @@
+# Developing a Multi-Timezone Application Using the ABP Framework
+
+When developing multi-timezone applications, we need to handle users from different time zones and make sure they see the correct time. The system also needs to support users changing their timezone (like when traveling or moving) and make sure all time displays update correctly to show accurate time information.
+
+All these scenarios require us to handle timezone conversions correctly in our application. The ABP framework provides a complete solution for these challenges.
+
+In this article, we'll show you step by step how to handle multi-timezone in the ABP framework.
+
+## Timezone Settings
+
+The ABP framework provides a setting called `Abp.Timing.TimeZone` for setting and getting the timezone of users, tenants, or applications. The default value is empty, which means the application will use the server's time zone. Check out the [Timing documentation](https://abp.io/docs/latest/framework/infrastructure/timing) for more information.
+
+## ISO 8601 Date Time Format
+
+Different countries and regions may use different time formats:
+
+* Year-Month-Day (YYYY-MM-DD): Mainly used in China, Japan, Korea, Canada (official standard), Germany (ISO standard), ISO 8601 international standard, etc. Example: 2025-03-11
+* Day-Month-Year (DD-MM-YYYY): Mainly used in UK, India, Australia, New Zealand, most European countries (like France, Germany, Italy, Spain), some South American countries, etc. Example: 11-03-2025 or 11/03/2025
+* Month-Day-Year (MM-DD-YYYY): Mainly used in USA, Philippines, some parts of Canada, etc. Example: 03-11-2025 or 03/11/2025
+* Day.Month.Year (DD.MM.YYYY): Mainly used in Germany, Russia, Switzerland, Hungary, Czech Republic, etc. Example: 11.03.2025
+
+Also, different countries/regions might use different separators (like slash /, hyphen -, dot .), and some countries use different month abbreviations or full names (like March 11, 2025).
+
+ISO 8601 uses a standard format to avoid confusion between different date formats and ensure global compatibility.
+
+It has 4 parts:
+
+* Date part: `YYYY-MM-DD`
+* `T` as a separator
+* Time part: `HH:MM:SS`
+* Timezone part: `Z` or `+/-HH:MM`
+
+You'll usually see formats like: `YYYY-MM-DDTHH:MM:SSZ` or `YYYY-MM-DDTHH:MM:SS+/-HH:MM`, for example: `2025-03-11T10:30:00Z` or `2025-03-11T22:30:00+03:00`
+
+When our application needs to handle multiple timezones, we usually use ISO 8601 to represent time.
+
+## Enabling Multi-Timezone Support
+
+When we set the `Kind` of `AbpClockOptions` to `DateTimeKind.Utc`, the ABP framework will normalize all times. Times written to the database and returned to the frontend will be in `UTC`. the `SupportsMultipleTimezone` property will be `true` in the `IClock` service.
+
+```csharp
+Configure(options =>
+{
+ options.Kind = DateTimeKind.Utc;
+});
+```
+
+### Using DateTime to Store Time
+
+Assuming the `DateTime` stored in the database is `2025-03-01 10:30:00`, then the time returned to the front end will be `2025-03-01T10:30:00Z`. This is a time in ISO 8601 format. Because `DateTime` does not have timezone information, the framework will assume it is `UTC` time.
+
+### Using DateTimeOffset to Store Time
+
+If you use `DateTimeOffset` to store time, the ABP framework will not normalize `DateTimeOffset`, but will return it directly to the front end.
+
+Assuming the `DateTimeOffset` stored in the database is `2025-03-01 13:30:00 +03:00`, then the time returned to the front end will be `2025-03-01T13:30:00+03:00`. This is also a time in ISO 8601 format.
+
+We recommend using `DateTimeOffset` to store time because it has timezone information.
+
+## Timezone Conversion
+
+### Converting UTC Time to User Time
+
+The `IClock` service has 2 methods to convert a given `UTC` time to the user time:
+
+```csharp
+DateTime ConvertToUserTime(utcDateTime dateTime)
+DateTimeOffset ConvertToUserTime(DateTimeOffset dateTimeOffset)
+```
+
+> If `SupportsMultipleTimezone` is `false` or `dateTime.Kind` is not `Utc` or no timezone is set, it will return the given `DateTime` or `DateTimeOffset` without any changes.
+
+**Example:**
+
+If the user's timezone is `Europe/Istanbul`
+
+```csharp
+// 2025-03-01T05:30:00Z
+var utcTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc);
+
+var userTime = Clock.ConvertToUserTime(utcTime);
+
+// Europe/Istanbul has 3 hours difference with UTC. So, the result will be 3 hours later.
+userTime.Kind.ShouldBe(DateTimeKind.Unspecified);
+userTime.ToString("O").ShouldBe("2025-03-01T08:30:00");
+```
+
+```csharp
+// 2025-03-01T05:30:00Z
+var utcTime = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc), TimeSpan.Zero);
+
+var userTime = Clock.ConvertToUserTime(utcTime);
+
+// Europe/Istanbul has 3 hours difference with UTC. So, the result will be 3 hours later.
+userTime.Offset.ShouldBe(TimeSpan.FromHours(3));
+userTime.ToString("O").ShouldBe("2025-03-01T08:30:00.0000000+03:00");
+```
+
+### Converting User Time to UTC
+
+The `IClock` service has 1 method to convert a given user time to UTC.
+
+```csharp
+DateTime ConvertToUtc(DateTime dateTime)
+```
+
+> If `SupportsMultipleTimezone` is `false` or `dateTime.Kind` is `Utc` or no timezone is set, it will return the given `DateTime` without any changes.
+
+**Example:**
+
+If the user's timezone is `Europe/Istanbul`
+
+```csharp
+// 2025-03-01T05:30:00
+var userTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified); //Same as Local
+
+var utcTime = Clock.ConvertToUtc(userTime);
+
+// Europe/Istanbul has 3 hours difference with UTC. So, the result will be 3 hours earlier.
+utcTime.Kind.ShouldBe(DateTimeKind.Utc);
+utcTime.ToString("O").ShouldBe("2025-03-01T02:30:00.0000000Z");
+```
+
+## Handling Timezone in Different UIs
+
+We'll use the `TimeZoneApp` project to demonstrate handling timezone in different UIs. It has a `Meeting` entity, with several time properties.
+
+```csharp
+public class Meeting : AggregateRoot
+{
+ public string Subject { get; set; }
+
+ public DateTime StartTime { get; set; }
+
+ public DateTime EndTime { get; set; }
+
+ public DateTime ActualStartTime { get; set; }
+
+ public DateTime? CanceledTime { get; set; }
+
+ public DateTimeOffset ReminderTime { get; set; }
+
+ public DateTimeOffset? FollowUpTime { get; set; }
+
+ public string Description { get; set; }
+}
+```
+
+`TimeZoneApp` project is an ABP layered architecture project, it sets a global `Europe/Istanbul` timezone, it contains 4 websites
+
+* `API.Host`: API website, it does not have UI, it returns data in JSON format
+* `AuthServer`: Authentication server, it uses Razor Pages as UI
+* `Web`: Razor Pages website, it uses JavaScript to manage Meeting creation and editing and display
+* `Blazor`: Blazor Server website, it uses Blazor to manage Meeting creation and editing and display
+
+All 4 applications are enabled for multi-timezone support, and use the `UseAbpTimeZone` middleware.
+
+> Blazor WASM and Angular do not need to use the `UseAbpTimeZone` middleware
+
+
+### DateTime in API Response
+
+In the API response, we usually use the ISO 8601 format time, as you can see, after enabling multi-timezone support, the API returns time to the front end as UTC time.
+
+`2025-03-01T09:30:00Z` and `2025-03-01T12:30:00+00:00` are ISO 8601 format time.
+
+```json
+[
+ {
+ "subject": "ABP Developer Guide",
+ "startTime": "2025-03-01T09:30:00Z",
+ "endTime": "2025-03-01T10:30:00Z",
+ "actualStartTime": "2025-03-01T11:30:00Z",
+ "canceledTime": null,
+ "reminderTime": "2025-03-01T12:30:00+00:00",
+ "followUpTime": "2025-03-01T13:30:00+00:00",
+ "description": "We will discuss the ABP developer guide.",
+ "id": "2af0abd3-be06-ecff-5d4c-3a1895ac7950"
+ },
+ {
+ "subject": "ABP Training",
+ "startTime": "2025-03-01T09:30:00Z",
+ "endTime": "2025-03-01T10:30:00Z",
+ "actualStartTime": "2025-03-01T11:30:00Z",
+ "canceledTime": "2025-03-01T12:00:00Z",
+ "reminderTime": "2025-03-01T12:30:00+00:00",
+ "followUpTime": "2025-03-01T13:30:00+00:00",
+ "description": "ABP training for the new developers.",
+ "id": "290b0cb6-3e50-6324-1e79-3a1895ac795f"
+ }
+]
+```
+
+### Handling Timezone in MVC/Razor Pages
+
+In the `AuthServer` project, we handle time conversion in a simple way:
+1. First, we get the `Meeting` entities from the database using `IRepository`. At this point, all `DateTime` values are in UTC.
+2. Then, when displaying the times in the view, we use `Clock.ConvertToUserTime` to show them in the user's timezone.
+
+> Note: The `ConvertToUserTime` method will only convert times if multi-timezone support is enabled in the application.
+
+```csharp
+public class IndexModel : AbpPageModel
+{
+ public List? Meetings { get; set; }
+
+ protected IRepository MeetingRepository { get; }
+
+ public IndexModel(IRepository meetingRepository)
+ {
+ MeetingRepository = meetingRepository;
+ }
+
+ public async Task OnGetAsync()
+ {
+ Meetings = await MeetingRepository.GetListAsync();
+ }
+}
+```
+
+```html
+
+
+
+
+
+
+ @L["Subject"]
+ @L["StartTime"] / @L["EndTime"]
+ @L["ActualStartTime"]
+ @L["CanceledTime"]
+ @L["ReminderTime"]
+ @L["FollowUpTime"]
+ @L["Description"]
+
+
+
+ @foreach (var meeting in Model.Meetings)
+ {
+
+ @meeting.Subject
+ @Clock.ConvertToUserTime(meeting.StartTime) ➡️ @Clock.ConvertToUserTime(meeting.EndTime)
+ @Clock.ConvertToUserTime(meeting.ActualStartTime)
+ @(meeting.CanceledTime.HasValue ? Clock.ConvertToUserTime(meeting.CanceledTime.Value) : "N/A")
+ @Clock.ConvertToUserTime(meeting.ReminderTime).DateTime
+ @(meeting.FollowUpTime.HasValue ? Clock.ConvertToUserTime(meeting.FollowUpTime.Value).DateTime : "N/A")
+ @meeting.Description
+
+ }
+
+
+
+
+
+```
+
+
+
+### Handling Timezone in JavaScript
+
+In the `Web` project, we use JavaScript to handle timezone.
+
+#### Displaying Time in UI
+
+* `timeZoneApp.meetings.meeting.getList` gets all `Meeting` entities and displays them in `DataTables`
+* `abp.clock.normalizeToLocaleString()` is the ABP JavaScript API, it converts `UTC` time to the current user's timezone, and then calls its `toLocaleString` method to format time
+* `dataFormat: "datetime"` is the ABP DataTable extension method, it calls the `abp.clock.normalizeToLocaleString` method to convert and format time
+
+> If the current application is not enabled for multi-timezone support, then the `abp.clock.normalizeToLocaleString` method will not convert the time, it will just call the `Date` object's `toLocaleString` method.
+
+```js
+var dataTable = $('#MeetingsTable').DataTable(
+ abp.libs.datatables.normalizeConfiguration({
+ serverSide: true,
+ paging: true,
+ order: [[1, "asc"]],
+ searching: false,
+ scrollX: true,
+ ajax: abp.libs.datatables.createAjax(timeZoneApp.meetings.meeting.getList),
+ columnDefs: [
+ {
+ title: l('Actions'),
+ rowAction: {
+ items:
+ [
+ {
+ text: l('Edit'),
+ visible: abp.auth.isGranted('TimeZoneApp.Meetings.Edit'),
+ action: function (data) {
+ editModal.open({ id: data.record.id });
+ },
+ },
+ {
+ text: l('Delete'),
+ visible: abp.auth.isGranted('TimeZoneApp.Meetings.Delete'),
+ confirmMessage: function (data) {
+ return l('MeetingDeletionConfirmationMessage', data.record.subject);
+ },
+ action: function (data) {
+ timeZoneApp.meetings.meeting
+ .delete(data.record.id)
+ .then(function() {
+ abp.notify.info(l('SuccessfullyDeleted'));
+ dataTable.ajax.reload();
+ });
+ }
+ }
+ ]
+ }
+ },
+ {
+ title: l('Subject'),
+ data: "subject"
+ },
+ {
+ title: l('StartTime') + ' / ' + l('StartTime'),
+ data: "startTime",
+ render: function (data, type, row) {
+ return abp.clock.normalizeToLocaleString(row.startTime) + ' ➡️ ' + abp.clock.normalizeToLocaleString(row.endTime);
+ }
+ },
+ {
+ title: l('ActualStartTime'),
+ data: "actualStartTime",
+ dataFormat: "datetime"
+ },
+ {
+ title: l('CanceledTime'),
+ data: "canceledTime",
+ render: function (data, type, row) {
+ return data ? abp.clock.normalizeToLocaleString(data) : 'N/A';
+ }
+ },
+ {
+ title: l('ReminderTime'),
+ data: "reminderTime",
+ dataFormat: "datetime"
+ },
+ {
+ title: l('FollowUpTime'),
+ data: "followUpTime",
+ render: function (data, type, row) {
+ return data ? abp.clock.normalizeToLocaleString(data) : 'N/A';
+ }
+ },
+ {
+ title: l('Description'),
+ data: "description"
+ }
+ ]
+ })
+);
+```
+
+Below is the screenshot of `DataTables`:
+
+
+
+
+#### Creating and Editing Meeting
+
+We use `JavaScript` to create and edit `Meeting`.
+
+ABP's [TagHelper](https://abp.io/docs/latest/framework/ui/mvc-razor-pages/tag-helpers) can automatically create forms based on the model, it will generate corresponding HTML tags based on the attributes in the model. For `DateTime` and `DateTimeOffset` attributes, it will generate and initialize a [DateTimePicker](https://www.daterangepicker.com/) component.
+
+**CreateModal** and **EditModal** :
+
+```html
+
+
+
+
+
+
+
+
+
+```
+
+```html
+
+
+
+
+
+
+
+
+
+
+```
+
+You can see that the time in the control has been converted to the current user's timezone.
+
+
+
+
+
+When we submit the form, we need to convert the time to `UTC`. In the `JavaScript` of the `Create` and `Edit` pages, we use the `handleDatepicker` this `jQuery` extension method to handle time in the form, it internally gets the user's local time from the selector `input[type="hidden"][data-hidden-datepicker]`, and then uses the `abp.clock.normalizeToString` method to convert the date field in the form to the `ISO 8601` format `UTC` time string.
+
+> If the current application is not enabled for multi-timezone support, then the `abp.clock.normalizeToString` method will not convert the time, it will just convert to the ISO 8601 format time string without timezone.
+
+```js
+var abp = abp || {};
+$(function () {
+ abp.modals.meetingCreate = function () {
+ var initModal = function (publicApi, args) {
+ var $form = publicApi.getForm();
+ $form.find('button[type="submit"]').on('click', function (e) {
+ $form.handleDatepicker('input[type="hidden"][data-hidden-datepicker]');
+ });
+ };
+
+ return {
+ initModal: initModal
+ }
+ };
+});
+```
+
+The requested data is as follows:
+
+```csharp
+Request URL: Meetings/EditModal
+Request Method: POST
+Payload:
+ Id: 0803780b-3762-2af8-1c75-3a1895d59c89
+ Meeting.Subject: ABP Developer Guide
+ Meeting.StartTime: 2025-03-01T09:30:00.000Z
+ Meeting.EndTime: 2025-03-01T10:30:00.000Z
+ Meeting.ActualStartTime: 2025-03-01T11:30:00.000Z
+ Meeting.CanceledTime:
+ Meeting.ReminderTime: 2025-03-01T12:30:00.000Z
+ Meeting.FollowUpTime: 2025-03-01T13:30:00.000Z
+ Meeting.Description: We will discuss the ABP developer guide.
+```
+
+
+
+In short, we use the `abp.clock.normalizeToLocaleString` method to display time, and use the `abp.clock.normalizeToString` method to modify the time to be submitted. If you submit data via `ajax`, please remember to use the `abp.clock.normalizeToString` method to convert time.
+
+### Handling Timezone in Blazor
+
+We cannot automatically complete some work in `Blazor UI`, we need to inject `IClock` and use the `ConvertToUserTime` and `ConvertToUtc` methods to display and create/update entities.
+
+Below is a complete `Meeting` page, please refer to the usage of `Clock` in it.
+
+```csharp
+@page "/meetings"
+@using Volo.Abp.Application.Dtos
+@using Microsoft.Extensions.Localization
+@using TimeZoneApp.Meetings
+@using TimeZoneApp.Localization
+@using TimeZoneApp.Permissions
+@using Volo.Abp.AspNetCore.Components.Web
+@inject IStringLocalizer L
+@inject AbpBlazorMessageLocalizerHelper LH
+@inherits AbpCrudPageBase
+
+
+
+
+
+ @L["Meetings"]
+
+
+ @if (HasCreatePermission)
+ {
+ @L["NewMeeting"]
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ @Clock.ConvertToUserTime(context.StartTime).ToString("yyyy-MM-dd HH:mm:ss") ➡️ @Clock.ConvertToUserTime(context.EndTime).ToString("yyyy-MM-dd HH:mm:ss")
+
+
+
+
+ @Clock.ConvertToUserTime(context.ActualStartTime).ToString("yyyy-MM-dd HH:mm:ss")
+
+
+
+
+ @(context.CanceledTime.HasValue ? Clock.ConvertToUserTime(context.CanceledTime.Value).ToString("yyyy-MM-dd HH:mm:ss") : "N/A")
+
+
+
+
+ @(Clock.ConvertToUserTime(context.ReminderTime).ToString("yyyy-MM-dd HH:mm:ss") )
+
+
+
+
+ @(context.FollowUpTime.HasValue ? Clock.ConvertToUserTime(context.FollowUpTime.Value).ToString("yyyy-MM-dd HH:mm:ss") : "N/A")
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@code {
+ IReadOnlyList SelectedDates;
+
+ public Meeting()
+ {
+ CreatePolicyName = TimeZoneAppPermissions.Meetings.Create;
+ UpdatePolicyName = TimeZoneAppPermissions.Meetings.Edit;
+ DeletePolicyName = TimeZoneAppPermissions.Meetings.Delete;
+ }
+
+ protected override async Task OpenCreateModalAsync()
+ {
+ await base.OpenCreateModalAsync();
+
+ var now = DateTime.Now;
+ SelectedDates = new List { now.Date.AddHours(10),now.Date.AddDays(7).AddHours(10) };
+ NewEntity.ActualStartTime = now.Date.AddHours(11);
+ NewEntity.CanceledTime = now.Date.AddHours(12);
+ NewEntity.ReminderTime = now.Date.AddHours(13);
+ NewEntity.FollowUpTime = now.Date.AddHours(14);
+ }
+
+ protected override Task OnCreatingEntityAsync()
+ {
+ if (SelectedDates.Count == 2 && SelectedDates[0].HasValue && SelectedDates[1].HasValue)
+ {
+ NewEntity.StartTime = Clock.ConvertToUtc(SelectedDates[0]!.Value);
+ NewEntity.EndTime = Clock.ConvertToUtc(SelectedDates[1]!.Value);
+ }
+
+ NewEntity.ActualStartTime = Clock.ConvertToUtc(NewEntity.ActualStartTime);
+ NewEntity.CanceledTime = NewEntity.CanceledTime.HasValue ? Clock.ConvertToUtc(NewEntity.CanceledTime.Value) : null;
+
+ NewEntity.ReminderTime = Clock.ConvertToUtc(NewEntity.ReminderTime.DateTime);
+ NewEntity.FollowUpTime = NewEntity.FollowUpTime.HasValue ? Clock.ConvertToUtc(NewEntity.FollowUpTime.Value.DateTime) : null;
+
+ return Task.CompletedTask;
+ }
+
+ protected override async Task OpenEditModalAsync(MeetingDto entity)
+ {
+ await base.OpenEditModalAsync(entity);
+
+ SelectedDates = new List { Clock.ConvertToUserTime(EditingEntity.StartTime), Clock.ConvertToUserTime(EditingEntity.EndTime) };
+ EditingEntity.ActualStartTime = Clock.ConvertToUserTime(EditingEntity.ActualStartTime);
+ EditingEntity.CanceledTime = EditingEntity.CanceledTime.HasValue ? Clock.ConvertToUserTime(EditingEntity.CanceledTime.Value) : null;
+ EditingEntity.ReminderTime = Clock.ConvertToUserTime(EditingEntity.ReminderTime);
+ EditingEntity.FollowUpTime = EditingEntity.FollowUpTime.HasValue ? Clock.ConvertToUserTime(EditingEntity.FollowUpTime.Value) : null;
+ }
+
+ protected override Task OnUpdatingEntityAsync()
+ {
+ if (SelectedDates.Count == 2 && SelectedDates[0].HasValue && SelectedDates[1].HasValue)
+ {
+ EditingEntity.StartTime = Clock.ConvertToUtc(SelectedDates[0]!.Value);
+ EditingEntity.EndTime = Clock.ConvertToUtc(SelectedDates[1]!.Value);
+ }
+
+ EditingEntity.ActualStartTime = Clock.ConvertToUtc(EditingEntity.ActualStartTime);
+ EditingEntity.CanceledTime = EditingEntity.CanceledTime.HasValue ? Clock.ConvertToUtc(EditingEntity.CanceledTime.Value) : null;
+
+ return Task.CompletedTask;
+ }
+}
+```
+
+
+
+
+
+
+
+## Timezone Settings Change
+
+If the timezone settings change, then all times will be converted to the new timezone. For example, if the current timezone changes from `Europe/Istanbul` to `Europe/Berlin`, then all times will be converted to the `Europe/Berlin` timezone.
+
+
+
+`Europe/Istanbul`:
+
+
+
+
+
+`Europe/Berlin`:
+
+
+
+
+
+## Browser Timezone Detection
+
+When no timezone setting is configured, ABP's MVC, Blazor, and Angular applications will automatically detect the browser's timezone during initialization. The detected timezone is then stored in either the request's Cookie or Header.
+
+This functionality is implemented by the `UseAbpTimeZone` middleware, which follows a specific order to determine the appropriate timezone:
+
+1. First, it attempts to retrieve the timezone from the application/tenant/user settings
+2. If no setting is found, it tries to get the timezone from the request information, including Cookie, Header, QueryString, and Form
+3. Finally, if no timezone information is found, it falls back to using the server's timezone as the default
+
+> The timezone information is stored using the key `__timezone`
+
+## TimeZoneApp Source Code
+
+You can download and view the [TimeZoneApp source code](https://github.com/maliming/TimeZone) for detailed implementation.
+
+## Summary
+
+Through this article, we learned how to handle timezone in different types of UIs. I hope this article is helpful to you. If you have any questions, please contact me at any time.
diff --git a/docs/en/cli/index.md b/docs/en/cli/index.md
index 38503b73be..a9caa0b6bb 100644
--- a/docs/en/cli/index.md
+++ b/docs/en/cli/index.md
@@ -342,6 +342,7 @@ Note that this command can upgrade your solution from a previous version, and al
* `--solution-name` or `-sn`: Specify the solution name. Search `*.sln` files in the directory by default.
* `--check-all`: Check the new version of each package separately. Default is `false`.
* `--version` or `-v`: Specifies the version to use for update. If not specified, latest version is used.
+* * `--leptonx-version` or `-lv`: Specifies the LeptonX version to use for update. If not specified, latest version or the version that is compatible with `--version` argument is used.
### clean
diff --git a/docs/en/framework/architecture/microservices/index.md b/docs/en/framework/architecture/microservices/index.md
index a6e9091f2d..eb3b2ccef6 100644
--- a/docs/en/framework/architecture/microservices/index.md
+++ b/docs/en/framework/architecture/microservices/index.md
@@ -25,6 +25,8 @@ However, developing such a well-modular application can be a problem since it is
ABP can help you in that point by offering a **microservice-compatible, strict module architecture** where your module is split into multiple layers/projects and developed in its own VS solution completely isolated and independent from other modules. Such a developed module is a natural microservice yet it can be easily plugged-in a monolithic application. See the [module development best practice guide](../best-practices) that offers a **microservice-first module design**. All [standard ABP modules](https://github.com/abpframework/abp/tree/master/modules) are developed based on this guide. So, you can use these modules by embedding into your monolithic solution or deploy them separately and use via remote APIs. They can share a single database or can have their own database based on your simple configuration.
-## Microservice Demo Solution: eShopOnAbp
+## Microservice Solution Template
-The [eShopOnAbp project](https://github.com/abpframework/eShopOnAbp) demonstrates a complete microservice solution based on the ABP.
+ABP provides a pre-architected and production-ready microservice solution template that includes multiple services, API gateways and applications well integrated with each other. This template helps you quickly start building distributed systems with common microservice patterns.
+
+See the [Microservice Solution Template](../../../solution-templates/microservice/index.md) documentation for details.
diff --git a/docs/en/framework/fundamentals/caching.md b/docs/en/framework/fundamentals/caching.md
index bdef675f64..c1a720b394 100644
--- a/docs/en/framework/fundamentals/caching.md
+++ b/docs/en/framework/fundamentals/caching.md
@@ -270,7 +270,7 @@ Distributed cache service provides an interesting feature. Assume that you've up
### IDistributedCacheSerializer
-`IDistributedCacheSerializer` service is used to serialize and deserialize the cache items. The default implementation is the `Utf8JsonDistributedCacheSerializer` class that uses `IJsonSerializer` service to convert objects to [JSON](../../json-serialization.md) and vice verse. Then it uses UTC8 encoding to convert the JSON string to a byte array which is accepted by the distributed cache.
+`IDistributedCacheSerializer` service is used to serialize and deserialize the cache items. The default implementation is the `Utf8JsonDistributedCacheSerializer` class that uses `IJsonSerializer` service to convert objects to [JSON](../../json-serialization.md) and vice verse. Then it uses UTF8 encoding to convert the JSON string to a byte array which is accepted by the distributed cache.
You can [replace](./dependency-injection.md) this service with your own implementation if you want to implement your own serialization logic.
diff --git a/docs/en/framework/infrastructure/event-bus/distributed/index.md b/docs/en/framework/infrastructure/event-bus/distributed/index.md
index 9ed2121057..d56215fa12 100644
--- a/docs/en/framework/infrastructure/event-bus/distributed/index.md
+++ b/docs/en/framework/infrastructure/event-bus/distributed/index.md
@@ -297,10 +297,14 @@ Configure(options =>
options.AutoEventSelectors.Add(
type => type.Namespace.StartsWith("MyProject.")
);
+
+ //Ignore for a single entity
+ options.IgnoredEventSelectors.Add();
});
````
-* The last one provides flexibility to decide if the events should be published for the given entity type. Returns `true` to accept a `Type`.
+* The `type.Namespace.StartsWith("MyProject.")` provides flexibility to decide if the events should be published for the given entity type. Returns `true` to accept a `Type`.
+* The `IgnoredEventSelectors` is used to ignore the events for the specified entity types. It is useful if you enabled for all entities and want to ignore for some entities.
You can add more than one selector. If one of the selectors match for an entity type, then it is selected.
diff --git a/docs/en/framework/infrastructure/settings.md b/docs/en/framework/infrastructure/settings.md
index ef164e939b..f3784b1616 100644
--- a/docs/en/framework/infrastructure/settings.md
+++ b/docs/en/framework/infrastructure/settings.md
@@ -24,6 +24,8 @@ public class EmailSettingProvider : SettingDefinitionProvider
}
````
+> If you're developing a [DDD module](../architecture/domain-driven-design), you usually create this class in the `Domain` layer, of course, that's not mandatory.
+
ABP automatically discovers this class and registers the setting definitions.
### SettingDefinition
diff --git a/docs/en/framework/infrastructure/timing.md b/docs/en/framework/infrastructure/timing.md
index 7ddf1b730a..9f104b6336 100644
--- a/docs/en/framework/infrastructure/timing.md
+++ b/docs/en/framework/infrastructure/timing.md
@@ -8,11 +8,11 @@ ABP provides a basic infrastructure to make it easy and handle automatically whe
## IClock
-`DateTime.Now` returns a `DateTime` object with the **local date & time of the server**. A `DateTime` object **doesn't store the time zone information**. So, you can not know the **absolute date & time** stored in this object. You can only make **assumptions**, like assuming that it was created in UTC+05 time zone. The things especially gets complicated when you save this value to a database and read later, or send it to a client in a **different time zone**.
+`DateTime.Now` returns a `DateTime` object with the **local date & time of the server**. A `DateTime` object **doesn't store the time zone information**. So, you can not know the **absolute date & time** stored in this object. You can only make **assumptions**, like assuming that it was created in UTC+05 time zone. Things especially get complicated when you save this value to a database and read it later, or send it to a client in a **different time zone**.
-One solution to this problem is always use `DateTime.UtcNow` and assume all `DateTime` objects as UTC time. In this way, you can convert it to the time zone of the target client when needed.
+One solution to this problem is always using `DateTime.UtcNow` and assuming all `DateTime` objects as UTC time. In this way, you can convert it to the time zone of the target client when needed.
-`IClock` provides an abstraction while getting the current time, so you can control the kind of the date time (UTC or local) in a single point in your application.
+`IClock` provides an abstraction while getting the current time, so you can control the kind of the datetime (UTC or local) in a single point in your application.
**Example: Getting the current time**
@@ -40,14 +40,14 @@ namespace AbpDemo
}
````
-* Inject the `IClock` service when you need to get the current time. Common base classes (like ApplicationService) already injects it and provides as a base property - so, you can directly use as `Clock`.
+* Inject the `IClock` service when you need to get the current time. Common base classes (like ApplicationService) already inject it and provide it as a base property - so, you can directly use it as `Clock`.
* Use the `Now` property to get the current time.
-> Most of the times, `IClock` is the only service you need to know and use in your application.
+> Most of the time, `IClock` is the only service you need to know and use in your application.
### Clock Options
-`AbpClockOptions` is the [options](../fundamentals/options.md) class that used to set the clock kind.
+`AbpClockOptions` is the [options](../fundamentals/options.md) class that is used to set the clock kind.
**Example: Use UTC Clock**
@@ -58,13 +58,12 @@ Configure(options =>
});
````
-Write this inside the `ConfigureServices` method of your [module](../architecture/modularity/basics.md).
-
-> Default `Kind` is `Unspecified`, that actually make the Clock as it doesn't exists at all. Either make it `Utc` or `Local` if you want to get benefit of the Clock system.
+Write this inside of the `ConfigureServices` method of your [module](../architecture/modularity/basics.md).
+> The default `Kind` is `Unspecified`, which effectively disables the **Clock** functionality. Either make it `Utc` or `Local` if you want to get the benefit of the Clock system.
### DateTime Normalization
-Other important function of the `IClock` is to normalize `DateTime` objects.
+Another important function of the `IClock` is to normalize `DateTime` objects.
**Example usage:**
@@ -75,11 +74,11 @@ var normalizedDateTime = Clock.Normalize(dateTime)
`Normalize` method works as described below:
-* Converts the given `DateTime` to the UTC (by using the `DateTime.ToUniversalTime()` method) if current Clock is UTC and given `DateTime` is local.
-* Converts the given `DateTime` to the local (by using the `DateTime.ToLocalTime()` method) if current Clock is local and given `DateTime` is UTC.
+* Converts the given `DateTime` to the UTC (by using the `DateTime.ToUniversalTime()` method) if the current Clock is UTC and the given `DateTime` is local.
+* Converts the given `DateTime` to the local (by using the `DateTime.ToLocalTime()` method) if the current Clock is local and the given `DateTime` is UTC.
* Sets `Kind` of the given `DateTime` (using the `DateTime.SpecifyKind(...)` method) to the `Kind` of the current Clock if given `DateTime`'s `Kind` is `Unspecified`.
-`Normalize` method is used by the ABP when the it gets a `DateTime` that is not created by `IClock.Now` and may not be compatible with the current Clock type. Examples;
+`Normalize` method is used by the ABP when it gets a `DateTime` that is not created by `IClock.Now` and may not be compatible with the current Clock type. Examples;
* `DateTime` type binding in the ASP.NET Core MVC model binding.
* Saving data to and reading data from database via [Entity Framework Core](../data/entity-framework-core).
@@ -89,12 +88,67 @@ var normalizedDateTime = Clock.Normalize(dateTime)
`DisableDateTimeNormalization` attribute can be used to disable the normalization operation for desired classes or properties.
+### DateTime Converter Between UTC and User's Time Zone
+
+#### Convert given UTC to user's time zone.
+
+`DateTime ConvertToUserTime(DateTime utcDateTime)` and `DateTimeOffset ConvertToUserTime(DateTimeOffset dateTimeOffset)` methods convert given UTC `DateTime` or `DateTimeOffset` to the user's time zone.
+
+> If `SupportsMultipleTimezone` is `false` or `dateTime.Kind` is not `Utc` or these is no timezone setting, it returns the given `DateTime` or `DateTimeOffset` without any changes.
+
+**Example:**
+
+If user's `TimeZone Setting` is `Europe/Istanbul`
+
+````csharp
+// 2025-03-01T05:30:00Z
+var utcTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc);
+
+var userTime = Clock.ConvertToUserTime(utcTime);
+
+// Europe/Istanbul has 3 hours difference with UTC. So, the result will be 3 hours later.
+userTime.Kind.ShouldBe(DateTimeKind.Unspecified);
+userTime.ToString("O").ShouldBe("2025-03-01T08:30:00");
+````
+
+````csharp
+// 2025-03-01T05:30:00Z
+var utcTime = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc), TimeSpan.Zero);
+
+var userTime = Clock.ConvertToUserTime(utcTime);
+
+// Europe/Istanbul has 3 hours difference with UTC. So, the result will be 3 hours later.
+userTime.Offset.ShouldBe(TimeSpan.FromHours(3));
+userTime.ToString("O").ShouldBe("2025-03-01T08:30:00.0000000+03:00");
+````
+
+#### Converts given user's DateTime to UTC
+
+`DateTime ConvertToUtc(DateTime dateTime)` method convert given user's `DateTime` to UTC.
+
+> If `SupportsMultipleTimezone` is `false` or `dateTime.Kind` is `Utc` or these is no timezone setting, it returns the given `DateTime` without any changes.
+
+**Example:**
+
+If user's `TimeZone Setting` is `Europe/Istanbul`
+
+````csharp
+// 2025-03-01T05:30:00
+var userTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified); //Same as Local
+
+var utcTime = Clock.ConvertToUtc(userTime);
+
+// Europe/Istanbul has 3 hours difference with UTC. So, the result will be 3 hours earlier.
+utcTime.Kind.ShouldBe(DateTimeKind.Utc);
+utcTime.ToString("O").ShouldBe("2025-03-01T02:30:00.0000000Z");
+````
+
### Other IClock Properties
In addition to the `Now`, `IClock` service has the following properties:
* `Kind`: Returns a `DateTimeKind` for the currently used clock type (`DateTimeKind.Utc`, `DateTimeKind.Local` or `DateTimeKind.Unspecified`).
-* `SupportsMultipleTimezone`: Returns `true` if currently used clock is UTC.
+* `SupportsMultipleTimezone`: Returns `true` if the currently used clock is UTC.
## Time Zones
@@ -102,12 +156,26 @@ This section covers the ABP infrastructure related to managing time zones.
### TimeZone Setting
-ABP defines **a setting**, named `Abp.Timing.TimeZone`, that can be used to set and get the time zone for a user, [tenant](../architecture/multi-tenancy) or globally for the application. The default value is `UTC`.
+ABP defines **a setting**, named `Abp.Timing.TimeZone`, that can be used to set and get the time zone for a user, [tenant](../architecture/multi-tenancy) or globally for the application. The default value is empty, which means the application will use the server's time zone.
+
+You can change your host/tenant global time zone in the [Settings Management UI](../../modules/setting-management#setting-management-ui)
+
+The [Account Pro Module](../../modules/account-pro#Time-Zone-Setting) supports user to set their own time zone in the account settings page.
See the [setting documentation](../infrastructure/settings.md) to learn more about the setting system.
+### UseAbpTimeZone Middleware
+
+The `app.UseAbpTimeZone()` middleware is used to set the time zone for the current request.
+
+ * It will get timezone from settings, the order is `User` -> `Tenant` -> `Application/Global`.
+ * If current request is anonymous, it will get timezone from the request header/cookie/form/query string. the key is `__timezone`.
+
+> If you want to get current timezone, you can inject `ICurrentTimezoneProvider` service.
+> Please add this middleware after authentication.
+
### ITimezoneProvider
-`ITimezoneProvider` is a service to simple convert [Windows Time Zone Id](https://support.microsoft.com/en-us/help/973627/microsoft-time-zone-index-values) values to [Iana Time Zone Name](https://www.iana.org/time-zones) values and vice verse. It also provides methods to get list of these time zones and get a `TimeZoneInfo` with a given name.
+`ITimezoneProvider` is a service to simply convert [Windows Time Zone Id](https://support.microsoft.com/en-us/help/973627/microsoft-time-zone-index-values) values to [Iana Time Zone Name](https://www.iana.org/time-zones) values and vice verse. It also provides methods to get the list of these time zones and get a `TimeZoneInfo` with a given name.
It has been implemented using the [TimeZoneConverter](https://github.com/mj1856/TimeZoneConverter) library.
diff --git a/docs/en/images/account-pro-time-zone-setting.png b/docs/en/images/account-pro-time-zone-setting.png
new file mode 100644
index 0000000000..687ad7db70
Binary files /dev/null and b/docs/en/images/account-pro-time-zone-setting.png differ
diff --git a/docs/en/images/setting-management-email-ui.png b/docs/en/images/setting-management-email-ui.png
index ab26a1d180..f02e8cd1c4 100644
Binary files a/docs/en/images/setting-management-email-ui.png and b/docs/en/images/setting-management-email-ui.png differ
diff --git a/docs/en/images/setting-management-feature-management-ui.png b/docs/en/images/setting-management-feature-management-ui.png
new file mode 100644
index 0000000000..b534fe830b
Binary files /dev/null and b/docs/en/images/setting-management-feature-management-ui.png differ
diff --git a/docs/en/images/setting-management-time-zone-ui.png b/docs/en/images/setting-management-time-zone-ui.png
new file mode 100644
index 0000000000..fe65256ab5
Binary files /dev/null and b/docs/en/images/setting-management-time-zone-ui.png differ
diff --git a/docs/en/modules/account-pro.md b/docs/en/modules/account-pro.md
index 4ccc8b316a..c53a6f24ec 100644
--- a/docs/en/modules/account-pro.md
+++ b/docs/en/modules/account-pro.md
@@ -273,6 +273,12 @@ Users who register via both local registration and external/social login using t

+### Time Zone Setting
+
+Users can to set their own time zone in the account settings page if application is [supports multiple timezones](../framework/infrastructure/timing.md#clock-options).
+
+
+
## Internals
### Settings
diff --git a/docs/en/modules/setting-management.md b/docs/en/modules/setting-management.md
index 32dd52f4b6..842233e8b4 100644
--- a/docs/en/modules/setting-management.md
+++ b/docs/en/modules/setting-management.md
@@ -118,12 +118,16 @@ The order of the providers are important. Providers are executed in the reverse
## Setting Management UI
-Setting Mangement module provided the email setting UI by default.
+Setting Mangement module provided the Email setting, Feature management and Timezone setting UI by default.

> You can click the Send test email button to send a test email to check your email settings.
+
+
+
+
Setting it is extensible; You can add your tabs to this page for your application settings.
### MVC UI
diff --git a/docs/en/release-info/release-notes.md b/docs/en/release-info/release-notes.md
index f0e91ec4a8..4c6bec206e 100644
--- a/docs/en/release-info/release-notes.md
+++ b/docs/en/release-info/release-notes.md
@@ -1,12 +1,27 @@
# Release Notes
-This document contains **brief release notes** for each release. Release notes only include **major features** and **visible enhancements**. They don't include all the development done in the related version. To see raw and detailed change logs for every release, please check the related milestone and [the change logs page](https://abp.io/pro-releases) (only for paid license holders).
+This document contains **brief release notes** for each release. Release notes only include **major features** and **visible enhancements**. They don't include all the development done in the related version.
-> If you want to read the release notes for each ABP Studio release, check it out from [here](../studio/release-notes.md).
+Also see the following notes about ABP releases:
-## 9.1 (2025-01-16)
+* [ABP Studio release notes](../studio/release-notes.md)
+* [Change logs for ABP pro packages](https://abp.io/pro-releases)
-This is currently a RC (release-candidate) and you can see the detailed **[blog post / announcement](https://abp.io/blog/abp-9-1-release-candidate)** for the v9.1 release.
+
+## 9.2 (2025-03-25)
+
+This is currently a RC (release-candidate) and you can see the detailed **[blog post / announcement](https://abp.io/community/articles/abp-platform-9.2-rc-has-been-released-jpq072nh)** for the v9.2 release.
+
+* Added `ApplicationName` Property to Isolate Background Jobs & Background Workers
+* Docs Module: Added "Alternative Words" to Filter Items
+* Introducing the [Bunny BLOB Storage Provider](../framework/infrastructure/blob-storing/bunny.md)
+* Upgraded `MongoDB.Driver` to **v3.1.0**
+* Identity Pro Module: Require Email Verification to Register
+* Switching users during OAuth login
+
+## 9.1 (2025-03-05)
+
+See the detailed **[blog post / announcement](https://abp.io/community/articles/abp.io-platform-9.1-final-has-been-released-h96a56qa)** for the v9.1 release.
* Upgraded to Angular 19
* Upgraded to OpenIddict 6.0
diff --git a/docs/en/release-info/road-map.md b/docs/en/release-info/road-map.md
index 7a5a400bf4..d2ae30999f 100644
--- a/docs/en/release-info/road-map.md
+++ b/docs/en/release-info/road-map.md
@@ -4,9 +4,9 @@ This document provides a road map, release schedule, and planned features for th
## Next Versions
-### v9.2
+### v9.3
-The next version will be 9.2 and planned to release the stable 9.2 version in June 2025. We will be mostly working on the following topics:
+The next version will be 9.3 and planned to release the stable 9.3 version in July 2025. We will be mostly working on the following topics:
* Framework
* Upgrading 3rd-party dependencies
@@ -15,22 +15,20 @@ The next version will be 9.2 and planned to release the stable 9.2 version in Ju
* ABP Suite
* Define navigation properties without target string property dependency
* Improvements one-to-many scenarios
- * Access to default code generation templates for customized templates
* File Upload Modal enhancements
+ * Master/Detail DataGrid Toggle Detail Row Enhancements for Blazor UI
+
* ABP Studio
+ * Allow to directly create new solutions with ABP's RC (Release Candidate) versions
* Automate more details on new service creation for a microservice solution
* Support multiple concurrent Kubernetes deployment/integration scenarios
* Improve the module installation experience / installation guides
- * Auto-install 3rd-party dependencies
- * Better handle long log files
- * Allow to directly create new solutions with ABP's RC (Release Candidate) versions
- * Support Intel processors for Mac computers, support ARM chipset for Windows and support Linux OS
* Improve client proxy generation experience
* Modular Monolith Application Startup Template
* Application modules
- * Account module: Support mixed social/local login scenarios & enforcing email verification in wide aspect
+ * Account module: Support mixed social/local login scenarios & adding security related features
* UI/UX improvements on existing application modules
* Updating existing tutorials & documents (with other UI & DB options)
@@ -55,6 +53,8 @@ The ABP framework is [open source](https://github.com/abpframework/abp) and free
* [#15932](https://github.com/abpframework/abp/issues/15932) / Introduce ABP Diagnostics Module
* [#16744](https://github.com/abpframework/abp/issues/16744) / State Management API
* [#17815](https://github.com/abpframework/abp/issues/17815) / Operation Rate Limiting
+* [#119](https://github.com/abpframework/abp/issues/119) / REST API Versioning Improvements
+* [#2087](https://github.com/abpframework/abp/issues/2087) / RavenDB Database Support
### Application Modules / UI Themes
@@ -100,7 +100,7 @@ Here, are some of the important planned features for next ABP Studio versions:
Here, are some of the important planned features for the next ABP Suite versions:
-* Handle image properties for entities
+* Handle image properties for entities (in addition to file properties, which is already supported)
* Allow to define extra properties for DTOs those are not a part of the entity
* Allow to create pages instead of modals for CRUD page generation
* View-only (detail view) modal/page for an entity
@@ -111,7 +111,7 @@ Here, are some of the important planned features for the next ABP Suite versions
## Feature Requests
-Vote for your favorite feature on the related GitHub issues (and write your thoughts). You can create an issue on [the GitHub repository](https://github.com/abpframework/abp) for your feature requests, but first search in the existing issues please. You can also contact info@abp.io for your feature requests and other suggestions.
+Vote for your favorite feature on the related GitHub issues (and write your thoughts). You can create an issue on [the GitHub repository](https://github.com/abpframework/abp) for your feature requests, but please first search the existing issues. You can also contact [info@abp.io](mailto:info@abp.io) for your feature requests and other suggestions.
## See Also
diff --git a/docs/en/solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md b/docs/en/solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md
index a9ec807c64..14f2a48d66 100644
--- a/docs/en/solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md
+++ b/docs/en/solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md
@@ -480,7 +480,7 @@ push:
workflow_dispatch:
jobs:
-build:
+ build:
runs-on: ubuntu-latest
steps:
diff --git a/docs/en/tutorials/microservice/part-06.md b/docs/en/tutorials/microservice/part-06.md
index af05bbd792..18db56cc0b 100644
--- a/docs/en/tutorials/microservice/part-06.md
+++ b/docs/en/tutorials/microservice/part-06.md
@@ -304,3 +304,18 @@ Now, the Ordering service displays the product name instead of the product ID. W
> **Design Tip**
>
> It is suggested that you keep that type of communication to a minimum and not couple your services with each other. It can make your solution complicated and may also decrease your system performance. When you need to do it, think about performance and try to make some optimizations. For example, if the Ordering service frequently needs product data, you can use a kind of [cache layer](../../framework/fundamentals/caching.md), so it doesn't make frequent requests to the Catalog service.
+
+### Updating the Kubernetes Configuration
+
+ABP microservice startup template provides [pre-configured Helm charts](../../solution-templates/microservice/helm-charts-and-kubernetes.md) to deploy your solution to Kubernetes. When you develop your solution, you should also care about configurations of these charts if you want to keep them up to date and working.
+
+In the section *Generating Proxy Classes for the Integration Service* above, we added a new configuration to the `appsettings.json` file of the Ordering microservice. We should configure the corresponding Helm chart configuration to keep it synchronized.
+
+Open the `etc\helm\cloudcrm\charts\ordering\templates\ordering.yaml` file in a text editor, and add the following lines under the `env` section, just like the other values present (be careful on indents since it is critical in YAML files):
+
+````yaml
+- name: "RemoteServices__CatalogService__BaseUrl"
+ value: "http://{%{{{ .Release.Name }}}%}-catalog"
+````
+
+With this simple configuration, now the Ordering module can discover the catalog microservice's URL inside your Kubernetes cluster.
diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln
index db7bc55ff2..78f7ae0011 100644
--- a/framework/Volo.Abp.sln
+++ b/framework/Volo.Abp.sln
@@ -489,6 +489,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Bunny"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Bunny.Tests", "test\Volo.Abp.BlobStoring.Bunny.Tests\Volo.Abp.BlobStoring.Bunny.Tests.csproj", "{BC4BB2D6-DFD8-4190-AAC3-32C0A7A8E915}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Timing.Tests", "test\Volo.Abp.Timing.Tests\Volo.Abp.Timing.Tests.csproj", "{58FCF22D-E8DB-4EB8-B586-9BB6E9899D64}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1459,6 +1461,10 @@ Global
{BC4BB2D6-DFD8-4190-AAC3-32C0A7A8E915}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC4BB2D6-DFD8-4190-AAC3-32C0A7A8E915}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC4BB2D6-DFD8-4190-AAC3-32C0A7A8E915}.Release|Any CPU.Build.0 = Release|Any CPU
+ {58FCF22D-E8DB-4EB8-B586-9BB6E9899D64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {58FCF22D-E8DB-4EB8-B586-9BB6E9899D64}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {58FCF22D-E8DB-4EB8-B586-9BB6E9899D64}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {58FCF22D-E8DB-4EB8-B586-9BB6E9899D64}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1705,6 +1711,7 @@ Global
{70720321-DED4-464F-B913-BDA5BBDD7982} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{1BBCBA72-CDB6-4882-96EE-D4CD149433A2} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{BC4BB2D6-DFD8-4190-AAC3-32C0A7A8E915} = {447C8A77-E5F0-4538-8687-7383196D04EA}
+ {58FCF22D-E8DB-4EB8-B586-9BB6E9899D64} = {447C8A77-E5F0-4538-8687-7383196D04EA}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/AbpMauiBlazorClientHttpMessageHandler.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/AbpMauiBlazorClientHttpMessageHandler.cs
index 9fb31979ac..562f35e5a8 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/AbpMauiBlazorClientHttpMessageHandler.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/AbpMauiBlazorClientHttpMessageHandler.cs
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Components.Progression;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Timing;
namespace Volo.Abp.AspNetCore.Components.MauiBlazor;
@@ -13,12 +14,15 @@ public class AbpMauiBlazorClientHttpMessageHandler : DelegatingHandler, ITransie
{
private readonly IUiPageProgressService _uiPageProgressService;
private readonly IMauiBlazorSelectedLanguageProvider _mauiBlazorSelectedLanguageProvider;
+ private readonly ICurrentTimezoneProvider _currentTimezoneProvider;
public AbpMauiBlazorClientHttpMessageHandler(
IClientScopeServiceProviderAccessor clientScopeServiceProviderAccessor,
- IMauiBlazorSelectedLanguageProvider mauiBlazorSelectedLanguageProvider)
+ IMauiBlazorSelectedLanguageProvider mauiBlazorSelectedLanguageProvider,
+ ICurrentTimezoneProvider currentTimezoneProvider)
{
_mauiBlazorSelectedLanguageProvider = mauiBlazorSelectedLanguageProvider;
+ _currentTimezoneProvider = currentTimezoneProvider;
_uiPageProgressService = clientScopeServiceProviderAccessor.ServiceProvider.GetRequiredService();
}
@@ -32,6 +36,7 @@ public class AbpMauiBlazorClientHttpMessageHandler : DelegatingHandler, ITransie
});
await SetLanguageAsync(request);
+ await SetTimeZoneAsync(request);
return await base.SendAsync(request, cancellationToken);
}
@@ -51,4 +56,15 @@ public class AbpMauiBlazorClientHttpMessageHandler : DelegatingHandler, ITransie
request.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue(selectedLanguage!));
}
}
-}
\ No newline at end of file
+
+ private Task SetTimeZoneAsync(HttpRequestMessage request)
+ {
+ if (!_currentTimezoneProvider.TimeZone.IsNullOrWhiteSpace())
+ {
+ request.Headers.Remove(TimeZoneConsts.DefaultTimeZoneKey);
+ request.Headers.Add(TimeZoneConsts.DefaultTimeZoneKey, _currentTimezoneProvider.TimeZone);
+ }
+
+ return Task.CompletedTask;
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCachedApplicationConfigurationClient.cs
index c2fd8e21aa..a48901f6dd 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCachedApplicationConfigurationClient.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCachedApplicationConfigurationClient.cs
@@ -1,10 +1,13 @@
-using System.Threading.Tasks;
+using System;
+using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Authorization;
+using Microsoft.JSInterop;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClientProxies;
using Volo.Abp.AspNetCore.Mvc.Client;
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
+using Volo.Abp.Timing;
namespace Volo.Abp.AspNetCore.Components.MauiBlazor
{
@@ -18,17 +21,29 @@ namespace Volo.Abp.AspNetCore.Components.MauiBlazor
protected ICurrentTenantAccessor CurrentTenantAccessor { get; }
+ protected ICurrentTimezoneProvider CurrentTimezoneProvider { get; }
+
+ protected IJSRuntime JSRuntime { get; }
+
+ protected IClock Clock { get; }
+
public MauiBlazorCachedApplicationConfigurationClient(
AbpApplicationConfigurationClientProxy applicationConfigurationClientProxy,
ApplicationConfigurationCache cache,
ICurrentTenantAccessor currentTenantAccessor,
+ ICurrentTimezoneProvider currentTimezoneProvider,
AuthenticationStateProvider authenticationStateProvider,
- AbpApplicationLocalizationClientProxy applicationLocalizationClientProxy)
+ AbpApplicationLocalizationClientProxy applicationLocalizationClientProxy,
+ IJSRuntime jsRuntime,
+ IClock clock)
{
ApplicationConfigurationClientProxy = applicationConfigurationClientProxy;
Cache = cache;
CurrentTenantAccessor = currentTenantAccessor;
+ CurrentTimezoneProvider = currentTimezoneProvider;
ApplicationLocalizationClientProxy = applicationLocalizationClientProxy;
+ JSRuntime = jsRuntime;
+ Clock = clock;
authenticationStateProvider.AuthenticationStateChanged += async _ => { await InitializeAsync(); };
}
@@ -57,6 +72,15 @@ namespace Volo.Abp.AspNetCore.Components.MauiBlazor
CurrentTenantAccessor.Current = new BasicTenantInfo(
configurationDto.CurrentTenant.Id,
configurationDto.CurrentTenant.Name);
+
+ if (Clock.SupportsMultipleTimezone)
+ {
+ CurrentTimezoneProvider.TimeZone = !configurationDto.Timing.TimeZone.Iana.TimeZoneName.IsNullOrWhiteSpace()
+ ? configurationDto.Timing.TimeZone.Iana.TimeZoneName
+ : await JSRuntime.InvokeAsync("abp.clock.getBrowserTimeZone");
+
+ await JSRuntime.InvokeAsync("abp.clock.setBrowserTimeZoneToCookie");
+ }
}
public virtual Task GetAsync()
@@ -81,4 +105,4 @@ namespace Volo.Abp.AspNetCore.Components.MauiBlazor
return configuration;
}
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCurrentTimezoneProvider.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCurrentTimezoneProvider.cs
new file mode 100644
index 0000000000..2a1a37da07
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCurrentTimezoneProvider.cs
@@ -0,0 +1,10 @@
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Timing;
+
+namespace Volo.Abp.AspNetCore.Components.MauiBlazor;
+
+[Dependency(ReplaceServices = true)]
+public class MauiBlazorCurrentTimezoneProvider : ICurrentTimezoneProvider, ISingletonDependency
+{
+ public string? TimeZone { get; set; }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpScripts.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpScripts.razor
index 921937a124..436a22fc0e 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpScripts.razor
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpScripts.razor
@@ -5,7 +5,12 @@
{
foreach (var file in ScriptFiles)
{
-
+ var src = file;
+ if (!AppBasePath.IsNullOrWhiteSpace())
+ {
+ src = AppBasePath.EnsureEndsWith('/') + file.RemovePreFix("/");
+ }
+
}
}
@@ -19,6 +24,9 @@
[Parameter]
public string? BundleName { get; set; }
+ [Parameter]
+ public string? AppBasePath { get; set; }
+
private List? ScriptFiles { get; set; }
private PersistingComponentStateSubscription _persistingSubscription;
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpStyles.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpStyles.razor
index 0b522c02e4..1c2ede488f 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpStyles.razor
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpStyles.razor
@@ -5,7 +5,12 @@
{
foreach (var file in StyleFiles)
{
-
+ var href = file;
+ if (!AppBasePath.IsNullOrWhiteSpace())
+ {
+ href = AppBasePath.EnsureEndsWith('/') + file.RemovePreFix("/");
+ }
+
}
}
@@ -19,6 +24,9 @@
[Parameter]
public string? BundleName { get; set; }
+ [Parameter]
+ public string? AppBasePath { get; set; }
+
private List? StyleFiles { get; set; }
private PersistingComponentStateSubscription _persistingSubscription;
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpBlazorClientHttpMessageHandler.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpBlazorClientHttpMessageHandler.cs
index c92c121628..5fa70baabe 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpBlazorClientHttpMessageHandler.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/AbpBlazorClientHttpMessageHandler.cs
@@ -8,6 +8,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.JSInterop;
using Volo.Abp.AspNetCore.Components.Progression;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Timing;
namespace Volo.Abp.AspNetCore.Components.Web;
@@ -21,6 +22,8 @@ public class AbpBlazorClientHttpMessageHandler : DelegatingHandler, ITransientDe
private readonly IUiPageProgressService _uiPageProgressService;
+ private readonly ICurrentTimezoneProvider _currentTimezoneProvider;
+
private const string AntiForgeryCookieName = "XSRF-TOKEN";
private const string AntiForgeryHeaderName = "RequestVerificationToken";
@@ -29,11 +32,13 @@ public class AbpBlazorClientHttpMessageHandler : DelegatingHandler, ITransientDe
IJSRuntime jsRuntime,
ICookieService cookieService,
NavigationManager navigationManager,
- IClientScopeServiceProviderAccessor clientScopeServiceProviderAccessor)
+ IClientScopeServiceProviderAccessor clientScopeServiceProviderAccessor,
+ ICurrentTimezoneProvider currentTimezoneProvider)
{
_jsRuntime = jsRuntime;
_cookieService = cookieService;
_navigationManager = navigationManager;
+ _currentTimezoneProvider = currentTimezoneProvider;
_uiPageProgressService = clientScopeServiceProviderAccessor.ServiceProvider.GetRequiredService();
}
@@ -48,6 +53,7 @@ public class AbpBlazorClientHttpMessageHandler : DelegatingHandler, ITransientDe
await SetLanguageAsync(request, cancellationToken);
await SetAntiForgeryTokenAsync(request);
+ await SetTimeZoneAsync(request);
return await base.SendAsync(request, cancellationToken);
}
@@ -94,4 +100,15 @@ public class AbpBlazorClientHttpMessageHandler : DelegatingHandler, ITransientDe
request.Headers.Add(AntiForgeryHeaderName, token);
}
}
+
+ private Task SetTimeZoneAsync(HttpRequestMessage request)
+ {
+ if (!_currentTimezoneProvider.TimeZone.IsNullOrWhiteSpace())
+ {
+ request.Headers.Remove(TimeZoneConsts.DefaultTimeZoneKey);
+ request.Headers.Add(TimeZoneConsts.DefaultTimeZoneKey, _currentTimezoneProvider.TimeZone);
+ }
+
+ return Task.CompletedTask;
+ }
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/UserExceptionInformer.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/UserExceptionInformer.cs
index a8b0f71dea..a73ba0e77d 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/UserExceptionInformer.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/ExceptionHandling/UserExceptionInformer.cs
@@ -8,6 +8,7 @@ using Volo.Abp.AspNetCore.Components.Messages;
using Volo.Abp.AspNetCore.ExceptionHandling;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http;
+using Volo.Abp.Http.Client;
namespace Volo.Abp.AspNetCore.Components.Web.ExceptionHandling;
@@ -35,6 +36,8 @@ public class UserExceptionInformer : IUserExceptionInformer, IScopedDependency
{
//TODO: Create sync versions of the MessageService APIs.
+ LogException(context);
+
var errorInfo = GetErrorInfo(context);
if (errorInfo.Details.IsNullOrEmpty())
@@ -49,6 +52,8 @@ public class UserExceptionInformer : IUserExceptionInformer, IScopedDependency
public async Task InformAsync(UserExceptionInformerContext context)
{
+ LogException(context);
+
var errorInfo = GetErrorInfo(context);
if (errorInfo.Details.IsNullOrEmpty())
@@ -70,4 +75,14 @@ public class UserExceptionInformer : IUserExceptionInformer, IScopedDependency
options.SendExceptionDataToClientTypes = Options.SendExceptionDataToClientTypes;
});
}
+
+ protected virtual void LogException(UserExceptionInformerContext context)
+ {
+ if (context.Exception is AbpRemoteCallException && OperatingSystem.IsBrowser())
+ {
+ return;
+ }
+
+ Logger.LogException(context.Exception);
+ }
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js b/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js
index 51ff0151b6..30f1915005 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/wwwroot/libs/abp/js/abp.js
@@ -245,4 +245,14 @@ var abp = abp || {};
}
}
}
+
+ abp.clock = abp.clock || {};
+
+ abp.clock.setBrowserTimeZoneToCookie = function () {
+ abp.utils.setCookieValue('__timezone', Intl.DateTimeFormat().resolvedOptions().timeZone, new Date(new Date().setFullYear(new Date().getFullYear() + 1)), '/');
+ }
+
+ abp.clock.getBrowserTimeZone = function () {
+ return Intl.DateTimeFormat().resolvedOptions().timeZone
+ }
})();
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/Extensions/DependencyInjection/AbpBlazorWebAppServiceCollectionExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/Extensions/DependencyInjection/AbpBlazorWebAppServiceCollectionExtensions.cs
index 1bcc1c1f45..2027ac1e69 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/Extensions/DependencyInjection/AbpBlazorWebAppServiceCollectionExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/Extensions/DependencyInjection/AbpBlazorWebAppServiceCollectionExtensions.cs
@@ -1,3 +1,4 @@
+using System;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.Extensions.DependencyInjection.Extensions;
@@ -19,10 +20,14 @@ public static class AbpBlazorWebAppServiceCollectionExtensions
return services;
}
+ [Obsolete("Use AddBlazorWebAppServices instead. See https://github.com/abpframework/abp/issues/22622")]
public static IServiceCollection AddBlazorWebAppTieredServices([NotNull] this IServiceCollection services)
{
Check.NotNull(services, nameof(services));
+ // Compatibility with old template code
+ services.AddTransient();
+
services.AddScoped();
services.Replace(ServiceDescriptor.Singleton());
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebApp/RemoteAuthenticationStateProvider.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebApp/RemoteAuthenticationStateProvider.cs
index b35960f071..d3f05820b0 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebApp/RemoteAuthenticationStateProvider.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebApp/RemoteAuthenticationStateProvider.cs
@@ -1,5 +1,7 @@
+using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Authorization;
+using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace Volo.Abp.AspNetCore.Components.WebAssembly.WebApp;
@@ -8,21 +10,26 @@ public class RemoteAuthenticationStateProvider : AuthenticationStateProvider
{
protected ICurrentPrincipalAccessor CurrentPrincipalAccessor { get; }
protected WebAssemblyCachedApplicationConfigurationClient WebAssemblyCachedApplicationConfigurationClient { get; }
+ protected IServiceProvider ServiceProvider { get; }
public RemoteAuthenticationStateProvider(
ICurrentPrincipalAccessor currentPrincipalAccessor,
- WebAssemblyCachedApplicationConfigurationClient webAssemblyCachedApplicationConfigurationClient)
+ WebAssemblyCachedApplicationConfigurationClient webAssemblyCachedApplicationConfigurationClient,
+ IServiceProvider serviceProvider)
{
CurrentPrincipalAccessor = currentPrincipalAccessor;
WebAssemblyCachedApplicationConfigurationClient = webAssemblyCachedApplicationConfigurationClient;
+ ServiceProvider = serviceProvider;
}
public async override Task GetAuthenticationStateAsync()
{
- if (CurrentPrincipalAccessor.Principal.Identity == null ||
- !CurrentPrincipalAccessor.Principal.Identity.IsAuthenticated)
+ if (ServiceProvider.GetService() != null)
{
- await WebAssemblyCachedApplicationConfigurationClient.InitializeAsync();
+ if (CurrentPrincipalAccessor.Principal.Identity == null || !CurrentPrincipalAccessor.Principal.Identity.IsAuthenticated)
+ {
+ await WebAssemblyCachedApplicationConfigurationClient.InitializeAsync();
+ }
}
return new AuthenticationState(CurrentPrincipalAccessor.Principal);
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebApp/RemoteAuthenticationStateProviderCompatible.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebApp/RemoteAuthenticationStateProviderCompatible.cs
new file mode 100644
index 0000000000..780f96c631
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebApp/RemoteAuthenticationStateProviderCompatible.cs
@@ -0,0 +1,8 @@
+namespace Volo.Abp.AspNetCore.Components.WebAssembly.WebApp;
+
+///
+/// This class is used to indicate that the AddBlazorWebAppTieredServices method has been called for compatibility with the old template code
+///
+internal sealed class AddBlazorWebAppTieredServicesHasBeenCalled
+{
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs
index bebb2a78e1..acb792d454 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs
@@ -1,4 +1,5 @@
-using System.Threading.Tasks;
+using System;
+using System.Threading.Tasks;
using Microsoft.JSInterop;
using Volo.Abp.AspNetCore.Components.Web.Security;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
@@ -6,6 +7,7 @@ using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClientProxies;
using Volo.Abp.AspNetCore.Mvc.Client;
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
+using Volo.Abp.Timing;
namespace Volo.Abp.AspNetCore.Components.WebAssembly;
@@ -19,24 +21,32 @@ public class WebAssemblyCachedApplicationConfigurationClient : ICachedApplicatio
protected ICurrentTenantAccessor CurrentTenantAccessor { get; }
+ protected ICurrentTimezoneProvider CurrentTimezoneProvider { get; }
+
protected ApplicationConfigurationChangedService ApplicationConfigurationChangedService { get; }
protected IJSRuntime JSRuntime { get; }
+ protected IClock Clock { get; }
+
public WebAssemblyCachedApplicationConfigurationClient(
AbpApplicationConfigurationClientProxy applicationConfigurationClientProxy,
ApplicationConfigurationCache cache,
ICurrentTenantAccessor currentTenantAccessor,
+ ICurrentTimezoneProvider currentTimezoneProvider,
AbpApplicationLocalizationClientProxy applicationLocalizationClientProxy,
ApplicationConfigurationChangedService applicationConfigurationChangedService,
- IJSRuntime jsRuntime)
+ IJSRuntime jsRuntime,
+ IClock clock)
{
ApplicationConfigurationClientProxy = applicationConfigurationClientProxy;
Cache = cache;
CurrentTenantAccessor = currentTenantAccessor;
+ CurrentTimezoneProvider = currentTimezoneProvider;
ApplicationLocalizationClientProxy = applicationLocalizationClientProxy;
ApplicationConfigurationChangedService = applicationConfigurationChangedService;
JSRuntime = jsRuntime;
+ Clock = clock;
}
public virtual async Task InitializeAsync()
@@ -63,12 +73,21 @@ public class WebAssemblyCachedApplicationConfigurationClient : ICachedApplicatio
await JSRuntime.InvokeVoidAsync("abp.utils.removeOidcUser");
}
- ApplicationConfigurationChangedService.NotifyChanged();
-
CurrentTenantAccessor.Current = new BasicTenantInfo(
configurationDto.CurrentTenant.Id,
configurationDto.CurrentTenant.Name
);
+
+ if (Clock.SupportsMultipleTimezone)
+ {
+ CurrentTimezoneProvider.TimeZone = !configurationDto.Timing.TimeZone.Iana.TimeZoneName.IsNullOrWhiteSpace()
+ ? configurationDto.Timing.TimeZone.Iana.TimeZoneName
+ : await JSRuntime.InvokeAsync("abp.clock.getBrowserTimeZone");
+
+ await JSRuntime.InvokeAsync("abp.clock.setBrowserTimeZoneToCookie");
+ }
+
+ ApplicationConfigurationChangedService.NotifyChanged();
}
public virtual Task GetAsync()
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentTimezoneProvider.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentTimezoneProvider.cs
new file mode 100644
index 0000000000..c387ec30ea
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentTimezoneProvider.cs
@@ -0,0 +1,10 @@
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Timing;
+
+namespace Volo.Abp.AspNetCore.Components.WebAssembly;
+
+[Dependency(ReplaceServices = true)]
+public class WebAssemblyCurrentTimezoneProvider : ICurrentTimezoneProvider, ISingletonDependency
+{
+ public string? TimeZone { get; set; }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs
index 6f2df20de8..6b2fe0d98f 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/AbpComponentBase.cs
@@ -172,8 +172,7 @@ public abstract class AbpComponentBase : OwningComponentBase
{
return;
}
-
- Logger.LogException(exception);
+
await InvokeAsync(async () =>
{
await UserExceptionInformer.InformAsync(new UserExceptionInformerContext(exception));
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo/Abp/AspNetCore/Mvc/NewtonsoftJson/AbpAspNetCoreMvcNewtonsoftModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo/Abp/AspNetCore/Mvc/NewtonsoftJson/AbpAspNetCoreMvcNewtonsoftModule.cs
index d213c9f451..95e07a06e0 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo/Abp/AspNetCore/Mvc/NewtonsoftJson/AbpAspNetCoreMvcNewtonsoftModule.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo/Abp/AspNetCore/Mvc/NewtonsoftJson/AbpAspNetCoreMvcNewtonsoftModule.cs
@@ -16,7 +16,9 @@ public class AbpAspNetCoreMvcNewtonsoftModule : AbpModule
context.Services.AddOptions()
.Configure((options, rootServiceProvider) =>
{
- options.SerializerSettings.ContractResolver = new AbpCamelCasePropertyNamesContractResolver(rootServiceProvider.GetRequiredService());
+ options.SerializerSettings.ContractResolver =
+ new AbpCamelCasePropertyNamesContractResolver(rootServiceProvider
+ .GetRequiredService());
});
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs
index bd3a4abe48..5088c08293 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerBaseTagHelperService.cs
@@ -16,63 +16,28 @@ using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions;
using Volo.Abp.Json;
+using Volo.Abp.Timing;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelperService
where TTagHelper : AbpDatePickerBaseTagHelper
{
- protected readonly Dictionary> SupportedInputTypes = new()
- {
- {
- typeof(string), o =>
- {
- if(o is string s && DateTime.TryParse(s, out var dt))
- {
- return dt.ToString("O");
- }
-
- return string.Empty;
- }
- },
- {
- typeof(DateTime), o =>
- {
- if(o is DateTime dt && dt != default)
- {
- return dt.ToString("O");
- }
-
- return string.Empty;
- }
- },
- {typeof(DateTime?), o => ((DateTime?) o)?.ToString("O")!},
- {
- typeof(DateTimeOffset), o =>
- {
- if(o is DateTimeOffset dto && dto != default)
- {
- return dto.ToString("O");
- }
-
- return string.Empty;
- }
- },
- {typeof(DateTimeOffset?), o => ((DateTimeOffset?) o)?.ToString("O")!}
- };
+ protected readonly Dictionary> SupportedInputTypes;
protected readonly IJsonSerializer JsonSerializer;
protected readonly IHtmlGenerator Generator;
protected readonly HtmlEncoder Encoder;
protected readonly IServiceProvider ServiceProvider;
protected readonly IAbpTagHelperLocalizer TagHelperLocalizer;
+ protected readonly IClock Clock;
protected virtual string TagName { get; set; } = "abp-date-picker";
protected IStringLocalizer L { get; }
protected abstract TagHelperOutput TagHelperOutput { get; set; }
protected AbpDatePickerBaseTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator,
HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer l,
- IAbpTagHelperLocalizer tagHelperLocalizer)
+ IAbpTagHelperLocalizer tagHelperLocalizer, IClock clock)
{
JsonSerializer = jsonSerializer;
Generator = generator;
@@ -80,6 +45,65 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp
ServiceProvider = serviceProvider;
L = l;
TagHelperLocalizer = tagHelperLocalizer;
+ Clock = clock;
+
+ SupportedInputTypes = new Dictionary>
+ {
+ {
+ typeof(string), x =>
+ {
+ if(x is string s && DateTime.TryParse(s, out var dt))
+ {
+ return Clock.ConvertToUserTime(dt).ToString("O");
+ }
+
+ return string.Empty;
+ }
+ },
+ {
+ typeof(DateTime), x =>
+ {
+ if(x is DateTime dt && dt != default)
+ {
+ return Clock.ConvertToUserTime(dt).ToString("O");
+ }
+
+ return string.Empty;
+ }
+ },
+ {
+ typeof(DateTime?), x =>
+ {
+ if(x is DateTime dt && dt != default)
+ {
+ return Clock.ConvertToUserTime(dt).ToString("O");
+ }
+ return string.Empty;
+ }
+ },
+ {
+ typeof(DateTimeOffset), x =>
+ {
+ if(x is DateTimeOffset dto && dto != default)
+ {
+ return Clock.ConvertToUserTime(dto).DateTime.ToString("O");
+ }
+
+ return string.Empty;
+ }
+ },
+ {
+ typeof(DateTimeOffset?), x =>
+ {
+ if(x is DateTimeOffset dto && dto != default)
+ {
+ return Clock.ConvertToUserTime(dto).DateTime.ToString("O");
+ }
+
+ return string.Empty;
+ }
+ }
+ };
}
protected virtual T? GetAttribute() where T : Attribute
@@ -233,6 +257,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp
}
protected abstract int GetOrder();
+
protected abstract void AddBaseTagAttributes(TagHelperAttributeList attributes);
protected virtual string GetExtraInputHtml(TagHelperContext context, TagHelperOutput output)
@@ -375,7 +400,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp
{
attrList.Add("data-visible-date-format", options.VisibleDateFormat);
}
-
+
if(!options.InputDateFormat.IsNullOrEmpty())
{
attrList.Add("data-input-date-format", options.InputDateFormat);
@@ -754,7 +779,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp
{
return Task.FromResult(string.Empty);
}
-
+
return GetValidationAsHtmlByInputAsync(context, output, @for);
}
@@ -766,7 +791,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp
new ValidationMessageTagHelper(Generator) { For = @for, ViewContext = TagHelper.ViewContext };
var attributeList = new TagHelperAttributeList { { "class", "text-danger" } };
-
+
if(!output.Attributes.TryGetAttribute("name", out var nameAttribute) || nameAttribute == null || nameAttribute.Value == null)
{
if (nameAttribute != null)
@@ -776,7 +801,7 @@ public abstract class AbpDatePickerBaseTagHelperService : AbpTagHelp
nameAttribute = new TagHelperAttribute("name", "date_" + Guid.NewGuid().ToString("N"));
output.Attributes.Add(nameAttribute);
}
-
+
attributeList.Add("data-valmsg-for", nameAttribute.Value);
return await validationMessageTagHelper.RenderAsync(attributeList, context, Encoder, "span",
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs
index 3fc2861b59..5370a9a7de 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/DatePicker/AbpDatePickerTagHelperService.cs
@@ -8,14 +8,22 @@ using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions;
using Volo.Abp.Json;
+using Volo.Abp.Timing;
namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form.DatePicker;
public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService
{
- public AbpDatePickerTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator, HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer l, IAbpTagHelperLocalizer tagHelperLocalizer) : base(jsonSerializer, generator, encoder, serviceProvider, l, tagHelperLocalizer)
+ public AbpDatePickerTagHelperService(
+ IJsonSerializer jsonSerializer,
+ IHtmlGenerator generator,
+ HtmlEncoder encoder,
+ IServiceProvider serviceProvider,
+ IStringLocalizer l,
+ IAbpTagHelperLocalizer tagHelperLocalizer,
+ IClock clock)
+ : base(jsonSerializer, generator, encoder, serviceProvider, l, tagHelperLocalizer, clock)
{
-
}
protected override TagHelperOutput TagHelperOutput { get; set; } = default!;
@@ -42,10 +50,28 @@ public class AbpDatePickerTagHelperService : AbpDatePickerBaseTagHelperService
{
- public AbpDateRangePickerTagHelperService(IJsonSerializer jsonSerializer, IHtmlGenerator generator,
- HtmlEncoder encoder, IServiceProvider serviceProvider, IStringLocalizer l,
- IAbpTagHelperLocalizer tagHelperLocalizer) :
- base(jsonSerializer, generator, encoder, serviceProvider, l,
- tagHelperLocalizer)
+ public AbpDateRangePickerTagHelperService(
+ IJsonSerializer jsonSerializer, IHtmlGenerator generator,
+ HtmlEncoder encoder,
+ IServiceProvider serviceProvider,
+ IStringLocalizer l,
+ IAbpTagHelperLocalizer tagHelperLocalizer,
+ IClock clock) :
+ base(jsonSerializer, generator, encoder, serviceProvider, l, tagHelperLocalizer, clock)
{
}
@@ -34,7 +38,7 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
{
if (TagHelper.AspForStart != null)
{
- var startDateAttributes = new TagHelperAttributeList { { "data-start-date", "true" }, { "type", "hidden" } };
+ var startDateAttributes = new TagHelperAttributeList { { "data-hidden-datepicker", "true" }, { "data-start-date", "true" }, { "type", "hidden" } };
StartDateTagHelper = new InputTagHelper(Generator)
{
ViewContext = TagHelper.ViewContext,
@@ -42,12 +46,29 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
InputTypeName = "hidden"
};
+ if (Clock.SupportsMultipleTimezone)
+ {
+ if (TagHelper.AspForStart.Model is DateTime dateTime)
+ {
+ StartDateTagHelper.Format = "{0:O}";
+ StartDateTagHelper.Value = Clock.ConvertToUserTime(dateTime).ToString("O");
+ startDateAttributes.Add("value", StartDateTagHelper.Value);
+ }
+
+ if (TagHelper.AspForStart.Model is DateTimeOffset dateTimeOffset)
+ {
+ StartDateTagHelper.Format = "{0:O}";
+ StartDateTagHelper.Value = Clock.ConvertToUserTime(dateTimeOffset).UtcDateTime.ToString("O");
+ startDateAttributes.Add("value", StartDateTagHelper.Value);
+ }
+ }
+
StartDateTagHelperOutput = await StartDateTagHelper.ProcessAndGetOutputAsync(startDateAttributes, context, "input");
}
if (TagHelper.AspForEnd != null)
{
- var endDateAttributes = new TagHelperAttributeList { { "data-end-date", "true" }, { "type", "hidden" } };
+ var endDateAttributes = new TagHelperAttributeList { { "data-hidden-datepicker", "true" }, { "data-end-date", "true" }, { "type", "hidden" } };
EndDateTagHelper = new InputTagHelper(Generator)
{
ViewContext = TagHelper.ViewContext,
@@ -55,6 +76,23 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
InputTypeName = "hidden"
};
+ if (Clock.SupportsMultipleTimezone)
+ {
+ if (TagHelper.AspForEnd.Model is DateTime dateTime)
+ {
+ EndDateTagHelper.Format = "{0:O}";
+ EndDateTagHelper.Value = Clock.ConvertToUserTime(dateTime).ToString("O");
+ endDateAttributes.Add("value", EndDateTagHelper.Value);
+ }
+
+ if (TagHelper.AspForEnd.Model is DateTimeOffset dateTimeOffset)
+ {
+ EndDateTagHelper.Format = "{0:O}";
+ EndDateTagHelper.Value = Clock.ConvertToUserTime(dateTimeOffset).UtcDateTime.ToString("O");
+ endDateAttributes.Add("value", EndDateTagHelper.Value);
+ }
+ }
+
EndDateTagHelperOutput = await EndDateTagHelper.ProcessAndGetOutputAsync(endDateAttributes, context, "input");
}
@@ -78,7 +116,7 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
protected override int GetOrder()
{
- return TagHelper.Order;
+ return TagHelper.AspForStart?.Metadata.Order ?? 0;
}
protected override void AddBaseTagAttributes(TagHelperAttributeList attributes)
@@ -92,7 +130,7 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
attributes.Add("data-start-date", convert);
}
}
-
+
if (TagHelper.AspForEnd?.Model != null &&
SupportedInputTypes.TryGetValue(TagHelper.AspForEnd.Metadata.ModelType, out var convertFuncEnd))
{
@@ -113,4 +151,4 @@ public class AbpDateRangePickerTagHelperService : AbpDatePickerBaseTagHelperServ
{
return TagHelper.AspForStart ?? TagHelper.AspForEnd;
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js
index 9bba9ee9a9..e11a8f4d99 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/modal-manager.js
@@ -110,7 +110,7 @@ $.validator.defaults.ignore = ''; //TODO: Would be better if we can apply only f
_onOpenCallbacks.triggerAll(_publicApi);
- if ($firstVisibleInput.data("datepicker")) {
+ if ($firstVisibleInput.data("datepicker") || $firstVisibleInput.data("daterangepicker")) {
return; //don't pop-up date pickers...
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
index 9bbf0abd28..bcb043a196 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js
@@ -511,22 +511,19 @@ var abp = abp || {};
}
};
- var ISOStringToDateTimeLocaleString = function (format) {
- return function (data) {
- var date = luxon
- .DateTime
- .fromISO(data, {
- locale: abp.localization.currentCulture.name
- });
- return format ? date.toLocaleString(format) : date.toLocaleString();
- };
+ datatables.defaultRenderers['date'] = function (value) {
+ if (!value) {
+ return value;
+ } else {
+ return abp.clock.normalizeToLocaleString(value, { year: 'numeric', month: '2-digit', day: '2-digit' });
+ }
};
- datatables.defaultRenderers['date'] = function (value) {
+ datatables.defaultRenderers['time'] = function (value) {
if (!value) {
return value;
} else {
- return (ISOStringToDateTimeLocaleString())(value);
+ return abp.clock.normalizeToLocaleString(value, { hour: '2-digit', minute: '2-digit', second: '2-digit' });
}
};
@@ -534,7 +531,7 @@ var abp = abp || {};
if (!value) {
return value;
} else {
- return (ISOStringToDateTimeLocaleString(luxon.DateTime.DATETIME_SHORT))(value);
+ return abp.clock.normalizeToLocaleString(value);
}
};
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css
index 08bdc5d283..de679b468a 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.css
@@ -10,3 +10,8 @@
.dataTable tbody tr td div.dropdown ul.dropdown-menu li {
cursor: pointer; }
+
+.abp-action-button ui.dropdown-menu[data-popper-reference-hidden]{
+ visibility: hidden;
+ pointer-events: none;
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css
index ffc3d272a3..cd5ab5591b 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.min.css
@@ -1 +1 @@
-.dataTable{width:100% !important;border-spacing:0 !important;}.table td,.table th{padding:8px 10px;}.dataTable tbody tr td button{cursor:pointer;}.dataTable tbody tr td div.dropdown ul.dropdown-menu li{cursor:pointer;}
+.dataTable{width:100%!important;border-spacing:0!important}.table td,.table th{padding:8px 10px}.dataTable tbody tr td button{cursor:pointer}.dataTable tbody tr td div.dropdown ul.dropdown-menu li{cursor:pointer}.abp-action-button ui.dropdown-menu[data-popper-reference-hidden]{visibility:hidden;pointer-events:none}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss
index 0ca0771faf..d2498b3cc7 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-styles.scss
@@ -27,3 +27,10 @@
}
}
}
+
+.abp-action-button {
+ ui.dropdown-menu[data-popper-reference-hidden] {
+ visibility: hidden;
+ pointer-events: none;
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js
index 01fe50dec3..e10ceefbf9 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js
@@ -752,4 +752,41 @@
$(function () {
abp.dom.initializers.initializeDateRangePickers($('body'));
});
-})(jQuery);
\ No newline at end of file
+
+ $.fn.handleDatepicker = function (datepickerSelector) {
+ var $this = $(this);
+ var datepickers = $this.find(datepickerSelector);
+ $this.find('input[class~="hidden-datepicker"]').remove();
+ datepickers.each(function () {
+ var $this = $(this);
+ var datepicker = $this.data('daterangepicker');
+ if (!datepicker) {
+ return;
+ }
+ if ($this.val() === '') {
+ return;
+ }
+ var name = $this.attr('name') || $this.data('name');
+ $this.data('name', name).removeAttr('name');
+ if (datepicker.singleDatePicker) {
+ var startDate = abp.clock.normalizeToString(datepicker.startDate.toDate());
+ var startDateInput = $(' ').attr('type', 'hidden').attr('name', name).val(startDate).addClass('hidden-datepicker');
+ $this.after(startDateInput);
+ } else {
+ if ($this.data('start-date')) {
+ var startDate = abp.clock.normalizeToString(datepicker.startDate.toDate());
+ var startDateInput = $(' ').attr('type', 'hidden').attr('name', name).val(startDate).addClass('hidden-datepicker');
+ $this.after(startDateInput);
+ }
+ if ($this.data('end-date')) {
+ var endDate = abp.clock.normalizeToString(datepicker.endDate.toDate());
+ var endDateInput = $(' ').attr('type', 'hidden').attr('name', name).val(endDate).addClass('hidden-datepicker');
+ $this.after(endDateInput);
+ }
+ }
+ });
+
+ return this;
+ };
+
+})(jQuery);
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcOptions.cs
index 56acc2f745..548981053d 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcOptions.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcOptions.cs
@@ -16,6 +16,8 @@ public class AbpAspNetCoreMvcOptions
public bool ExposeIntegrationServices { get; set; } = false;
+ public bool ExposeClientProxyServices { get; set; } = false;
+
public bool AutoModelValidation { get; set; }
public bool EnableRazorRuntimeCompilationOnDevelopment { get; set; }
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
index 7f41f73165..8dfa51768d 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
@@ -311,7 +311,7 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp
protected virtual async Task GetTimingConfigAsync()
{
- var windowsTimeZoneId = await _settingProvider.GetOrNullAsync(TimingSettingNames.TimeZone);
+ var timeZone = await _settingProvider.GetOrNullAsync(TimingSettingNames.TimeZone);
return new TimingDto
{
@@ -319,13 +319,11 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp
{
Windows = new WindowsTimeZone
{
- TimeZoneId = windowsTimeZoneId
+ TimeZoneId = timeZone.IsNullOrWhiteSpace() ? null : _timezoneProvider.IanaToWindows(timeZone)
},
Iana = new IanaTimeZone
{
- TimeZoneName = windowsTimeZoneId.IsNullOrWhiteSpace()
- ? null
- : _timezoneProvider.WindowsToIana(windowsTimeZoneId!)
+ TimeZoneName = timeZone
}
}
};
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/AbpRemoteStreamContentModelBinder.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/AbpRemoteStreamContentModelBinder.cs
index 2cc051ba62..8fe801b9d5 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/AbpRemoteStreamContentModelBinder.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ContentFormatters/AbpRemoteStreamContentModelBinder.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.ModelBinding;
@@ -99,6 +100,7 @@ public class AbpRemoteStreamContentModelBinder : IModelBin
{
var form = await request.ReadFormAsync();
+ var useMemoryStream = form.Files.Count > 1;
foreach (var file in form.Files)
{
// If there is an in the form and is left blank.
@@ -109,13 +111,27 @@ public class AbpRemoteStreamContentModelBinder : IModelBin
if (file.Name.Equals(modelName, StringComparison.OrdinalIgnoreCase))
{
- postedFiles.Add(new RemoteStreamContent(file.OpenReadStream(), file.FileName, file.ContentType, file.Length).As());
+ if (useMemoryStream)
+ {
+ var memoryStream = new MemoryStream();
+ await file.OpenReadStream().CopyToAsync(memoryStream);
+ memoryStream.Position = 0;
+ postedFiles.Add(new RemoteStreamContent(memoryStream, file.FileName, file.ContentType, file.Length, disposeStream: false).As());
+ bindingContext.HttpContext.Response.OnCompleted(async () =>
+ {
+ await memoryStream.DisposeAsync();
+ });
+ }
+ else
+ {
+ postedFiles.Add(new RemoteStreamContent(file.OpenReadStream(), file.FileName, file.ContentType, file.Length, disposeStream: false).As());
+ }
}
}
}
else if (bindingContext.IsTopLevelObject)
{
- postedFiles.Add(new RemoteStreamContent(request.Body, null, request.ContentType, request.ContentLength).As());
+ postedFiles.Add(new RemoteStreamContent(request.Body, null, request.ContentType, request.ContentLength, disposeStream: false).As());
}
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs
index 3d3a71958a..31ba046250 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Conventions/AbpServiceConvention.cs
@@ -74,16 +74,29 @@ public class AbpServiceConvention : IAbpServiceConvention, ITransientDependency
protected virtual void RemoveIntegrationControllersIfNotExposed(ApplicationModel application)
{
- if (Options.ExposeIntegrationServices)
+ if (!Options.ExposeIntegrationServices)
{
- return;
+ var integrationControllers = GetControllers(application)
+ .Where(c => IntegrationServiceAttribute.IsDefinedOrInherited(c.ControllerType))
+ .ToArray();
+
+ application.Controllers.RemoveAll(integrationControllers);
+ }
+
+ if (!Options.ExposeClientProxyServices)
+ {
+ var clientProxyServiceControllers = GetControllers(application)
+ .Where(c => IsClientProxyService(c.ControllerType))
+ .ToArray();
+
+ application.Controllers.RemoveAll(clientProxyServiceControllers);
}
-
- var integrationControllers = GetControllers(application)
- .Where(c => IntegrationServiceAttribute.IsDefinedOrInherited(c.ControllerType))
- .ToArray();
+ }
- application.Controllers.RemoveAll(integrationControllers);
+ protected virtual bool IsClientProxyService(Type controllerType)
+ {
+ return typeof(IApplicationService).IsAssignableFrom(controllerType) &&
+ controllerType.GetBaseClasses().Any(x => x.IsGenericType && x.GetGenericTypeDefinition().FullName!.StartsWith("Volo.Abp.Http.Client.ClientProxying.ClientProxyBase"));
}
protected virtual IList GetControllers(ApplicationModel application)
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs
index 8c6edd2eb0..f2bac81316 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs
@@ -5,6 +5,7 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.Json.SystemTextJson;
using Volo.Abp.Json.SystemTextJson.JsonConverters;
+using Volo.Abp.Json.SystemTextJson.Modifiers;
namespace Volo.Abp.AspNetCore.Mvc.Json;
@@ -26,6 +27,13 @@ public static class MvcCoreBuilderExtensions
options.JsonSerializerOptions.TypeInfoResolver = new AbpDefaultJsonTypeInfoResolver(rootServiceProvider
.GetRequiredService>());
+
+ var dateTimeConverter = rootServiceProvider.GetRequiredService();
+ var nullableDateTimeConverter = rootServiceProvider.GetRequiredService();
+
+ options.JsonSerializerOptions.TypeInfoResolver.As().Modifiers.Add(
+ new AbpDateTimeConverterModifier(dateTimeConverter, nullableDateTimeConverter)
+ .CreateModifyAction());
});
return builder;
diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
index b4d5d4499c..d042bb6026 100644
--- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs
@@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.RequestLocalization;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.StaticAssets;
+using Microsoft.AspNetCore.Timing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Hosting;
@@ -269,4 +270,14 @@ public static class AbpApplicationBuilderExtensions
return app;
}
+
+ ///
+ /// Use this middleware after middleware.
+ ///
+ ///
+ ///
+ public static IApplicationBuilder UseAbpTimeZone(this IApplicationBuilder app)
+ {
+ return app.UseMiddleware();
+ }
}
diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Timing/AbpTimeZoneMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Timing/AbpTimeZoneMiddleware.cs
new file mode 100644
index 0000000000..8ee803feb0
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Timing/AbpTimeZoneMiddleware.cs
@@ -0,0 +1,82 @@
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.AspNetCore.Middleware;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Settings;
+using Volo.Abp.Timing;
+using Volo.Abp.Users;
+
+namespace Microsoft.AspNetCore.Timing;
+
+public class AbpTimeZoneMiddleware : AbpMiddlewareBase, ITransientDependency
+{
+ public async override Task InvokeAsync(HttpContext context, RequestDelegate next)
+ {
+ if (!context.RequestServices.GetRequiredService().SupportsMultipleTimezone)
+ {
+ await next(context);
+ return;
+ }
+
+ // Try to get the timezone from the setting system first
+ var settingProvider = context.RequestServices.GetRequiredService();
+ var timezone = await settingProvider.GetOrNullAsync(TimingSettingNames.TimeZone);
+
+ if (timezone.IsNullOrWhiteSpace())
+ {
+ // Try to get the timezone from the HTTP request if the setting is not available
+ timezone = await GetTimezoneFromRequestAsync(context);
+ }
+
+ if (timezone.IsNullOrWhiteSpace())
+ {
+ // Try to get the timezone from the current running server if the setting and request are not available
+ timezone = await GetLocalTimeZoneAsync();
+ }
+
+ var currentTimezoneProvider = context.RequestServices.GetRequiredService();
+ using (currentTimezoneProvider.Change(timezone))
+ {
+ await next(context);
+ }
+ }
+
+ protected virtual async Task GetTimezoneFromRequestAsync(HttpContext context)
+ {
+ var timeZoneSources = new Func>[]
+ {
+ ctx => Task.FromResult(ctx.Request.Headers[TimeZoneConsts.DefaultTimeZoneKey].FirstOrDefault()),
+ ctx => Task.FromResult(ctx.Request.Query[TimeZoneConsts.DefaultTimeZoneKey].ToString()),
+ async ctx => ctx.Request.HasFormContentType
+ ? (await ctx.Request.ReadFormAsync())[TimeZoneConsts.DefaultTimeZoneKey].ToString()
+ : null,
+ ctx => Task.FromResult(ctx.Request.Cookies[TimeZoneConsts.DefaultTimeZoneKey]?.ToString()),
+ };
+
+ foreach (var source in timeZoneSources)
+ {
+ var timezone = await source(context);
+ if (!string.IsNullOrEmpty(timezone))
+ {
+ return timezone;
+ }
+ }
+
+ return null;
+ }
+
+ protected virtual Task GetLocalTimeZoneAsync()
+ {
+ if (TimeZoneInfo.Local.HasIanaId)
+ {
+ return Task.FromResult(TimeZoneInfo.Local.Id);
+ }
+
+ return TimeZoneInfo.TryConvertWindowsIdToIanaId(TimeZoneInfo.Local.Id, out var ianaName)
+ ? Task.FromResult(ianaName)
+ : Task.FromResult(null);
+ }
+}
diff --git a/framework/src/Volo.Abp.BlazoriseUI/wwwroot/volo.abp.blazoriseui.css b/framework/src/Volo.Abp.BlazoriseUI/wwwroot/volo.abp.blazoriseui.css
index 84814c2ef3..f42b6735bd 100644
--- a/framework/src/Volo.Abp.BlazoriseUI/wwwroot/volo.abp.blazoriseui.css
+++ b/framework/src/Volo.Abp.BlazoriseUI/wwwroot/volo.abp.blazoriseui.css
@@ -57,4 +57,8 @@
100% {
transform: rotate(0deg);
}
+}
+
+.table-responsive .dropdown-menu-position-strategy-fixed {
+ position: fixed !important;
}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
index 8d77675c3c..d968ae6b12 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
@@ -2,24 +2,24 @@
public static class CliConsts
{
- public const string Command = "AbpCliCommand";
+ public static string Command = "AbpCliCommand";
- public const string BranchPrefix = "branch@";
+ public static string BranchPrefix = "branch@";
- public const string DocsLink = "https://abp.io/docs";
+ public static string DocsLink = "https://abp.io/docs";
- public const string HttpClientName = "AbpHttpClient";
+ public static string HttpClientName = "AbpHttpClient";
- public const string GithubHttpClientName = "GithubHttpClient";
+ public static string GithubHttpClientName = "GithubHttpClient";
- public const string LogoutUrl = CliUrls.WwwAbpIo + "api/license/logout";
+ public static string LogoutUrl = CliUrls.WwwAbpIo + "api/license/logout";
- public const string LicenseCodePlaceHolder = @" ";
+ public static string LicenseCodePlaceHolder = @" ";
- public const string AppSettingsJsonFileName = "appsettings.json";
+ public static string AppSettingsJsonFileName = "appsettings.json";
+
+ public static string AppSettingsSecretJsonFileName = "appsettings.secrets.json";
- public const string AppSettingsSecretJsonFileName = "appsettings.secrets.json";
-
public static class MemoryKeys
{
public const string LatestCliVersionCheckDate = "LatestCliVersionCheckDate";
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs
index 35ae34b895..28cf42c2a2 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs
@@ -5,19 +5,18 @@ namespace Volo.Abp.Cli;
public static class CliUrls
{
- public const string WwwAbpIo = WwwAbpIoProduction;
- public const string AccountAbpIo = AccountAbpIoProduction;
- public const string NuGetRootPath = NuGetRootPathProduction;
- public const string LatestVersionCheckFullPath =
- "https://raw.githubusercontent.com/abpframework/abp/dev/latest-versions.json";
-
- public const string WwwAbpIoProduction = "https://abp.io/";
- public const string AccountAbpIoProduction = "https://account.abp.io/";
- public const string NuGetRootPathProduction = "https://nuget.abp.io/";
-
- public const string WwwAbpIoDevelopment = "https://localhost:44328/";
- public const string AccountAbpIoDevelopment = "https://localhost:44333/";
- public const string NuGetRootPathDevelopment = "https://localhost:44373/";
+ public static string WwwAbpIo = WwwAbpIoProduction;
+ public static string AccountAbpIo = AccountAbpIoProduction;
+ public static string NuGetRootPath = NuGetRootPathProduction;
+ public static string LatestVersionCheckFullPath = "https://raw.githubusercontent.com/abpframework/abp/dev/latest-versions.json";
+
+ public static string WwwAbpIoProduction = "https://abp.io/";
+ public static string AccountAbpIoProduction = "https://account.abp.io/";
+ public static string NuGetRootPathProduction = "https://nuget.abp.io/";
+
+ public static string WwwAbpIoDevelopment = "https://localhost:44328/";
+ public static string AccountAbpIoDevelopment = "https://localhost:44333/";
+ public static string NuGetRootPathDevelopment = "https://localhost:44373/";
public static string GetNuGetServiceIndexUrl(string apiKey)
{
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs
index 9fb647806b..cc13e9d187 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/HelpCommand.cs
@@ -68,7 +68,7 @@ public class HelpCommand : IConsoleCommand, ITransientDependency
sb.AppendLine("Command List:");
sb.AppendLine("");
- foreach (var command in AbpCliOptions.Commands.ToArray().Where(NotHiddenFromCommandList))
+ foreach (var command in AbpCliOptions.Commands.ToArray().Where(NotHiddenFromCommandList).OrderBy(x => x.Key))
{
var method = command.Value.GetMethod("GetShortDescription", BindingFlags.Static | BindingFlags.Public);
if (method == null)
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs
index ad0992af4e..8c6df3b0b9 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/UpdateCommand.cs
@@ -38,24 +38,25 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
var directory = commandLineArgs.Options.GetOrNull(Options.SolutionPath.Short, Options.SolutionPath.Long) ??
Directory.GetCurrentDirectory();
var version = commandLineArgs.Options.GetOrNull(Options.Version.Short, Options.Version.Long);
+ var leptonXVersion = commandLineArgs.Options.GetOrNull(Options.LeptonXVersion.Short, Options.LeptonXVersion.Long);
if (updateNuget || !updateNpm)
{
- await UpdateNugetPackages(commandLineArgs, directory, version);
+ await UpdateNugetPackages(commandLineArgs, directory, version, leptonXVersion);
}
if (updateNpm || !updateNuget)
{
- await UpdateNpmPackages(directory, version);
+ await UpdateNpmPackages(directory, version, leptonXVersion);
}
}
- private async Task UpdateNpmPackages(string directory, string version)
+ private async Task UpdateNpmPackages(string directory, string version, string leptonXVersion)
{
- await _npmPackagesUpdater.Update(directory, version: version);
+ await _npmPackagesUpdater.Update(directory, version: version, leptonXVersion: leptonXVersion);
}
- private async Task UpdateNugetPackages(CommandLineArgs commandLineArgs, string directory, string version)
+ private async Task UpdateNugetPackages(CommandLineArgs commandLineArgs, string directory, string version, string leptonXVersion)
{
var solutions = new List();
var givenSolution = commandLineArgs.Options.GetOrNull(Options.SolutionName.Short, Options.SolutionName.Long);
@@ -77,7 +78,7 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
{
var solutionName = Path.GetFileName(solution).RemovePostFix(".sln");
- await _nugetPackagesVersionUpdater.UpdateSolutionAsync(solution, checkAll: checkAll, version: version);
+ await _nugetPackagesVersionUpdater.UpdateSolutionAsync(solution, checkAll: checkAll, version: version, leptonXVersion: leptonXVersion);
Logger.LogInformation("Volo packages are updated in {SolutionName} solution", solutionName);
}
@@ -90,7 +91,7 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
{
var projectName = Path.GetFileName(project).RemovePostFix(".csproj");
- await _nugetPackagesVersionUpdater.UpdateProjectAsync(project, checkAll: checkAll, version: version);
+ await _nugetPackagesVersionUpdater.UpdateProjectAsync(project, checkAll: checkAll, version: version, leptonXVersion: leptonXVersion);
Logger.LogInformation("Volo packages are updated in {ProjectName} project", projectName);
return;
@@ -120,6 +121,7 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
sb.AppendLine("-sn|--solution-name (Specify the solution name)");
sb.AppendLine("--check-all (Check the new version of each package separately)");
sb.AppendLine("-v|--version (default: latest version)");
+ sb.AppendLine("-lv|--leptonx-version (default: latest LeptonX version)");
sb.AppendLine("");
sb.AppendLine("Some examples:");
sb.AppendLine("");
@@ -167,5 +169,11 @@ public class UpdateCommand : IConsoleCommand, ITransientDependency
public const string Short = "v";
public const string Long = "version";
}
+
+ public static class LeptonXVersion
+ {
+ public const string Short = "lv";
+ public const string Long = "leptonx-version";
+ }
}
}
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
index 2c88f1e8c5..d543b43d65 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NpmPackagesUpdater.cs
@@ -50,7 +50,7 @@ public class NpmPackagesUpdater : ITransientDependency
public async Task Update(string rootDirectory, bool includePreviews = false,
bool includeReleaseCandidates = false,
- bool switchToStable = false, string version = null, bool includePreRc = false)
+ bool switchToStable = false, string version = null, string leptonXVersion = null, bool includePreRc = false)
{
var fileList = _packageJsonFileFinder.Find(rootDirectory);
@@ -80,6 +80,7 @@ public class NpmPackagesUpdater : ITransientDependency
var updated = await UpdatePackagesInFile(file, includePreviews, includeReleaseCandidates,
switchToStable,
version,
+ leptonXVersion,
includePreRc);
packagesUpdated.TryAdd(file, updated);
@@ -162,6 +163,7 @@ public class NpmPackagesUpdater : ITransientDependency
bool includeReleaseCandidates = false,
bool switchToStable = false,
string specifiedVersion = null,
+ string specifiedLeptonXVersion = null,
bool includePreRc = false)
{
var packagesUpdated = false;
@@ -177,7 +179,7 @@ public class NpmPackagesUpdater : ITransientDependency
foreach (var abpPackage in abpPackages)
{
var updated = await TryUpdatingPackage(filePath, abpPackage, includePreviews, includeReleaseCandidates,
- switchToStable, specifiedVersion, includePreRc);
+ switchToStable, specifiedVersion, specifiedLeptonXVersion, includePreRc);
if (updated)
{
@@ -188,7 +190,7 @@ public class NpmPackagesUpdater : ITransientDependency
var updatedContent = packageJson.ToString(Formatting.Indented);
File.WriteAllText(filePath, updatedContent);
-
+
return packagesUpdated;
}
@@ -199,6 +201,7 @@ public class NpmPackagesUpdater : ITransientDependency
bool includeReleaseCandidates = false,
bool switchToStable = false,
string specifiedVersion = null,
+ string specifiedLeptonXVersion = null,
bool includePreRc = false)
{
var currentVersion = (string)package.Value;
@@ -207,18 +210,36 @@ public class NpmPackagesUpdater : ITransientDependency
if (!specifiedVersion.IsNullOrWhiteSpace())
{
- if (!SpecifiedVersionExists(specifiedVersion, package))
+ if (package.Name.IndexOf("leptonx", StringComparison.InvariantCultureIgnoreCase) > 0 && !specifiedLeptonXVersion.IsNullOrWhiteSpace())
{
- return false;
- }
+ if (!SpecifiedVersionExists(specifiedLeptonXVersion, package))
+ {
+ return false;
+ }
- if (SemanticVersion.Parse(specifiedVersion) <=
- SemanticVersion.Parse(currentVersion.RemovePreFix("~", "^")))
- {
- return false;
+ if (SemanticVersion.Parse(specifiedLeptonXVersion) <=
+ SemanticVersion.Parse(currentVersion.RemovePreFix("~", "^")))
+ {
+ return false;
+ }
+
+ version = specifiedLeptonXVersion.EnsureStartsWith('^');
}
+ else
+ {
+ if (!SpecifiedVersionExists(specifiedVersion, package))
+ {
+ return false;
+ }
- version = specifiedVersion.EnsureStartsWith('^');
+ if (SemanticVersion.Parse(specifiedVersion) <=
+ SemanticVersion.Parse(currentVersion.RemovePreFix("~", "^")))
+ {
+ return false;
+ }
+
+ version = specifiedVersion.EnsureStartsWith('^');
+ }
}
else
{
diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
index 4ece393913..924d6041b1 100644
--- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
+++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
@@ -27,7 +27,14 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
Logger = NullLogger.Instance;
}
- public async Task UpdateSolutionAsync(string solutionPath, bool includePreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false, bool checkAll = false, string version = null)
+ public async Task UpdateSolutionAsync(
+ string solutionPath,
+ bool includePreviews = false,
+ bool includeReleaseCandidates = false,
+ bool switchToStable = false,
+ bool checkAll = false,
+ string version = null,
+ string leptonXVersion = null)
{
var projectPaths = ProjectFinder.GetProjectFiles(solutionPath);
@@ -58,6 +65,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
latestReleaseCandidateVersionInfo.Version,
latestVersionFromMyGet,
version,
+ leptonXVersion,
latestStableVersions: latestStableVersions);
fs.Seek(0, SeekOrigin.Begin);
@@ -75,7 +83,14 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
}
}
- public async Task UpdateProjectAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false, bool checkAll = false, string version = null)
+ public async Task UpdateProjectAsync(
+ string projectPath,
+ bool includeNightlyPreviews = false,
+ bool includeReleaseCandidates = false,
+ bool switchToStable = false,
+ bool checkAll = false,
+ string version = null,
+ string leptonXVersion = null)
{
if (checkAll && version.IsNullOrWhiteSpace())
{
@@ -102,6 +117,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
latestReleaseCandidateVersionInfo.Version,
latestVersionFromMyGet,
version,
+ leptonXVersion,
latestStableVersions: latestStableVersions);
fs.Seek(0, SeekOrigin.Begin);
@@ -166,6 +182,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
SemanticVersion latestNugetReleaseCandidateVersion = null,
string latestMyGetVersion = null,
string specifiedVersion = null,
+ string specifiedLeptonXVersion = null,
List latestStableVersions = null)
{
string packageId = null;
@@ -222,21 +239,35 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
var leptonXPackageVersion = latestStableVersions?
.FirstOrDefault(v => v.Version.Equals(specifiedVersion, StringComparison.InvariantCultureIgnoreCase))?.LeptonX?.Version;
- if ((isLeptonXPackage && string.IsNullOrWhiteSpace(leptonXPackageVersion)) || isStudioPackage)
+ if ((isLeptonXPackage && string.IsNullOrWhiteSpace(leptonXPackageVersion) && specifiedLeptonXVersion.IsNullOrWhiteSpace()) || isStudioPackage)
{
Logger.LogWarning("Package: {PackageId} could not be updated. Please manually update the package version yourself to prevent version mismatches!", packageId);
continue;
}
- var isLeptonXPackageWithVersion = isLeptonXPackage && !string.IsNullOrWhiteSpace(leptonXPackageVersion);
-
- if (isLeptonXPackageWithVersion || await SpecifiedVersionExists(specifiedVersion, packageId))
+ if (isLeptonXPackage)
{
- TryUpdatingPackage(isLeptonXPackageWithVersion ? leptonXPackageVersion : specifiedVersion);
+ var isLeptonXPackageWithVersion = isLeptonXPackage && !string.IsNullOrWhiteSpace(leptonXPackageVersion);
+
+ if (isLeptonXPackageWithVersion || await SpecifiedVersionExists(specifiedLeptonXVersion, packageId))
+ {
+ TryUpdatingPackage(specifiedLeptonXVersion ?? leptonXPackageVersion);
+ }
+ else
+ {
+ Logger.LogWarning($"Package \"{packageId}\" specified version v{specifiedLeptonXVersion} does not exist!");
+ }
}
else
{
- Logger.LogWarning("Package \"{PackageId}\" specified version v{SpecifiedVersion} does not exist!", packageId, specifiedVersion);
+ if (await SpecifiedVersionExists(specifiedVersion, packageId))
+ {
+ TryUpdatingPackage(specifiedVersion);
+ }
+ else
+ {
+ Logger.LogWarning($"Package \"{packageId}\" specified version v{specifiedVersion} does not exist!");
+ }
}
void TryUpdatingPackage(string versionToUpdate)
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs
index bc67fac38f..3d6fa77208 100644
--- a/framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Content/RemoteStreamContent.cs
@@ -17,7 +17,6 @@ public class RemoteStreamContent : IRemoteStreamContent
public RemoteStreamContent(Stream stream, string? fileName = null, string? contentType = null, long? readOnlyLength = null, bool disposeStream = true)
{
_stream = stream;
-
FileName = fileName;
if (contentType != null)
{
@@ -34,10 +33,16 @@ public class RemoteStreamContent : IRemoteStreamContent
public virtual void Dispose()
{
- if (!_disposed && _disposeStream)
+ if (_disposed)
{
- _disposed = true;
- _stream?.Dispose();
+ return;
}
+
+ if (_disposeStream)
+ {
+ _stream.Dispose();
+ }
+
+ _disposed = true;
}
}
diff --git a/framework/src/Volo.Abp.Ddd.Domain.Shared/Volo/Abp/Domain/Entities/Events/Distributed/AbpDistributedEntityEventOptions.cs b/framework/src/Volo.Abp.Ddd.Domain.Shared/Volo/Abp/Domain/Entities/Events/Distributed/AbpDistributedEntityEventOptions.cs
index 19af763c85..8109d945bc 100644
--- a/framework/src/Volo.Abp.Ddd.Domain.Shared/Volo/Abp/Domain/Entities/Events/Distributed/AbpDistributedEntityEventOptions.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain.Shared/Volo/Abp/Domain/Entities/Events/Distributed/AbpDistributedEntityEventOptions.cs
@@ -4,11 +4,14 @@ public class AbpDistributedEntityEventOptions
{
public IAutoEntityDistributedEventSelectorList AutoEventSelectors { get; }
+ public IAutoEntityDistributedEventSelectorList IgnoredEventSelectors { get; }
+
public EtoMappingDictionary EtoMappings { get; set; }
public AbpDistributedEntityEventOptions()
{
AutoEventSelectors = new AutoEntityDistributedEventSelectorList();
+ IgnoredEventSelectors = new AutoEntityDistributedEventSelectorList();
EtoMappings = new EtoMappingDictionary();
}
}
diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs
index 44eb5c058a..eb16a6910c 100644
--- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs
+++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs
@@ -68,13 +68,9 @@ public class EntityChangeEventHelper : IEntityChangeEventHelper, ITransientDepen
private bool ShouldPublishDistributedEventForEntity(object entity)
{
- return DistributedEntityEventOptions
- .AutoEventSelectors
- .IsMatch(
- ProxyHelper
- .UnProxy(entity)
- .GetType()
- );
+ var entityType = ProxyHelper.UnProxy(entity).GetType();
+ return !DistributedEntityEventOptions.IgnoredEventSelectors.IsMatch(entityType) &&
+ DistributedEntityEventOptions.AutoEventSelectors.IsMatch(entityType);
}
public virtual void PublishEntityUpdatedEvent(object entity)
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs
index c98ef478d4..6af11ebeca 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpEntityFrameworkCoreModule.cs
@@ -2,6 +2,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Domain;
+using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EntityFrameworkCore.DistributedEvents;
using Volo.Abp.Modularity;
using Volo.Abp.Uow.EntityFrameworkCore;
@@ -28,5 +29,11 @@ public class AbpEntityFrameworkCoreModule : AbpModule
context.Services.TryAddTransient(typeof(IDbContextProvider<>), typeof(UnitOfWorkDbContextProvider<>));
context.Services.AddTransient(typeof(IDbContextEventOutbox<>), typeof(DbContextEventOutbox<>));
context.Services.AddTransient(typeof(IDbContextEventInbox<>), typeof(DbContextEventInbox<>));
+
+ Configure(options =>
+ {
+ options.IgnoredEventSelectors.Add();
+ options.IgnoredEventSelectors.Add();
+ });
}
}
diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs
index b8d2b763df..619cf5685f 100644
--- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs
+++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using Microsoft.Extensions.FileProviders;
-using Microsoft.Extensions.FileProviders.Physical;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Modeling;
using Volo.Abp.Json;
@@ -29,17 +28,17 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder,
Initialize();
}
- public ActionApiDescriptionModel? FindAction(string methodName)
+ public virtual ActionApiDescriptionModel? FindAction(string methodName)
{
- return ActionApiDescriptionModels.ContainsKey(methodName) ? ActionApiDescriptionModels[methodName] : null;
+ return ActionApiDescriptionModels.TryGetValue(methodName, out var model) ? model : null;
}
- public ApplicationApiDescriptionModel GetApiDescription()
+ public virtual ApplicationApiDescriptionModel GetApiDescription()
{
return ApplicationApiDescriptionModel;
}
- private void Initialize()
+ protected virtual void Initialize()
{
ApplicationApiDescriptionModel = GetApplicationApiDescriptionModel();
var controllers = ApplicationApiDescriptionModel.Modules.Select(x => x.Value).SelectMany(x => x.Controllers.Values).ToList();
@@ -51,7 +50,6 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder,
foreach (var actionItem in controller.Actions.Values)
{
var actionKey = $"{appServiceType}.{actionItem.Name}.{string.Join("-", actionItem.ParametersOnMethod.Select(x => x.Type))}";
-
if (!ActionApiDescriptionModels.ContainsKey(actionKey))
{
ActionApiDescriptionModels.Add(actionKey, actionItem);
@@ -60,7 +58,7 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder,
}
}
- private ApplicationApiDescriptionModel GetApplicationApiDescriptionModel()
+ protected virtual ApplicationApiDescriptionModel GetApplicationApiDescriptionModel()
{
var applicationApiDescription = ApplicationApiDescriptionModel.Create();
var fileInfoList = new List();
@@ -87,41 +85,21 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder,
return applicationApiDescription;
}
- private void GetGenerateProxyFileInfos(List fileInfoList, string path = "")
+ protected virtual void GetGenerateProxyFileInfos(List fileInfoList, string path = "")
{
- foreach (var directoryContent in VirtualFileProvider.GetDirectoryContents(path))
+ foreach (var fileInfo in VirtualFileProvider.GetDirectoryContents(path))
{
- if (directoryContent.IsDirectory)
+ if (fileInfo.IsDirectory)
{
- GetGenerateProxyFileInfos(fileInfoList, GetDirectoryContentPath(path, directoryContent));
+ GetGenerateProxyFileInfos(fileInfoList, path + fileInfo.Name.EnsureStartsWith('/'));
}
else
{
- if (directoryContent.Name.EndsWith("generate-proxy.json"))
+ if (fileInfo.Name.EndsWith("generate-proxy.json", StringComparison.OrdinalIgnoreCase))
{
- fileInfoList.Add(VirtualFileProvider.GetFileInfo(GetProxyFileInfoPath(path, directoryContent)));
+ fileInfoList.Add(fileInfo);
}
}
}
}
-
- private string GetDirectoryContentPath(string rootPath, IFileInfo fileInfo)
- {
- if (fileInfo is PhysicalDirectoryInfo physicalDirectoryInfo)
- {
- return rootPath + physicalDirectoryInfo.Name.EnsureStartsWith('/');
- }
-
- return fileInfo.PhysicalPath!;
- }
-
- private string GetProxyFileInfoPath(string rootPath, IFileInfo fileInfo)
- {
- if (fileInfo is PhysicalFileInfo physicalFileInfo)
- {
- return rootPath + physicalFileInfo.Name.EnsureStartsWith('/');
- }
-
- return fileInfo.GetVirtualOrPhysicalPathOrNull()!;
- }
}
diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs
index 01c1e2a720..d09f97b24c 100644
--- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs
+++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs
@@ -20,6 +20,7 @@ using Volo.Abp.Json;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Reflection;
using Volo.Abp.Threading;
+using Volo.Abp.Timing;
using Volo.Abp.Tracing;
namespace Volo.Abp.Http.Client.ClientProxying;
@@ -33,6 +34,7 @@ public class ClientProxyBase : ITransientDependency
protected ICorrelationIdProvider CorrelationIdProvider => LazyServiceProvider.LazyGetRequiredService();
protected ICurrentTenant CurrentTenant => LazyServiceProvider.LazyGetRequiredService();
protected IOptions AbpCorrelationIdOptions => LazyServiceProvider.LazyGetRequiredService>();
+ protected ICurrentTimezoneProvider CurrentTimezoneProvider => LazyServiceProvider.LazyGetRequiredService();
protected IProxyHttpClientFactory HttpClientFactory => LazyServiceProvider.LazyGetRequiredService();
protected IRemoteServiceConfigurationProvider RemoteServiceConfigurationProvider => LazyServiceProvider.LazyGetRequiredService();
protected IOptions ClientOptions => LazyServiceProvider.LazyGetRequiredService>();
@@ -337,6 +339,12 @@ public class ClientProxyBase : ITransientDependency
//X-Requested-With
requestMessage.Headers.Add("X-Requested-With", "XMLHttpRequest");
+
+ //Timezone
+ if (!CurrentTimezoneProvider.TimeZone.IsNullOrWhiteSpace())
+ {
+ requestMessage.Headers.Add(TimeZoneConsts.DefaultTimeZoneKey, CurrentTimezoneProvider.TimeZone);
+ }
}
protected virtual StringSegment RemoveQuotes(StringSegment input)
diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs
index c24404918e..91fc6f33bf 100644
--- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs
+++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs
@@ -15,6 +15,7 @@ using Volo.Abp.Http.Client.Proxying;
using Volo.Abp.Http.Modeling;
using Volo.Abp.Http.ProxyScripting.Generators;
using Volo.Abp.Json;
+using Volo.Abp.Timing;
namespace Volo.Abp.Http.Client.ClientProxying;
@@ -33,9 +34,15 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency
protected AbpHttpClientProxyingOptions HttpClientProxyingOptions { get; }
- public ClientProxyRequestPayloadBuilder(IServiceScopeFactory serviceScopeFactory, IOptions httpClientProxyingOptions)
+ protected IClock Clock { get; }
+
+ public ClientProxyRequestPayloadBuilder(
+ IServiceScopeFactory serviceScopeFactory,
+ IOptions httpClientProxyingOptions,
+ IClock clock)
{
ServiceScopeFactory = serviceScopeFactory;
+ Clock = clock;
HttpClientProxyingOptions = httpClientProxyingOptions.Value;
}
@@ -156,12 +163,12 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency
{
foreach (var item in (IEnumerable) value)
{
- formData.Add(new StringContent(item.ToString()!, Encoding.UTF8), parameter.Name);
+ formData.Add(new StringContent(await ConvertValueToStringAsync(item), Encoding.UTF8), parameter.Name);
}
}
else
{
- formData.Add(new StringContent(value.ToString()!, Encoding.UTF8), parameter.Name);
+ formData.Add(new StringContent(await ConvertValueToStringAsync(value), Encoding.UTF8), parameter.Name);
}
}
@@ -172,4 +179,19 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency
{
return await converter.ConvertAsync(actionApiDescription, parameterApiDescription, value);
}
+
+ protected virtual Task ConvertValueToStringAsync(object value)
+ {
+ if (value is DateTime dateTimeValue)
+ {
+ if (Clock.SupportsMultipleTimezone || dateTimeValue.Kind == DateTimeKind.Utc)
+ {
+ return Task.FromResult(dateTimeValue.ToUniversalTime().ToString("O"));
+ }
+
+ return Task.FromResult(dateTimeValue.ToString("yyyy-MM-ddTHH:mm:ss.fffffff").TrimEnd('0').TrimEnd('.'));
+ }
+
+ return Task.FromResult(value.ToString()!);
+ }
}
diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs
index 65703dc56b..5be598af20 100644
--- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs
+++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs
@@ -14,6 +14,7 @@ using Volo.Abp.Http.Client.Proxying;
using Volo.Abp.Http.Modeling;
using Volo.Abp.Http.ProxyScripting.Generators;
using Volo.Abp.Localization;
+using Volo.Abp.Timing;
namespace Volo.Abp.Http.Client.ClientProxying;
@@ -36,11 +37,16 @@ public class ClientProxyUrlBuilder : ITransientDependency
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected AbpHttpClientProxyingOptions HttpClientProxyingOptions { get; }
+ protected IClock Clock { get; }
- public ClientProxyUrlBuilder(IServiceScopeFactory serviceScopeFactory, IOptions httpClientProxyingOptions)
+ public ClientProxyUrlBuilder(
+ IServiceScopeFactory serviceScopeFactory,
+ IOptions httpClientProxyingOptions,
+ IClock clock)
{
ServiceScopeFactory = serviceScopeFactory;
HttpClientProxyingOptions = httpClientProxyingOptions.Value;
+ Clock = clock;
}
public async Task GenerateUrlWithParametersAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion)
@@ -218,13 +224,18 @@ public class ClientProxyUrlBuilder : ITransientDependency
return true;
}
- protected virtual Task ConvertValueToStringAsync(object? value)
+ protected virtual Task ConvertValueToStringAsync(object value)
{
if (value is DateTime dateTimeValue)
{
- return Task.FromResult(dateTimeValue.ToUniversalTime().ToString("O"))!;
+ if (Clock.SupportsMultipleTimezone || dateTimeValue.Kind == DateTimeKind.Utc)
+ {
+ return Task.FromResult(dateTimeValue.ToUniversalTime().ToString("O"));
+ }
+
+ return Task.FromResult(dateTimeValue.ToString("yyyy-MM-ddTHH:mm:ss.fffffff").TrimEnd('0').TrimEnd('.'));
}
- return Task.FromResult(value?.ToString());
+ return Task.FromResult(value.ToString()!);
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpDateTimeConverter.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpDateTimeConverter.cs
index effda40057..c95660e484 100644
--- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpDateTimeConverter.cs
+++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpDateTimeConverter.cs
@@ -19,6 +19,7 @@ public class AbpDateTimeConverter : DateTimeConverterBase, ITransientDependency
private readonly CultureInfo _culture = CultureInfo.InvariantCulture;
private readonly IClock _clock;
private readonly AbpJsonOptions _options;
+ private bool _skipDateTimeNormalization;
public AbpDateTimeConverter(IClock clock, IOptions options)
{
@@ -26,6 +27,12 @@ public class AbpDateTimeConverter : DateTimeConverterBase, ITransientDependency
_options = options.Value;
}
+ public virtual AbpDateTimeConverter SkipDateTimeNormalization()
+ {
+ _skipDateTimeNormalization = true;
+ return this;
+ }
+
public override bool CanConvert(Type objectType)
{
return objectType == typeof(DateTime) || objectType == typeof(DateTime?);
@@ -46,7 +53,7 @@ public class AbpDateTimeConverter : DateTimeConverterBase, ITransientDependency
if (reader.TokenType == JsonToken.Date)
{
- return _clock.Normalize(reader.Value!.To());
+ return Normalize(reader.Value!.To());
}
if (reader.TokenType != JsonToken.String)
@@ -67,20 +74,20 @@ public class AbpDateTimeConverter : DateTimeConverterBase, ITransientDependency
{
if (DateTime.TryParseExact(dateText, format, _culture, _dateTimeStyles, out var d1))
{
- return _clock.Normalize(d1);
+ return Normalize(d1);
}
}
}
var date = DateTime.Parse(dateText!, _culture, _dateTimeStyles);
- return _clock.Normalize(date);
+ return Normalize(date);
}
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
{
if (value != null)
{
- value = _clock.Normalize(value.To());
+ value = Normalize(value.To());
}
if (value is DateTime dateTime)
@@ -111,4 +118,11 @@ public class AbpDateTimeConverter : DateTimeConverterBase, ITransientDependency
return ReflectionHelper.GetSingleAttributeOfMemberOrDeclaringTypeOrDefault(member) == null;
}
+
+ protected virtual DateTime Normalize(DateTime dateTime)
+ {
+ return _skipDateTimeNormalization
+ ? dateTime
+ : _clock.Normalize(dateTime);
+ }
}
diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonNewtonsoftModule.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonNewtonsoftModule.cs
index 6f93a6c54e..ea35831d86 100644
--- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonNewtonsoftModule.cs
+++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonNewtonsoftModule.cs
@@ -13,7 +13,8 @@ public class AbpJsonNewtonsoftModule : AbpModule
context.Services.AddOptions()
.Configure((options, rootServiceProvider) =>
{
- options.JsonSerializerSettings.ContractResolver = new AbpCamelCasePropertyNamesContractResolver(rootServiceProvider.GetRequiredService());
+ options.JsonSerializerSettings.ContractResolver = new AbpCamelCasePropertyNamesContractResolver(
+ rootServiceProvider.GetRequiredService().SkipDateTimeNormalization());
});
}
}
diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializer.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializer.cs
index 0450064f2f..8184ee6d45 100644
--- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializer.cs
+++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializer.cs
@@ -86,7 +86,8 @@ public class AbpNewtonsoftJsonSerializer : IJsonSerializer, ITransientDependency
if (!camelCase)
{
//Default contract resolver is AbpCamelCasePropertyNamesContractResolver}
- settings.ContractResolver = new AbpDefaultContractResolver(RootServiceProvider.GetRequiredService());
+ settings.ContractResolver = new AbpDefaultContractResolver(RootServiceProvider
+ .GetRequiredService().SkipDateTimeNormalization());
}
if (indented)
diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs
index 498dedd8cd..0a5066cec1 100644
--- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs
+++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpJsonSystemTextJsonModule.cs
@@ -29,14 +29,13 @@ public class AbpJsonSystemTextJsonModule : AbpModule
options.JsonSerializerOptions.TypeInfoResolver = new AbpDefaultJsonTypeInfoResolver(rootServiceProvider
.GetRequiredService>());
- });
- context.Services.AddOptions()
- .Configure((options, rootServiceProvider) =>
- {
- options.Modifiers.Add(new AbpDateTimeConverterModifier(
- rootServiceProvider.GetRequiredService(),
- rootServiceProvider.GetRequiredService()).CreateModifyAction());
+ var dateTimeConverter = rootServiceProvider.GetRequiredService().SkipDateTimeNormalization();
+ var nullableDateTimeConverter = rootServiceProvider.GetRequiredService().SkipDateTimeNormalization();
+
+ options.JsonSerializerOptions.TypeInfoResolver.As().Modifiers.Add(
+ new AbpDateTimeConverterModifier(dateTimeConverter, nullableDateTimeConverter)
+ .CreateModifyAction());
});
}
}
diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializer.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializer.cs
index 6f433ce918..7f72f0de71 100644
--- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializer.cs
+++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpSystemTextJsonSerializer.cs
@@ -40,21 +40,10 @@ public class AbpSystemTextJsonSerializer : IJsonSerializer, ITransientDependency
camelCase,
indented,
Options.JsonSerializerOptions
- }, _ =>
+ }, _ => new JsonSerializerOptions(Options.JsonSerializerOptions)
{
- var settings = new JsonSerializerOptions(Options.JsonSerializerOptions);
-
- if (camelCase)
- {
- settings.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
- }
-
- if (indented)
- {
- settings.WriteIndented = true;
- }
-
- return settings;
+ PropertyNamingPolicy = camelCase ? JsonNamingPolicy.CamelCase : null,
+ WriteIndented = indented
});
}
}
diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs
index a8653bb54a..3feea8d299 100644
--- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs
+++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpDateTimeConverter.cs
@@ -13,6 +13,7 @@ public class AbpDateTimeConverter : JsonConverter, ITransientDependenc
{
private readonly IClock _clock;
private readonly AbpJsonOptions _options;
+ private bool _skipDateTimeNormalization;
public AbpDateTimeConverter(IClock clock, IOptions abpJsonOptions)
{
@@ -20,6 +21,12 @@ public class AbpDateTimeConverter : JsonConverter, ITransientDependenc
_options = abpJsonOptions.Value;
}
+ public virtual AbpDateTimeConverter SkipDateTimeNormalization()
+ {
+ _skipDateTimeNormalization = true;
+ return this;
+ }
+
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (_options.InputDateTimeFormats.Any())
@@ -31,7 +38,7 @@ public class AbpDateTimeConverter : JsonConverter, ITransientDependenc
var s = reader.GetString();
if (DateTime.TryParseExact(s, format, CultureInfo.CurrentUICulture, DateTimeStyles.None, out var d1))
{
- return _clock.Normalize(d1);
+ return Normalize(d1);
}
}
}
@@ -43,7 +50,7 @@ public class AbpDateTimeConverter : JsonConverter, ITransientDependenc
if (reader.TryGetDateTime(out var d3))
{
- return _clock.Normalize(d3);
+ return Normalize(d3);
}
var dateText = reader.GetString();
@@ -51,7 +58,7 @@ public class AbpDateTimeConverter : JsonConverter, ITransientDependenc
{
if (DateTime.TryParse(dateText, CultureInfo.CurrentUICulture, DateTimeStyles.None, out var d4))
{
- return _clock.Normalize(d4);
+ return Normalize(d4);
}
}
@@ -62,11 +69,16 @@ public class AbpDateTimeConverter : JsonConverter, ITransientDependenc
{
if (_options.OutputDateTimeFormat.IsNullOrWhiteSpace())
{
- writer.WriteStringValue(_clock.Normalize(value));
+ writer.WriteStringValue(Normalize(value));
}
else
{
- writer.WriteStringValue(_clock.Normalize(value).ToString(_options.OutputDateTimeFormat, CultureInfo.CurrentUICulture));
+ writer.WriteStringValue(Normalize(value).ToString(_options.OutputDateTimeFormat, CultureInfo.CurrentUICulture));
}
}
+
+ protected virtual DateTime Normalize(DateTime dateTime)
+ {
+ return _skipDateTimeNormalization ? dateTime : _clock.Normalize(dateTime);
+ }
}
diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs
index e8a94892da..e73f39d097 100644
--- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs
+++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpNullableDateTimeConverter.cs
@@ -13,6 +13,7 @@ public class AbpNullableDateTimeConverter : JsonConverter, ITransient
{
private readonly IClock _clock;
private readonly AbpJsonOptions _options;
+ private bool _skipDateTimeNormalization;
public AbpNullableDateTimeConverter(IClock clock, IOptions abpJsonOptions)
{
@@ -20,6 +21,12 @@ public class AbpNullableDateTimeConverter : JsonConverter, ITransient
_options = abpJsonOptions.Value;
}
+ public virtual AbpNullableDateTimeConverter SkipDateTimeNormalization()
+ {
+ _skipDateTimeNormalization = true;
+ return this;
+ }
+
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (_options.InputDateTimeFormats.Any())
@@ -31,7 +38,7 @@ public class AbpNullableDateTimeConverter : JsonConverter, ITransient
var s = reader.GetString();
if (DateTime.TryParseExact(s, format, CultureInfo.CurrentUICulture, DateTimeStyles.None, out var d1))
{
- return _clock.Normalize(d1);
+ return Normalize(d1);
}
}
}
@@ -43,7 +50,7 @@ public class AbpNullableDateTimeConverter : JsonConverter, ITransient
if (reader.TryGetDateTime(out var d2))
{
- return _clock.Normalize(d2);
+ return Normalize(d2);
}
var dateText = reader.GetString();
@@ -51,7 +58,7 @@ public class AbpNullableDateTimeConverter : JsonConverter, ITransient
{
if (DateTime.TryParse(dateText, CultureInfo.CurrentUICulture, DateTimeStyles.None, out var d3))
{
- return _clock.Normalize(d3);
+ return Normalize(d3);
}
}
@@ -68,12 +75,17 @@ public class AbpNullableDateTimeConverter : JsonConverter, ITransient
{
if (_options.OutputDateTimeFormat.IsNullOrWhiteSpace())
{
- writer.WriteStringValue(_clock.Normalize(value.Value));
+ writer.WriteStringValue(Normalize(value.Value));
}
else
{
- writer.WriteStringValue(_clock.Normalize(value.Value).ToString(_options.OutputDateTimeFormat, CultureInfo.CurrentUICulture));
+ writer.WriteStringValue(Normalize(value.Value).ToString(_options.OutputDateTimeFormat, CultureInfo.CurrentUICulture));
}
}
}
+
+ protected virtual DateTime Normalize(DateTime dateTime)
+ {
+ return _skipDateTimeNormalization ? dateTime : _clock.Normalize(dateTime);
+ }
}
diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpGuidCustomBsonTypeMapper.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpGuidCustomBsonTypeMapper.cs
new file mode 100644
index 0000000000..4cfacc39fd
--- /dev/null
+++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpGuidCustomBsonTypeMapper.cs
@@ -0,0 +1,13 @@
+using System;
+using MongoDB.Bson;
+
+namespace Volo.Abp.MongoDB;
+
+public class AbpGuidCustomBsonTypeMapper : ICustomBsonTypeMapper
+{
+ public bool TryMapToBsonValue(object value, out BsonValue bsonValue)
+ {
+ bsonValue = new BsonBinaryData((Guid)value, GuidRepresentation.Standard);
+ return true;
+ }
+}
diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs
index 91d2808010..195491d989 100644
--- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs
+++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs
@@ -1,9 +1,11 @@
-using Microsoft.Extensions.DependencyInjection;
+using System;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;
using Volo.Abp.Domain;
+using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.Modularity;
using Volo.Abp.MongoDB.DependencyInjection;
@@ -15,6 +17,12 @@ namespace Volo.Abp.MongoDB;
[DependsOn(typeof(AbpDddDomainModule))]
public class AbpMongoDbModule : AbpModule
{
+ static AbpMongoDbModule()
+ {
+ BsonSerializer.TryRegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));
+ BsonTypeMapper.RegisterCustomTypeMapper(typeof(Guid), new AbpGuidCustomBsonTypeMapper());
+ }
+
public override void PreConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddConventionalRegistrar(new AbpMongoDbConventionalRegistrar());
@@ -22,8 +30,6 @@ public class AbpMongoDbModule : AbpModule
public override void ConfigureServices(ServiceConfigurationContext context)
{
- BsonSerializer.TryRegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));
-
context.Services.TryAddTransient(
typeof(IMongoDbContextProvider<>),
typeof(UnitOfWorkMongoDbContextProvider<>)
@@ -48,5 +54,11 @@ public class AbpMongoDbModule : AbpModule
typeof(IMongoDbContextEventInbox<>),
typeof(MongoDbContextEventInbox<>)
);
+
+ Configure(options =>
+ {
+ options.IgnoredEventSelectors.Add();
+ options.IgnoredEventSelectors.Add();
+ });
}
}
diff --git a/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj b/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj
index 58c2dc3693..d62ba9c65d 100644
--- a/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj
+++ b/framework/src/Volo.Abp.Swashbuckle/Volo.Abp.Swashbuckle.csproj
@@ -30,6 +30,8 @@
+
+
diff --git a/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/oauth2-redirect.html b/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/oauth2-redirect.html
new file mode 100644
index 0000000000..ef47009856
--- /dev/null
+++ b/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/oauth2-redirect.html
@@ -0,0 +1,39 @@
+
+
+
+ Swagger UI: OAuth2 Redirect
+
+
+
+
+
diff --git a/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js b/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js
index b8abb0df25..db054056d1 100644
--- a/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js
+++ b/framework/src/Volo.Abp.Swashbuckle/wwwroot/swagger/ui/abp.swagger.js
@@ -1,9 +1,9 @@
var abp = abp || {};
(function () {
-
+
var oldSwaggerUIBundle = SwaggerUIBundle;
-
+
SwaggerUIBundle = function (configObject) {
var excludeUrl = ["swagger.json", "connect/token"]
var firstRequest = true;
@@ -112,7 +112,57 @@ var abp = abp || {};
return oldSwaggerUIBundle(configObject);
}
-
+
SwaggerUIBundle = Object.assign(SwaggerUIBundle, oldSwaggerUIBundle);
-
+
+ window.addEventListener("storage", function (event) {
+ if (event.key !== "abp_swagger_oauth2" || !event.newValue) {
+ return;
+ }
+
+ var qp = JSON.parse(event.newValue || "{}");
+ localStorage.removeItem("abp_swagger_oauth2");
+ var oauth2 = window.swaggerUIRedirectOauth2;
+ var sentState = oauth2.state;
+ var redirectUrl = oauth2.redirectUrl;
+ var isValid = qp.state === sentState;
+
+ if ((
+ oauth2.auth.schema.get("flow") === "accessCode" ||
+ oauth2.auth.schema.get("flow") === "authorizationCode" ||
+ oauth2.auth.schema.get("flow") === "authorization_code"
+ ) && !oauth2.auth.code) {
+ if (!isValid) {
+ oauth2.errCb({
+ authId: oauth2.auth.name,
+ source: "auth",
+ level: "warning",
+ message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
+ });
+ }
+
+ if (qp.code) {
+ delete oauth2.state;
+ oauth2.auth.code = qp.code;
+ oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
+ } else {
+ let oauthErrorMsg;
+ if (qp.error) {
+ oauthErrorMsg = "["+qp.error+"]: " +
+ (qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
+ (qp.error_uri ? "More info: "+qp.error_uri : "");
+ }
+
+ oauth2.errCb({
+ authId: oauth2.auth.name,
+ source: "auth",
+ level: "error",
+ message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
+ });
+ }
+ } else {
+ oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});
+ }
+ });
+
})();
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Clock.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Clock.cs
index 8788a2b5db..36bee9e8fd 100644
--- a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Clock.cs
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Clock.cs
@@ -7,9 +7,16 @@ namespace Volo.Abp.Timing;
public class Clock : IClock, ITransientDependency
{
protected AbpClockOptions Options { get; }
+ protected ICurrentTimezoneProvider CurrentTimezoneProvider { get; }
+ protected ITimezoneProvider TimezoneProvider { get; }
- public Clock(IOptions options)
+ public Clock(
+ IOptions options,
+ ICurrentTimezoneProvider currentTimezoneProvider,
+ ITimezoneProvider timezoneProvider)
{
+ CurrentTimezoneProvider = currentTimezoneProvider;
+ TimezoneProvider = timezoneProvider;
Options = options.Value;
}
@@ -19,6 +26,11 @@ public class Clock : IClock, ITransientDependency
public virtual bool SupportsMultipleTimezone => Options.Kind == DateTimeKind.Utc;
+ ///
+ /// Normalizes given .
+ ///
+ /// DateTime to be normalized.
+ /// Normalized DateTime
public virtual DateTime Normalize(DateTime dateTime)
{
if (Kind == DateTimeKind.Unspecified || Kind == dateTime.Kind)
@@ -38,4 +50,58 @@ public class Clock : IClock, ITransientDependency
return DateTime.SpecifyKind(dateTime, Kind);
}
+
+ ///
+ /// Converts given UTC to user's time zone.
+ ///
+ /// DateTime to be normalized.
+ /// Converted DateTime
+ public virtual DateTime ConvertToUserTime(DateTime utcDateTime)
+ {
+ if (!SupportsMultipleTimezone ||
+ utcDateTime.Kind != DateTimeKind.Utc ||
+ CurrentTimezoneProvider.TimeZone.IsNullOrWhiteSpace())
+ {
+ return utcDateTime;
+ }
+
+ var timezoneInfo = TimezoneProvider.GetTimeZoneInfo(CurrentTimezoneProvider.TimeZone);
+ return TimeZoneInfo.ConvertTime(utcDateTime, timezoneInfo);
+ }
+
+ ///
+ /// Converts given to user's time zone.
+ ///
+ /// DateTimeOffset to be normalized.
+ /// Converted DateTimeOffset
+ public virtual DateTimeOffset ConvertToUserTime(DateTimeOffset dateTimeOffset)
+ {
+ if (!SupportsMultipleTimezone ||
+ CurrentTimezoneProvider.TimeZone.IsNullOrWhiteSpace())
+ {
+ return dateTimeOffset;
+ }
+
+ var timezoneInfo = TimezoneProvider.GetTimeZoneInfo(CurrentTimezoneProvider.TimeZone);
+ return TimeZoneInfo.ConvertTime(dateTimeOffset, timezoneInfo);
+ }
+
+ ///
+ /// Converts given to UTC if the given time is not UTC and the current clock provider supports multiple time zones.
+ ///
+ /// DateTime to be normalized.
+ /// Converted DateTime
+ public DateTime ConvertToUtc(DateTime dateTime)
+ {
+ if (!SupportsMultipleTimezone ||
+ dateTime.Kind == DateTimeKind.Utc ||
+ CurrentTimezoneProvider.TimeZone.IsNullOrWhiteSpace())
+ {
+ return dateTime;
+ }
+
+ var timezoneInfo = TimezoneProvider.GetTimeZoneInfo(CurrentTimezoneProvider.TimeZone);
+ dateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified);
+ return TimeZoneInfo.ConvertTimeToUtc(dateTime, timezoneInfo);
+ }
}
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/CurrentTimezoneProvider.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/CurrentTimezoneProvider.cs
new file mode 100644
index 0000000000..12781d4321
--- /dev/null
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/CurrentTimezoneProvider.cs
@@ -0,0 +1,20 @@
+using System.Threading;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.Timing;
+
+public class CurrentTimezoneProvider : ICurrentTimezoneProvider, ISingletonDependency
+{
+ public string? TimeZone
+ {
+ get => _currentScope.Value;
+ set => _currentScope.Value = value;
+ }
+
+ private readonly AsyncLocal _currentScope;
+
+ public CurrentTimezoneProvider()
+ {
+ _currentScope = new AsyncLocal();
+ }
+}
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/CurrentTimezoneProviderExtensions.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/CurrentTimezoneProviderExtensions.cs
new file mode 100644
index 0000000000..2fc79289ad
--- /dev/null
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/CurrentTimezoneProviderExtensions.cs
@@ -0,0 +1,18 @@
+using System;
+
+namespace Volo.Abp.Timing;
+
+public static class CurrentTimezoneProviderExtensions
+{
+ public static IDisposable Change(this ICurrentTimezoneProvider currentTimezoneProvider, string? timeZone)
+ {
+ var parentScope = currentTimezoneProvider.TimeZone;
+ currentTimezoneProvider.TimeZone = timeZone;
+
+ return new DisposeAction>(static (state) =>
+ {
+ var (currentTimezoneProvider, parentScope) = state;
+ currentTimezoneProvider.TimeZone = parentScope;
+ }, (currentTimezoneProvider, parentScope));
+ }
+}
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/IClientTimezoneProvider.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/IClientTimezoneProvider.cs
new file mode 100644
index 0000000000..69c2835adc
--- /dev/null
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/IClientTimezoneProvider.cs
@@ -0,0 +1,6 @@
+namespace Volo.Abp.Timing;
+
+public interface ICurrentTimezoneProvider
+{
+ string? TimeZone { get; set; }
+}
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/IClock.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/IClock.cs
index 33db4b45a8..7bf83dc7e0 100644
--- a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/IClock.cs
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/IClock.cs
@@ -25,4 +25,25 @@ public interface IClock
/// DateTime to be normalized.
/// Normalized DateTime
DateTime Normalize(DateTime dateTime);
+
+ ///
+ /// Converts given UTC to user's time zone.
+ ///
+ /// DateTime to be normalized.
+ /// Converted DateTime
+ DateTime ConvertToUserTime(DateTime utcDateTime);
+
+ ///
+ /// Converts given to user's time zone.
+ ///
+ /// DateTimeOffset to be normalized.
+ /// Converted DateTimeOffset
+ DateTimeOffset ConvertToUserTime(DateTimeOffset dateTimeOffset);
+
+ ///
+ /// Converts given to UTC if the given time is not UTC and the current clock provider supports multiple time zones.
+ ///
+ /// DateTime to be normalized.
+ /// Converted DateTime
+ DateTime ConvertToUtc(DateTime dateTime);
}
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TZConvertTimezoneProvider.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TZConvertTimezoneProvider.cs
index 70d19090e2..565c04c6fa 100644
--- a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TZConvertTimezoneProvider.cs
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TZConvertTimezoneProvider.cs
@@ -15,7 +15,7 @@ public class TZConvertTimezoneProvider : ITimezoneProvider, ITransientDependency
public virtual List GetIanaTimezones()
{
- return TZConvert.KnownIanaTimeZoneNames.OrderBy(x => x).Select(x => new NameValue(x, x)).ToList();
+ return TZConvert.KnownIanaTimeZoneNames.OrderBy(x => x).Where(x => x.Contains("/") && !x.Contains("Etc") || x == "UTC").Select(x => new NameValue(x, x)).ToList();
}
public virtual string WindowsToIana(string windowsTimeZoneId)
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TimeZoneConsts.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TimeZoneConsts.cs
new file mode 100644
index 0000000000..211247f5aa
--- /dev/null
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TimeZoneConsts.cs
@@ -0,0 +1,6 @@
+namespace Volo.Abp.Timing;
+
+public class TimeZoneConsts
+{
+ public const string DefaultTimeZoneKey = "__timezone";
+}
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TimingSettingProvider.cs b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TimingSettingProvider.cs
index 066747df94..343e20feb5 100644
--- a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TimingSettingProvider.cs
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/TimingSettingProvider.cs
@@ -10,7 +10,7 @@ public class TimingSettingProvider : SettingDefinitionProvider
{
context.Add(
new SettingDefinition(TimingSettingNames.TimeZone,
- "UTC",
+ "",
L("DisplayName:Abp.Timing.Timezone"),
L("Description:Abp.Timing.Timezone"),
isVisibleToClients: true)
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
index 0e13746d66..1c705d8df3 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
@@ -159,6 +159,7 @@ public class AbpAspNetCoreMvcTestModule : AbpModule
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
+ app.UseAbpTimeZone();
app.UseAuditing();
app.UseUnitOfWork();
app.UseConfiguredEndpoints();
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Timing/AbpTimeZoneMiddleware_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Timing/AbpTimeZoneMiddleware_Tests.cs
new file mode 100644
index 0000000000..7f12e5a07d
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Timing/AbpTimeZoneMiddleware_Tests.cs
@@ -0,0 +1,149 @@
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using NSubstitute;
+using Shouldly;
+using Volo.Abp.Settings;
+using Volo.Abp.Timing;
+using Xunit;
+
+namespace Volo.Abp.AspNetCore.Mvc.Timing;
+
+public class AbpTimeZoneMiddleware_Tests : AspNetCoreMvcTestBase
+{
+ private readonly ICurrentTimezoneProvider _currentTimezoneProvider;
+ private readonly ITimezoneProvider _timezoneProvider;
+ public AbpTimeZoneMiddleware_Tests()
+ {
+ _currentTimezoneProvider = GetRequiredService();
+ _timezoneProvider = GetRequiredService();
+ }
+
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ services.Configure(options =>
+ {
+ options.Kind = DateTimeKind.Utc;
+ });
+ }
+
+ [Fact]
+ public async Task Should_Override_TimeZone_Setting_By_Request()
+ {
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ var result = await Client.GetStringAsync("api/timing-test");
+ result.ShouldBe(GetLocalTimeZone());
+ }
+
+ // Query string
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ var result = await Client.GetStringAsync("api/timing-test?__timezone=Europe/Istanbul");
+ result.ShouldBe("Europe/Istanbul");
+ }
+
+ // Header
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ Client.DefaultRequestHeaders.Add("__timezone", "Asia/Shanghai");
+ var result = await Client.GetStringAsync("api/timing-test");
+ result.ShouldBe("Asia/Shanghai");
+ }
+
+ // Form
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ Client.DefaultRequestHeaders.Remove("__timezone");
+ var result = await Client.PostAsync("api/timing-test", new FormUrlEncodedContent(new[] {new KeyValuePair("__timezone", "Europe/Germany")}));
+ (await result.Content.ReadAsStringAsync()).ShouldBe("Europe/Germany");
+ }
+
+ // Cookie
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ Client.DefaultRequestHeaders.Remove("__timezone");
+ Client.DefaultRequestHeaders.Add("Cookie", "__timezone=Europe/Istanbul");
+ var result = await Client.GetStringAsync("api/timing-test");
+ result.ShouldBe("Europe/Istanbul");
+ }
+ }
+
+ private string GetLocalTimeZone()
+ {
+ if (TimeZoneInfo.Local.HasIanaId)
+ {
+ return TimeZoneInfo.Local.Id;
+ }
+
+ return TimeZoneInfo.TryConvertWindowsIdToIanaId(TimeZoneInfo.Local.Id, out var ianaName)
+ ? ianaName
+ : null;
+ }
+}
+
+
+public class AbpTimeZoneMiddleware_With_SettingValue_Tests : AspNetCoreMvcTestBase
+{
+ private readonly ICurrentTimezoneProvider _currentTimezoneProvider;
+ public AbpTimeZoneMiddleware_With_SettingValue_Tests()
+ {
+ _currentTimezoneProvider = GetRequiredService();
+ }
+
+ protected override void ConfigureServices(IServiceCollection services)
+ {
+ var settingStore = Substitute.For();
+ settingStore.GetOrNullAsync(TimingSettingNames.TimeZone).Returns("Asia/Shanghai");
+ services.AddSingleton(settingStore);
+
+ services.Configure(options =>
+ {
+ options.Kind = DateTimeKind.Utc;
+ });
+ }
+
+ [Fact]
+ public async Task Should_Not_Override_TimeZone_Setting_By_Request()
+ {
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ var result = await Client.GetStringAsync("api/timing-test");
+ result.ShouldBe("Asia/Shanghai");
+ }
+
+ // Query string
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ var result = await Client.GetStringAsync("api/timing-test?__timezone=Europe/Istanbul");
+ result.ShouldBe("Asia/Shanghai");
+ }
+
+ // Header
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ Client.DefaultRequestHeaders.Add("__timezone", "Europe/Istanbul");
+ var result = await Client.GetStringAsync("api/timing-test");
+ result.ShouldBe("Asia/Shanghai");
+ }
+
+ // Form
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ Client.DefaultRequestHeaders.Remove("__timezone");
+ var result = await Client.PostAsync("api/timing-test", new FormUrlEncodedContent(new[] {new KeyValuePair("__timezone", "Europe/Istanbul")}));
+ (await result.Content.ReadAsStringAsync()).ShouldBe("Asia/Shanghai");
+ }
+
+ // Cookie
+ using (_currentTimezoneProvider.Change("UTC"))
+ {
+ Client.DefaultRequestHeaders.Remove("__timezone");
+ Client.DefaultRequestHeaders.Add("Cookie", "__timezone=Europe/Istanbul");
+ var result = await Client.GetStringAsync("api/timing-test");
+ result.ShouldBe("Asia/Shanghai");
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Timing/TimingTestController.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Timing/TimingTestController.cs
new file mode 100644
index 0000000000..a509e62ec5
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Timing/TimingTestController.cs
@@ -0,0 +1,27 @@
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp.Timing;
+
+namespace Volo.Abp.AspNetCore.Mvc.Timing;
+
+[Route("api/timing-test")]
+public class UnitOfWorkTestController : AbpController
+{
+ private readonly ICurrentTimezoneProvider _currentTimezoneProvider;
+
+ public UnitOfWorkTestController(ICurrentTimezoneProvider currentTimezoneProvider)
+ {
+ _currentTimezoneProvider = currentTimezoneProvider;
+ }
+
+ [HttpGet]
+ public ActionResult GetAsync()
+ {
+ return Content(_currentTimezoneProvider.TimeZone ?? "null");
+ }
+
+ [HttpPost]
+ public ActionResult PostAsync()
+ {
+ return Content(_currentTimezoneProvider.TimeZone ?? "null");
+ }
+}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonNewtonsoftTestModule.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonNewtonsoftTestModule.cs
deleted file mode 100644
index 42559397da..0000000000
--- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonNewtonsoftTestModule.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using Volo.Abp.Autofac;
-using Volo.Abp.Json.Newtonsoft;
-using Volo.Abp.Json.SystemTextJson;
-using Volo.Abp.Modularity;
-
-namespace Volo.Abp.Json;
-
-[DependsOn(
- typeof(AbpAutofacModule),
- typeof(AbpJsonSystemTextJsonModule),
- typeof(AbpTestBaseModule)
-)]
-public class AbpJsonSystemTextJsonTestModule : AbpModule
-{
-
-}
-
-[DependsOn(
- typeof(AbpAutofacModule),
- typeof(AbpJsonNewtonsoftModule),
- typeof(AbpTestBaseModule)
-)]
-public class AbpJsonNewtonsoftTestModule : AbpModule
-{
-
-}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonSystemTextJsonTestBase.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonSystemTextJsonTestBase.cs
deleted file mode 100644
index ebae706aca..0000000000
--- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonSystemTextJsonTestBase.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using Volo.Abp.Testing;
-
-namespace Volo.Abp.Json;
-
-public abstract class AbpJsonSystemTextJsonTestBase : AbpIntegratedTest
-{
- protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
- {
- options.UseAutofac();
- }
-}
-
-public abstract class AbpJsonNewtonsoftJsonTestBase : AbpIntegratedTest
-{
- protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
- {
- options.UseAutofac();
- }
-}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs
new file mode 100644
index 0000000000..e442ce48ad
--- /dev/null
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestBase.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Concurrent;
+using System.Reflection;
+using Newtonsoft.Json;
+using Volo.Abp.Json.Newtonsoft;
+using Volo.Abp.Testing;
+
+namespace Volo.Abp.Json;
+
+public abstract class AbpJsonSystemTextJsonTestBase : AbpIntegratedTest
+{
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+}
+
+public abstract class AbpJsonNewtonsoftJsonTestBase : AbpIntegratedTest
+{
+ protected AbpJsonNewtonsoftJsonTestBase()
+ {
+ var cache = typeof(AbpNewtonsoftJsonSerializer).GetField("JsonSerializerOptionsCache", BindingFlags.NonPublic | BindingFlags.Static);
+ if (cache != null)
+ {
+ var cacheValue = cache.GetValue(null)?.As>();
+ cacheValue?.Clear();
+ }
+ }
+
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs
new file mode 100644
index 0000000000..121ec62a85
--- /dev/null
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpJsonTestModule.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Autofac;
+using Volo.Abp.Json.Newtonsoft;
+using Volo.Abp.Json.SystemTextJson;
+using Volo.Abp.Json.SystemTextJson.JsonConverters;
+using Volo.Abp.Json.SystemTextJson.Modifiers;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.Json;
+
+[DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpJsonSystemTextJsonModule),
+ typeof(AbpTestBaseModule)
+)]
+public class AbpJsonSystemTextJsonTestModule : AbpModule
+{
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddOptions()
+ .Configure((options, rootServiceProvider) =>
+ {
+ if (options.JsonSerializerOptions.TypeInfoResolver != null)
+ {
+ var modifiers = options.JsonSerializerOptions.TypeInfoResolver.As().Modifiers;
+ modifiers.RemoveAll(x => x.Target?.GetType() == typeof(AbpDateTimeConverterModifier));
+ modifiers.Add(new AbpDateTimeConverterModifier(
+ rootServiceProvider.GetRequiredService(),
+ rootServiceProvider.GetRequiredService()).CreateModifyAction());
+ }
+ });
+ }
+}
+
+[DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpJsonNewtonsoftModule),
+ typeof(AbpTestBaseModule)
+)]
+public class AbpJsonNewtonsoftTestModule : AbpModule
+{
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddOptions()
+ .Configure((options, rootServiceProvider) =>
+ {
+ options.JsonSerializerSettings.ContractResolver = new AbpCamelCasePropertyNamesContractResolver(
+ rootServiceProvider.GetRequiredService());
+ });
+ }
+}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpNewtonsoftSerializerProviderTests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpNewtonsoftSerializerProviderTests.cs
new file mode 100644
index 0000000000..9dc0c0afd3
--- /dev/null
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpNewtonsoftSerializerProviderTests.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.Json;
+
+[Collection("AbpJsonNewtonsoftJsonTest")]
+public class AbpNewtonsoftSerializerProviderTests : AbpJsonNewtonsoftJsonTestBase
+{
+ protected IJsonSerializer JsonSerializer;
+
+ public AbpNewtonsoftSerializerProviderTests()
+ {
+ JsonSerializer = GetRequiredService();
+ }
+
+ public class File
+ {
+ public string FileName { get; set; }
+
+ public Dictionary ExtraProperties { get; set; }
+ }
+
+ [Fact]
+ public void Serialize_Deserialize_Test()
+ {
+ var defaultIndent = " "; // Default indent is 2 spaces
+ var newLine = Environment.NewLine;
+ var file = new File()
+ {
+ FileName = "abp",
+ ExtraProperties = new Dictionary()
+ {
+ { "One", 1 },
+ { "Two", 2 }
+ }
+ };
+
+ var json = JsonSerializer.Serialize(file, camelCase: true);
+ json.ShouldBe("{\"fileName\":\"abp\",\"extraProperties\":{\"One\":1,\"Two\":2}}");
+
+ json = JsonSerializer.Serialize(file, camelCase: true, indented: true);
+ json.ShouldBe($"{{{newLine}{defaultIndent}\"fileName\": \"abp\",{newLine}{defaultIndent}\"extraProperties\": {{{newLine}{defaultIndent}{defaultIndent}\"One\": 1,{newLine}{defaultIndent}{defaultIndent}\"Two\": 2{newLine}{defaultIndent}}}{newLine}}}");
+
+ json = JsonSerializer.Serialize(file, camelCase: false);
+ json.ShouldBe("{\"FileName\":\"abp\",\"ExtraProperties\":{\"One\":1,\"Two\":2}}");
+
+ json = JsonSerializer.Serialize(file, camelCase: false, indented: true);
+ json.ShouldBe($"{{{newLine}{defaultIndent}\"FileName\": \"abp\",{newLine}{defaultIndent}\"ExtraProperties\": {{{newLine}{defaultIndent}{defaultIndent}\"One\": 1,{newLine}{defaultIndent}{defaultIndent}\"Two\": 2{newLine}{defaultIndent}}}{newLine}}}");
+ }
+}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSerializerProvider_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSerializerProvider_Tests.cs
index e32df85d7f..49b321d46d 100644
--- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSerializerProvider_Tests.cs
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/AbpSystemTextJsonSerializerProvider_Tests.cs
@@ -1,4 +1,6 @@
using System;
+using System.Collections.Generic;
+using System.Text.Json;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Data;
@@ -11,11 +13,11 @@ namespace Volo.Abp.Json;
public abstract class AbpSystemTextJsonSerializerProviderTestBase : AbpJsonSystemTextJsonTestBase
{
- protected AbpSystemTextJsonSerializer JsonSerializer;
+ protected IJsonSerializer JsonSerializer;
public AbpSystemTextJsonSerializerProviderTestBase()
{
- JsonSerializer = GetRequiredService();
+ JsonSerializer = GetRequiredService();
}
public class TestExtensibleObjectClass : ExtensibleObject
@@ -23,6 +25,13 @@ public abstract class AbpSystemTextJsonSerializerProviderTestBase : AbpJsonSyste
public string Name { get; set; }
}
+ public class File
+ {
+ public string FileName { get; set; }
+
+ public Dictionary ExtraProperties { get; set; }
+ }
+
public class FileWithBoolean
{
public string Name { get; set; }
@@ -74,6 +83,34 @@ public abstract class AbpSystemTextJsonSerializerProviderTestBase : AbpJsonSyste
public class AbpSystemTextJsonSerializerProviderTests : AbpSystemTextJsonSerializerProviderTestBase
{
+ [Fact]
+ public void Serialize_Deserialize_Test()
+ {
+ var defaultIndent = " "; // Default indent is 2 spaces
+ var newLine = Environment.NewLine;
+ var file = new File()
+ {
+ FileName = "abp",
+ ExtraProperties = new Dictionary()
+ {
+ { "One", 1 },
+ { "Two", 2 }
+ }
+ };
+
+ var json = JsonSerializer.Serialize(file, camelCase: true);
+ json.ShouldBe("{\"fileName\":\"abp\",\"extraProperties\":{\"One\":1,\"Two\":2}}");
+
+ json = JsonSerializer.Serialize(file, camelCase: true, indented: true);
+ json.ShouldBe($"{{{newLine}{defaultIndent}\"fileName\": \"abp\",{newLine}{defaultIndent}\"extraProperties\": {{{newLine}{defaultIndent}{defaultIndent}\"One\": 1,{newLine}{defaultIndent}{defaultIndent}\"Two\": 2{newLine}{defaultIndent}}}{newLine}}}");
+
+ json = JsonSerializer.Serialize(file, camelCase: false);
+ json.ShouldBe("{\"FileName\":\"abp\",\"ExtraProperties\":{\"One\":1,\"Two\":2}}");
+
+ json = JsonSerializer.Serialize(file, camelCase: false, indented: true);
+ json.ShouldBe($"{{{newLine}{defaultIndent}\"FileName\": \"abp\",{newLine}{defaultIndent}\"ExtraProperties\": {{{newLine}{defaultIndent}{defaultIndent}\"One\": 1,{newLine}{defaultIndent}{defaultIndent}\"Two\": 2{newLine}{defaultIndent}}}{newLine}}}");
+ }
+
[Fact]
public void Serialize_Deserialize_With_Boolean()
{
@@ -223,6 +260,8 @@ public class AbpSystemTextJsonSerializerProviderDateTimeFormatTests : AbpSystemT
options.InputDateTimeFormats.Add("yyyy*MM*dd");
options.OutputDateTimeFormat = "yyyy*MM*dd HH*mm*ss";
});
+
+ base.AfterAddApplication(services);
}
[Fact]
@@ -289,6 +328,8 @@ public class AbpSystemTextJsonSerializerProviderDatetimeKindUtcTests : AbpSystem
{
Kind = DateTimeKind.Utc;
services.Configure(x => x.Kind = Kind);
+
+ base.AfterAddApplication(services);
}
}
@@ -298,6 +339,8 @@ public class AbpSystemTextJsonSerializerProviderDatetimeKindLocalTests : AbpSyst
{
Kind = DateTimeKind.Local;
services.Configure(x => x.Kind = Kind);
+
+ base.AfterAddApplication(services);
}
}
diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/InputAndOutputDateTimeFormat_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/InputAndOutputDateTimeFormat_Tests.cs
index cf6356477d..189a82cae0 100644
--- a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/InputAndOutputDateTimeFormat_Tests.cs
+++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/InputAndOutputDateTimeFormat_Tests.cs
@@ -31,6 +31,8 @@ public class InputAndOutputDateTimeFormatSystemTextJsonTests : AbpJsonSystemText
{
options.Kind = DateTimeKind.Utc;
});
+
+ base.AfterAddApplication(services);
}
[Fact]
@@ -59,6 +61,7 @@ public class InputAndOutputDateTimeFormatSystemTextJsonTests : AbpJsonSystemText
}
}
+[Collection("AbpJsonNewtonsoftJsonTest")]
public class InputAndOutputDateTimeFormatNewtonsoftTests : AbpJsonNewtonsoftJsonTestBase
{
private readonly IJsonSerializer _jsonSerializer;
@@ -83,6 +86,8 @@ public class InputAndOutputDateTimeFormatNewtonsoftTests : AbpJsonNewtonsoftJson
{
options.Kind = DateTimeKind.Utc;
});
+
+ base.AfterAddApplication(services);
}
[Fact]
diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs
index e2ad9088cb..3df8699f6d 100644
--- a/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs
+++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo/Abp/MongoDB/Repositories/Repository_Basic_Tests.cs
@@ -3,6 +3,7 @@ using System.Linq;
using System.Threading.Tasks;
using MongoDB.Driver.Linq;
using Shouldly;
+using Volo.Abp.Data;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.TestApp;
using Volo.Abp.TestApp.Domain;
@@ -52,10 +53,12 @@ public class Repository_Basic_Tests : Repository_Basic_Tests p.PersonId == person.Id && p.Number == "1234567890").ShouldBeTrue();
+ person.GetProperty("test-guid-property").ShouldBe(person.Id);
+ person.GetProperty("test-nullable-guid-property").ShouldBe(person.Id);
}
-
+
[Fact]
public async Task Filter_Case_Insensitive()
{
(await CityRepository.GetQueryableAsync()).FirstOrDefault(c => c.Name == "ISTANBUL").ShouldBeNull();
(await CityRepository.GetQueryableAsync()).FirstOrDefault(c => c.Name == "istanbul").ShouldBeNull();
(await CityRepository.GetQueryableAsync()).FirstOrDefault(c => c.Name == "Istanbul").ShouldNotBeNull();
-
+
(await PersonRepository.GetQueryableAsync()).FirstOrDefault(p => p.Name == "douglas").ShouldNotBeNull();
(await PersonRepository.GetQueryableAsync()).FirstOrDefault(p => p.Name == "DOUGLAS").ShouldNotBeNull();
(await PersonRepository.GetQueryableAsync()).FirstOrDefault(p => p.Name == "Douglas").ShouldNotBeNull();
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs
index 12b3fa01c0..36979fdd7c 100644
--- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs
@@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Domain.Entities.Events;
using Volo.Abp.Domain.Entities.Events.Distributed;
@@ -17,16 +18,26 @@ public abstract class EntityChangeEvents_Tests : TestAppTestBase
where TStartupModule : IAbpModule
{
protected IRepository PersonRepository { get; }
+ protected ICityRepository CityRepository { get; }
protected ILocalEventBus LocalEventBus { get; }
protected IDistributedEventBus DistributedEventBus { get; }
protected EntityChangeEvents_Tests()
{
PersonRepository = GetRequiredService>();
+ CityRepository = GetRequiredService();
LocalEventBus = GetRequiredService();
DistributedEventBus = GetRequiredService();
}
+ protected override void AfterAddApplication(IServiceCollection services)
+ {
+ services.Configure(options =>
+ {
+ options.IgnoredEventSelectors.Add();
+ });
+ }
+
[Fact]
public async Task Complex_Event_Test()
{
@@ -62,7 +73,7 @@ public abstract class EntityChangeEvents_Tests : TestAppTestBase
await uow.CompleteAsync();
}
-
+
createdEventTriggered.ShouldBeTrue();
createdEtoTriggered.ShouldBeTrue();
}
@@ -113,4 +124,33 @@ public abstract class EntityChangeEvents_Tests : TestAppTestBase
updateEventCount.ShouldBe(1);
updatedAge.ShouldBe(45);
}
+
+ [Fact]
+ public async Task Should_Not_Trigger_Event_If_Ignore_Event_Selector_Is_Configured()
+ {
+ var personCreatedEtoTriggered = false;
+ var cityCreatedEtoTriggered = false;
+ using (var uow = GetRequiredService().Begin())
+ {
+ DistributedEventBus.Subscribe>(eto =>
+ {
+ cityCreatedEtoTriggered = true;
+ return Task.CompletedTask;
+ });
+
+ DistributedEventBus.Subscribe>(eto =>
+ {
+ personCreatedEtoTriggered = true;
+ return Task.CompletedTask;
+ });
+
+ await CityRepository.InsertAsync(new City(Guid.NewGuid(), "Istanbul"));
+ await PersonRepository.InsertAsync(new Person(Guid.NewGuid(), "John", 15));
+
+ await uow.CompleteAsync();
+ }
+
+ personCreatedEtoTriggered.ShouldBeTrue();
+ cityCreatedEtoTriggered.ShouldBeFalse();
+ }
}
diff --git a/framework/test/Volo.Abp.Timing.Tests/Volo.Abp.Timing.Tests.csproj b/framework/test/Volo.Abp.Timing.Tests/Volo.Abp.Timing.Tests.csproj
new file mode 100644
index 0000000000..58bc261247
--- /dev/null
+++ b/framework/test/Volo.Abp.Timing.Tests/Volo.Abp.Timing.Tests.csproj
@@ -0,0 +1,16 @@
+
+
+
+
+
+ net9.0
+
+
+
+
+
+
+
+
+
+
diff --git a/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/AbpTimingTestModule.cs b/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/AbpTimingTestModule.cs
new file mode 100644
index 0000000000..c416477f53
--- /dev/null
+++ b/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/AbpTimingTestModule.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.Timing;
+
+[DependsOn(
+ typeof(AbpTimingModule),
+ typeof(AbpTestBaseModule)
+)]
+public class AbpTimingTestModule : AbpModule
+{
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ }
+}
diff --git a/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/Clock_Default_Tests.cs b/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/Clock_Default_Tests.cs
new file mode 100644
index 0000000000..1904518180
--- /dev/null
+++ b/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/Clock_Default_Tests.cs
@@ -0,0 +1,110 @@
+using System;
+using Shouldly;
+using Volo.Abp.Testing;
+using Xunit;
+
+namespace Volo.Abp.Timing;
+
+public class Clock_Default_Tests : AbpIntegratedTest
+{
+ private readonly IClock _clock;
+ private readonly ICurrentTimezoneProvider _currentTimezoneProvider;
+
+ public Clock_Default_Tests()
+ {
+ _clock = GetRequiredService();
+ _currentTimezoneProvider = GetRequiredService();
+ }
+
+ [Fact]
+ public void ConvertTo_Test()
+ {
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc);
+ var convertedDateTime = _clock.ConvertToUserTime(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Utc);
+ convertedDateTime.ToString("O").ShouldBe("2025-03-01T05:30:00.0000000Z");
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Local);
+ var convertedDateTime = _clock.ConvertToUserTime(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Local);
+ convertedDateTime.ToString("O").ShouldBe(dateTime.ToString("O"));
+ }
+
+ using(_currentTimezoneProvider.Change(null))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Local);
+ var convertedDateTime = _clock.ConvertToUserTime(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Local);
+ convertedDateTime.ToString("O").ShouldBe(dateTime.ToString("O"));
+ }
+ }
+
+ [Fact]
+ public void ConvertTo_DateTimeOffset_Test()
+ {
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc), TimeSpan.Zero);
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.Zero);
+ convertedDateTimeOffset.ShouldBe(dateTimeOffset);
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified), TimeSpan.Zero);
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.Zero);
+ convertedDateTimeOffset.ShouldBe(dateTimeOffset);
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified), TimeSpan.FromHours(3));
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.FromHours(3));
+ convertedDateTimeOffset.ShouldBe(dateTimeOffset);
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified), TimeSpan.FromHours(8));
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.FromHours(8));
+ convertedDateTimeOffset.ShouldBe(dateTimeOffset);
+ }
+ }
+
+ [Fact]
+ public void ConvertFrom_Test()
+ {
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified);
+ var convertedDateTime = _clock.ConvertToUtc(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Unspecified);
+ convertedDateTime.ShouldBe(dateTime);
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Local);
+ var convertedDateTime = _clock.ConvertToUtc(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Local);
+ convertedDateTime.ShouldBe(dateTime);
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc);
+ var convertedDateTime = _clock.ConvertToUtc(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Utc);
+ convertedDateTime.ShouldBe(dateTime);
+ }
+ }
+}
diff --git a/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/Clock_Utc_Tests.cs b/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/Clock_Utc_Tests.cs
new file mode 100644
index 0000000000..4ecbd0d4c6
--- /dev/null
+++ b/framework/test/Volo.Abp.Timing.Tests/Volo/Abp/Timing/Clock_Utc_Tests.cs
@@ -0,0 +1,132 @@
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using Shouldly;
+using Volo.Abp.Testing;
+using Xunit;
+
+namespace Volo.Abp.Timing;
+
+public class Clock_Utc_Tests : AbpIntegratedTest
+{
+ private readonly IClock _clock;
+ private readonly ICurrentTimezoneProvider _currentTimezoneProvider;
+
+ public Clock_Utc_Tests()
+ {
+ _clock = GetRequiredService();
+ _currentTimezoneProvider = GetRequiredService();
+ }
+
+ protected override void AfterAddApplication(IServiceCollection services)
+ {
+ services.Configure(options =>
+ {
+ options.Kind = DateTimeKind.Utc;
+ });
+ base.AfterAddApplication(services);
+ }
+
+ [Fact]
+ public void ConvertTo_Test()
+ {
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc);
+ var convertedDateTime = _clock.ConvertToUserTime(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Unspecified);
+ convertedDateTime.ToString("O").ShouldBe("2025-03-01T08:30:00.0000000"); //Without Z
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ // ConvertTo will not convert the DateTimeKind.Local
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Local);
+ var convertedDateTime = _clock.ConvertToUserTime(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Local);
+ convertedDateTime.ToString("O").ShouldBe(dateTime.ToString("O"));
+ }
+
+ using(_currentTimezoneProvider.Change(null))
+ {
+ // ConvertTo will not convert if the timezone is not set
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Local);
+ var convertedDateTime = _clock.ConvertToUserTime(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Local);
+ convertedDateTime.ToString("O").ShouldBe(dateTime.ToString("O"));
+ }
+ }
+
+ [Fact]
+ public void ConvertTo_DateTimeOffset_Test()
+ {
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc), TimeSpan.Zero);
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.FromHours(3));
+ convertedDateTimeOffset.ToString("O").ShouldBe("2025-03-01T08:30:00.0000000+03:00");
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified), TimeSpan.Zero);
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.FromHours(3));
+ convertedDateTimeOffset.ToString("O").ShouldBe("2025-03-01T08:30:00.0000000+03:00");
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified), TimeSpan.FromHours(3));
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.FromHours(3));
+ convertedDateTimeOffset.ShouldBe(dateTimeOffset);
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified), TimeSpan.FromHours(8));
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.FromHours(3));
+ convertedDateTimeOffset.DateTime.ShouldBe(new DateTime(2025, 3, 1, 0, 30, 0, DateTimeKind.Unspecified));
+ }
+
+ using(_currentTimezoneProvider.Change(null))
+ {
+ // ConvertTo will not convert if the timezone is not set
+ var dateTimeOffset = new DateTimeOffset(new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified), TimeSpan.FromHours(8));
+ var convertedDateTimeOffset = _clock.ConvertToUserTime(dateTimeOffset);
+ convertedDateTimeOffset.Offset.ShouldBe(TimeSpan.FromHours(8));
+ convertedDateTimeOffset.ShouldBe(dateTimeOffset);
+ }
+ }
+
+ [Fact]
+ public void ConvertFrom_Test()
+ {
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Unspecified);
+ var convertedDateTime = _clock.ConvertToUtc(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Utc);
+ convertedDateTime.ToString("O").ShouldBe("2025-03-01T02:30:00.0000000Z");
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Local);
+ var convertedDateTime = _clock.ConvertToUtc(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Utc);
+ convertedDateTime.ToString("O").ShouldBe("2025-03-01T02:30:00.0000000Z");
+ }
+
+ using(_currentTimezoneProvider.Change("Europe/Istanbul"))
+ {
+ var dateTime = new DateTime(2025, 3, 1, 5, 30, 0, DateTimeKind.Utc);
+ var convertedDateTime = _clock.ConvertToUtc(dateTime);
+ convertedDateTime.Kind.ShouldBe(DateTimeKind.Utc);
+ convertedDateTime.ToString("O").ShouldBe("2025-03-01T05:30:00.0000000Z");
+ }
+ }
+
+}
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json
index f792712158..dda4d3a500 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json
@@ -132,6 +132,11 @@
"namespace": "Volo.Abp.BackgroundJobs",
"primaryKeyType": "Guid",
"properties": [
+ {
+ "type": "System.String",
+ "name": "ApplicationName",
+ "summary": "Application name that scheduled this job."
+ },
{
"type": "System.String",
"name": "JobName",
@@ -230,6 +235,11 @@
"isPrivate": false,
"isStatic": false,
"parameters": [
+ {
+ "type": "String",
+ "name": "applicationName",
+ "isOptional": false
+ },
{
"type": "Int32",
"name": "maxResultCount",
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
index 07243c6b48..aec1b7a084 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
@@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.shared": "~9.2.0-rc.1",
- "@abp/prismjs": "~9.2.0-rc.1",
- "@abp/highlight.js": "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared": "~9.2.0-rc.2",
+ "@abp/prismjs": "~9.2.0-rc.2",
+ "@abp/highlight.js": "~9.2.0-rc.2"
}
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
index 10c9152cc6..0f4ff2d889 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
@@ -2,203 +2,203 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.1.tgz#4fb738ad5a6ac85165cf3e45893615d1762d43ed"
- integrity sha512-TCW7nGGMqnBD8n2Jc1r9ht2HixRj8kDOZJysQUd3uHNmTBCO1b5cBjxL4ksSzM98/kEs6i0q6OTasqJrxHuHNA==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.1"
- "@abp/bootstrap" "~9.2.0-rc.1"
- "@abp/bootstrap-datepicker" "~9.2.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~9.2.0-rc.1"
- "@abp/datatables.net-bs5" "~9.2.0-rc.1"
- "@abp/font-awesome" "~9.2.0-rc.1"
- "@abp/jquery-form" "~9.2.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.1"
- "@abp/lodash" "~9.2.0-rc.1"
- "@abp/luxon" "~9.2.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.1"
- "@abp/moment" "~9.2.0-rc.1"
- "@abp/select2" "~9.2.0-rc.1"
- "@abp/sweetalert2" "~9.2.0-rc.1"
- "@abp/timeago" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.1.tgz#d2a2c5fc25444eedf2f4ea92505ba4aede86b771"
- integrity sha512-vgdJFOzxqwuaDcMhzIHHn1wIJbIar/NzJxpbUBjRWjnZzrKKerDLF9FuDegpU1fX3nOvunI11zSFT3yCuMHebQ==
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.2.tgz#77562013b604d0193e361efa6801235179dc7b4f"
+ integrity sha512-5KcMGg6o6W5uwsujrjUARlZFgWmZeYBNCf1vkf3btakkwTzmPDbypUx6VrgBJbt4AUnYlMQbSHvbfK0d3I1e6w==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.2"
+ "@abp/bootstrap" "~9.2.0-rc.2"
+ "@abp/bootstrap-datepicker" "~9.2.0-rc.2"
+ "@abp/bootstrap-daterangepicker" "~9.2.0-rc.2"
+ "@abp/datatables.net-bs5" "~9.2.0-rc.2"
+ "@abp/font-awesome" "~9.2.0-rc.2"
+ "@abp/jquery-form" "~9.2.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.2"
+ "@abp/lodash" "~9.2.0-rc.2"
+ "@abp/luxon" "~9.2.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.2"
+ "@abp/moment" "~9.2.0-rc.2"
+ "@abp/select2" "~9.2.0-rc.2"
+ "@abp/sweetalert2" "~9.2.0-rc.2"
+ "@abp/timeago" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.2.tgz#e1c0e4b0280d5fe37659da8dc696150f0d461336"
+ integrity sha512-WG4WWGS1mSb2QWAVOA2nrvoi9/3oueEaKEG18xbPgWiLz5GCq8gsopKqUgW/fmBaw+1Jh9tsuCTH7eED/2tUxA==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.1.tgz#b548840efb6a9c8d9acabf828af4e95628be6cbe"
- integrity sha512-ClR+fiOiUccEIvbeAgfo2+Z3eZYp7MRIVrll8Rh93oKr6C0XzjwA7acSGe87CS3e5wkUXMsKtqmRX+eSXyJBPQ==
+"@abp/bootstrap-datepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.2.tgz#429c2d44a22f9190013aea0efa420854b7e83a4f"
+ integrity sha512-bxMpaxTgnF5/VELbKvtZVw0tI0bowzUQFVSBQJqO4o7wJmxyHNzJuaom8Is+tCsoMrpo8t9EGMGfpWHV1IsrjQ==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.1.tgz#e7174841889b80f7beddaeb84be7a0b908cc34a3"
- integrity sha512-CzSutc7rtYzd4jzTTiKlUmFGlZk70DTcp/tnuD7rVWZp7Njr2INfwGlgt7P7Hj3g9Wt3j0mAM+IDz9t2rleqtA==
+"@abp/bootstrap-daterangepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.2.tgz#85bb869d5d43eb6c97f50943ea2c390cb4d37d54"
+ integrity sha512-rLLsY6GCY16IOwRkmx7vZ25sVHOM9dPdTlcZiuUuEi5+QrmgGiqZmIwqYiu4WFSPPTJtufsyMaHzXxqiZRpXVg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.1.tgz#87c17c50a9e8f6fdb6474541aeaadf1ebb1d6b1b"
- integrity sha512-tgOIGY7HfiwgM9QUpcydZN9tdKSrm6mYPzECBDU866xWi8aUeLZp12hLoSL94M1iZ6jchbZaqTqMOy00Tc0FCQ==
+"@abp/bootstrap@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.2.tgz#ba2ab98d930501e7f004f99e7d7e7d4e6d3c0998"
+ integrity sha512-u2mtHHbmXNgngExl4hM5uo/E3k453n0im2Ci02+4dnhZoFicLZlBdtJusZAw5QR1XTLPybW6RXofWBvkZcgiwg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.2.0-rc.1.tgz#50069847848714fb155d35b656563f26f2fd870c"
- integrity sha512-3lEUrQNje436F8t4nhTrIrFru1A1ZGJHgsYaXR6At50hNwWHcE1LtZKJnXm4am0dALJK/uwv4p7BfNT9Edo11A==
+"@abp/clipboard@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.2.0-rc.2.tgz#608bdb3d4a3ff1a7b38ad5850385746f7cfe6c0c"
+ integrity sha512-w/JiTmidNc7SZuvpkQumyNj6FTBq6hLnhXeBBh4/xega1Ob2q+tbrOSpemgpK6YOXUQbmH8a4vEPvwt7uzNfvQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
clipboard "^2.0.11"
-"@abp/core@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.1.tgz#30fb627e750f651b4d1819461e3ffeb5fc6d9011"
- integrity sha512-Adb4sk9oZJaxL19RbM1opLGWn2kKzRUcFLH6lNG2QYCAXf74y/YfFLQyoZSrTKS1M+hkGjIrEW6GssAgHTCJeg==
+"@abp/core@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.2.tgz#0eab20842f8c0801d1dca036d3d66a67e155e019"
+ integrity sha512-8bC1MAV4iSFLJvRvM5mvrI9+N5FPAjaG79hr3p0xJtNixFOFpNELDf4p0zwy97zY8juL+AIEyJAkg+KIIK90DQ==
dependencies:
- "@abp/utils" "~9.2.0-rc.1"
+ "@abp/utils" "~9.2.0-rc.2"
-"@abp/datatables.net-bs5@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.1.tgz#7d56850b6e46f744c794e40d08aeb5fd1a7543ee"
- integrity sha512-PFt0PruHikzXzcEKtykwnRo+Z0D+njmhaoJk4J11yoZjvSFOAQXIRdsVgFgJub8REN3I57eG9PPCl3AZwAba9w==
+"@abp/datatables.net-bs5@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.2.tgz#8c07544cafd2d2257f45150d3265c25eafc0ec0f"
+ integrity sha512-l3VOtc0fleUsx+ZUMr49+nPBWRBUVw4Z26ogT7O7uRR8doeerNU1GfA4yFJCUp02WIwt8cmZ+apJHADykn9Vng==
dependencies:
- "@abp/datatables.net" "~9.2.0-rc.1"
+ "@abp/datatables.net" "~9.2.0-rc.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.1.tgz#8d165f404e85a54a4e92887173a3d01f827ba5ef"
- integrity sha512-rEvCSJWH2l505Nb7Nqa0tL1iFpnMZ+WxnfbomaqdSpL6YsCUd8syeGI37V+LQUknXGsUFqGVyazPrU3vjIR8Kg==
+"@abp/datatables.net@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.2.tgz#2880ccb61750faa1689aec15f9e49d92ab1e94a1"
+ integrity sha512-nljq0p8mxoBvMZngtViInyQJqX/MI7EyQeCIYNICF2LO42RRZfpKaRy5zX+4Uc3z/wz209CfK8QfRNH/d1HtBQ==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.1.tgz#758b4028fa5f6d11bb675ff465fc222e3b656c01"
- integrity sha512-H0fmIM/YAkT64LLMub0eDzpxvrNVjkFrRgX4YM10U/AQ0gILxjuEapRxv3+ueIJiy3DiBLkPWQ+SQN3Lwh4FOA==
+"@abp/font-awesome@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.2.tgz#51eb750f5697668db538ad68cc6b9279517da537"
+ integrity sha512-X9JfF4n4MDZLszwZHIHuxSdGGxImEzV91ROKqNeclErCx3bOXyq/l9C+haZl/3TLzTAOSDMLgHGrT3MUCVPF5w==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/highlight.js@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.2.0-rc.1.tgz#2eabf8c5aa61a7dfa1462d87853cc37774e6b021"
- integrity sha512-xmyUIB/ZNpObnZf2JeJaOgSSnowxqlkk8OUoVzjthmsVszWGJU3l8TABjWpReJclywFlrsXGZPqvg/LIuDN8tA==
+"@abp/highlight.js@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.2.0-rc.2.tgz#9865cae50e39cca9ddd0c0390da794778ed36779"
+ integrity sha512-43NEl2omc8HWJjprEJpcMtb88QCD9bTCXrW7e2CO8ReyFuEoQh+79c0q2E5xJ5aitZpFhq4j4OOxxzUvAKORKw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@highlightjs/cdn-assets" "~11.10.0"
-"@abp/jquery-form@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.1.tgz#558bcf9da8912e0014b407018d1f0fb7ab294bf0"
- integrity sha512-MzhptVbyZ7WNYAw4KmWiI4WnR8H16jBshceO7DFtfyZDRUU0n4ZPTYs1rGlj4+5iv2B7r8dci0Nx94bkId7FwA==
+"@abp/jquery-form@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.2.tgz#58ce31a32bdfb355e5d4e3f97cb4761f594aa8e1"
+ integrity sha512-xN2xjK1RWKygwaqzTaWmpMlU0kGWGa2nKaudM6g9k/B6b1Pfdr8ykI4DaSuPb4BkRmurGkgy4r9o7IUoqv0T8Q==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.1.tgz#48b227ee95e0d7a12efbdfbdf1a28e3003dcdb8f"
- integrity sha512-wTo5/oqU1TVOuuYfsu6XipryW2rrSx+bebP4fm/lQ1cZF+Ki1Rbvt5p+3fIGZfg8dJRMKXCtL3UYyadKTlqJ8A==
+"@abp/jquery-validation-unobtrusive@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.2.tgz#4e624e22cbf149d1c78da46aabaf6fc18d3b65ff"
+ integrity sha512-adKJxnWnhCrIYWoVdo41zgO5p4SjyypCxoHeQ7mkohry2WN6WuQG5nmHqhpdevw966DENvmVzFfz7vnO72vtrg==
dependencies:
- "@abp/jquery-validation" "~9.2.0-rc.1"
+ "@abp/jquery-validation" "~9.2.0-rc.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.1.tgz#fae0ce1e0db0af62f80836d3e982c9a79f7b1209"
- integrity sha512-c2+BwErN2w6ikbOYuuSQHZeMdLaKR7l0CIvwtUnzwCHjdUGAbMX9w9lYwnO6R6DsNCV7Cb5+YrbjM7jGY7zMiQ==
+"@abp/jquery-validation@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.2.tgz#b6a8124d5056ddad515733bffc78703f6bd422be"
+ integrity sha512-4j1fg1qImif2vFZQFJ7z1olEUnjc3BByKS+7joNQ+96/NqOQdOQjRjB2n490od7ExCinKnvYx3JFttpYjHU3Xw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.1.tgz#a930c1ef6a17a831cd7d064b7cbb20d604fbc4bb"
- integrity sha512-qc461cJOQvEX95JbIFtDLj5dxUUDyP7PUXP8SjCvxP4GURoKhjxx0j0U0mBkMDJMrSrvALFKbF5S6OlgdgaPGQ==
+"@abp/jquery@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.2.tgz#335643787ab282d5d2fee4f360c2b62cce3db962"
+ integrity sha512-baKNDuiQMzkV0LFzBwEqS0JYtXIUe5KH+MVizGR6Zv10B8l/gIrUzWI/nnqDtbts6gmY9OBDXkCTcgMQBwKqjw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
jquery "~3.7.1"
-"@abp/lodash@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.1.tgz#0e0b455c84c6b6c52a3aaf1ccc4c704f49503ac8"
- integrity sha512-Bg2Bz7G04jvz+QRXLlK3A2eUBR3Ef1rq622jWsaKo4fW4rCdHkZBbjeqYDLYc1PqDIJawhEdIByh8VzMgRd6tA==
+"@abp/lodash@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.2.tgz#521bccafcc09780c751932688b6ec45c368c2854"
+ integrity sha512-T6eYsDovUl4AYD9n2N4WZq9MeC4/ryke5ctvdhzuArqM7WpPvohq3VKGugrP/MLo9oD3MZ5DVQvMJ0AVg+IXNQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
lodash "^4.17.21"
-"@abp/luxon@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.1.tgz#275726bf1f9ff14cdf902a7ea64213a3e7434927"
- integrity sha512-vga0taYVDPGwcAQqFe6pAEAUu3vRH7MgxBQdMrEX80YhsSJevPHSl6jG3ey5IqWOy4dpMyiN4v7gWBHJ93mbFg==
+"@abp/luxon@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.2.tgz#da366d335f9575b104ea2206e076af35cbbfcfba"
+ integrity sha512-mr8ipYrJDDJPoImIwORK7Z6d1C07APl95L17ufRbig4sjdxjNEDR5uUXVviVafF1No2bVkYiS0xGKQmojA2twg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.1.tgz#3d4c17a9d6ace815e4bc4dc825d0020474a794f7"
- integrity sha512-Cqs6A88bWggdtDoiCREBTXknCI+c7vhmZ/SM84k4NfwzlPscZYMCbtJlrln4g3zmElJwwBPerl0Gs778kUOjog==
+"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.2.tgz#cb79018adf08276041eb5c5dcf75130c8995686b"
+ integrity sha512-jdHXx7kPduaEfFXDvf5s+QVl10RqshNbnZkkqPx0mMkhz2H/qxwzF1e0mcLFL38nEgs+0gxIkcA8/MKq85tyqQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.1.tgz#1604d38429f1e0484223ea4a7a3a10f1785420f4"
- integrity sha512-5VnPhCOnTug7tqlLsg46LY84LU5DrYNKxm5T3oz+OFq4I05Ut/LWGElRvOnEFxfFfkYuJvbxih3trAGuEJD6+A==
+"@abp/moment@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.2.tgz#f4339138668ca72be1d700624b91789344557bff"
+ integrity sha512-J4ZaCDEcXLGmJ+8zqgaMK9Lutnjga28LSbuiFaGLlZ1QgYZ5HDScE128o3vX9qr60tc6IIY0cDkHi4bBHo7ozw==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.2.0-rc.1.tgz#623659c50c776bc8efcb7eacea70b2704ff87eec"
- integrity sha512-QZ6NY4TXmWzrrZViN8v3CgH2l4fQUpEZLPsUaEmiRtq3+3meCaM3hxgNEOvcUg5IHZI7cPBRabQtVKoAPozcvQ==
+"@abp/prismjs@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.2.0-rc.2.tgz#1ee12acdd9e1dcc9ae2ce4a9f21f159c3f9e3dec"
+ integrity sha512-GuKz6bujBlYHAgLhW1RT7aEOwKyZ+vnyMIhN0/fQ34+nbqg0PC4htwJcN6spgN8gZKD06lCqBH+GjLE2WtE/Rw==
dependencies:
- "@abp/clipboard" "~9.2.0-rc.1"
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/clipboard" "~9.2.0-rc.2"
+ "@abp/core" "~9.2.0-rc.2"
prismjs "^1.29.0"
-"@abp/select2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.1.tgz#6f378c9bd4a01dbe72bf41f175c964e36353ef4e"
- integrity sha512-HlQtSmY3VRIbCbTJnWFmvPeUmHYX8cI5z0Dwa30/TNPWDQuws5Yx3F4B9crw6AC/EIzCobsAZ4QhsgQxsUHNvg==
+"@abp/select2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.2.tgz#ba6e839644b7ecdd198fe5286101302a3dc79ce3"
+ integrity sha512-AQMXb5ATgbN7grpKU8lB2xFFfirCe45lIvd9krW5SwUHCYZP7pRPbwQXAew+BqlIIYJJF2GA7/Nf//e/71bKtg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.1.tgz#b70784ff038ff4d6cdc07a7ef35edd7da5dfaa23"
- integrity sha512-cJVdPB1hh7AtmfmcLLAFGxFDYc08sjtRS5kJ37ru9WFVOyzF1A99QgMOEBSB6BGKNbkCJwQbkwGCHjtQTHQ46w==
+"@abp/sweetalert2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.2.tgz#075634dc3ec996607757694d636d276ba2350e06"
+ integrity sha512-ZgHgqM8Q+V9ECQyAyepM5KpshKpQP463xRHwgY45oR7/CfCcO/vS56YQgJNg2zE6+lRQZaRQ9OL7lph8975vVg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.1.tgz#689fa9c9d4b0c0a239b37cd4d045dfb745f392df"
- integrity sha512-mNmmRVzGryW45woLmDrxVnUCSi2+Xp2djHNKe7VF4D2Xywos9yxEImTX8B9lB0QMWl8BawsZCz/jsC3QURkXGw==
+"@abp/timeago@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.2.tgz#25324732966438bd6f505bdd932511ba2cc8c22b"
+ integrity sha512-WfWxxiycg77vVN2hPHqUOu552la+zxr0EZnHMqnEnnBe+gFYe9C0CpdYuyBq2eQXRXHoVzsB+4YRVNk5sbSGng==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
timeago "^1.6.7"
-"@abp/utils@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.1.tgz#508d9922c842f2a76fc748574f0ae3a9954b6895"
- integrity sha512-XFaBI4qxeXixAtapXRzETkS60+5XkZeEnW9O3wyHU6r4rEtIdOHo9w7t/vM5b5KAUlcEE02jS6pcqlJHd7miqw==
+"@abp/utils@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.2.tgz#669885ad1e3ac7b8e182d7c392ea1b633df65aac"
+ integrity sha512-rfQxhJy04Qf50P3ciasKbDlJ+9JidD60xW77TjcoUJvljJE+A8iwTX8Wwqz7+YcC7rks2ILM4y3Ay7/47NOICQ==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
index a20c06d000..94e80fd62f 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
@@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.1",
- "@abp/prismjs": "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.2",
+ "@abp/prismjs": "~9.2.0-rc.2"
},
"devDependencies": {}
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
index 908daa61ec..f48539b111 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
@@ -2,202 +2,202 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.1.tgz#00f6c73e8e38578cfb6eb10214a8e4347dda75b3"
- integrity sha512-Ophg50dxq2E4A2PgAtErDZ8LQfgAoT1ipZv4H3lxu0GwtRXrLEScfykHVDScTHJVpTF8Z549zYQl3jYtPJACog==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.1.tgz#4fb738ad5a6ac85165cf3e45893615d1762d43ed"
- integrity sha512-TCW7nGGMqnBD8n2Jc1r9ht2HixRj8kDOZJysQUd3uHNmTBCO1b5cBjxL4ksSzM98/kEs6i0q6OTasqJrxHuHNA==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.1"
- "@abp/bootstrap" "~9.2.0-rc.1"
- "@abp/bootstrap-datepicker" "~9.2.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~9.2.0-rc.1"
- "@abp/datatables.net-bs5" "~9.2.0-rc.1"
- "@abp/font-awesome" "~9.2.0-rc.1"
- "@abp/jquery-form" "~9.2.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.1"
- "@abp/lodash" "~9.2.0-rc.1"
- "@abp/luxon" "~9.2.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.1"
- "@abp/moment" "~9.2.0-rc.1"
- "@abp/select2" "~9.2.0-rc.1"
- "@abp/sweetalert2" "~9.2.0-rc.1"
- "@abp/timeago" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.1.tgz#d2a2c5fc25444eedf2f4ea92505ba4aede86b771"
- integrity sha512-vgdJFOzxqwuaDcMhzIHHn1wIJbIar/NzJxpbUBjRWjnZzrKKerDLF9FuDegpU1fX3nOvunI11zSFT3yCuMHebQ==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.2.tgz#e32c8bd046d7377ae3f6a703eac9069e10bcd600"
+ integrity sha512-oj4lGrzllgGrq7rI7gz1Xvq5TU+xT+isGVf4T8hF3INE/J2nIyK45HnkjDq5wpdM3P+HkdM1+RtWNrLSVu0Klg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.2.tgz#77562013b604d0193e361efa6801235179dc7b4f"
+ integrity sha512-5KcMGg6o6W5uwsujrjUARlZFgWmZeYBNCf1vkf3btakkwTzmPDbypUx6VrgBJbt4AUnYlMQbSHvbfK0d3I1e6w==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.2"
+ "@abp/bootstrap" "~9.2.0-rc.2"
+ "@abp/bootstrap-datepicker" "~9.2.0-rc.2"
+ "@abp/bootstrap-daterangepicker" "~9.2.0-rc.2"
+ "@abp/datatables.net-bs5" "~9.2.0-rc.2"
+ "@abp/font-awesome" "~9.2.0-rc.2"
+ "@abp/jquery-form" "~9.2.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.2"
+ "@abp/lodash" "~9.2.0-rc.2"
+ "@abp/luxon" "~9.2.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.2"
+ "@abp/moment" "~9.2.0-rc.2"
+ "@abp/select2" "~9.2.0-rc.2"
+ "@abp/sweetalert2" "~9.2.0-rc.2"
+ "@abp/timeago" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.2.tgz#e1c0e4b0280d5fe37659da8dc696150f0d461336"
+ integrity sha512-WG4WWGS1mSb2QWAVOA2nrvoi9/3oueEaKEG18xbPgWiLz5GCq8gsopKqUgW/fmBaw+1Jh9tsuCTH7eED/2tUxA==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.1.tgz#b548840efb6a9c8d9acabf828af4e95628be6cbe"
- integrity sha512-ClR+fiOiUccEIvbeAgfo2+Z3eZYp7MRIVrll8Rh93oKr6C0XzjwA7acSGe87CS3e5wkUXMsKtqmRX+eSXyJBPQ==
+"@abp/bootstrap-datepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.2.tgz#429c2d44a22f9190013aea0efa420854b7e83a4f"
+ integrity sha512-bxMpaxTgnF5/VELbKvtZVw0tI0bowzUQFVSBQJqO4o7wJmxyHNzJuaom8Is+tCsoMrpo8t9EGMGfpWHV1IsrjQ==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.1.tgz#e7174841889b80f7beddaeb84be7a0b908cc34a3"
- integrity sha512-CzSutc7rtYzd4jzTTiKlUmFGlZk70DTcp/tnuD7rVWZp7Njr2INfwGlgt7P7Hj3g9Wt3j0mAM+IDz9t2rleqtA==
+"@abp/bootstrap-daterangepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.2.tgz#85bb869d5d43eb6c97f50943ea2c390cb4d37d54"
+ integrity sha512-rLLsY6GCY16IOwRkmx7vZ25sVHOM9dPdTlcZiuUuEi5+QrmgGiqZmIwqYiu4WFSPPTJtufsyMaHzXxqiZRpXVg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.1.tgz#87c17c50a9e8f6fdb6474541aeaadf1ebb1d6b1b"
- integrity sha512-tgOIGY7HfiwgM9QUpcydZN9tdKSrm6mYPzECBDU866xWi8aUeLZp12hLoSL94M1iZ6jchbZaqTqMOy00Tc0FCQ==
+"@abp/bootstrap@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.2.tgz#ba2ab98d930501e7f004f99e7d7e7d4e6d3c0998"
+ integrity sha512-u2mtHHbmXNgngExl4hM5uo/E3k453n0im2Ci02+4dnhZoFicLZlBdtJusZAw5QR1XTLPybW6RXofWBvkZcgiwg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.2.0-rc.1.tgz#50069847848714fb155d35b656563f26f2fd870c"
- integrity sha512-3lEUrQNje436F8t4nhTrIrFru1A1ZGJHgsYaXR6At50hNwWHcE1LtZKJnXm4am0dALJK/uwv4p7BfNT9Edo11A==
+"@abp/clipboard@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.2.0-rc.2.tgz#608bdb3d4a3ff1a7b38ad5850385746f7cfe6c0c"
+ integrity sha512-w/JiTmidNc7SZuvpkQumyNj6FTBq6hLnhXeBBh4/xega1Ob2q+tbrOSpemgpK6YOXUQbmH8a4vEPvwt7uzNfvQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
clipboard "^2.0.11"
-"@abp/core@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.1.tgz#30fb627e750f651b4d1819461e3ffeb5fc6d9011"
- integrity sha512-Adb4sk9oZJaxL19RbM1opLGWn2kKzRUcFLH6lNG2QYCAXf74y/YfFLQyoZSrTKS1M+hkGjIrEW6GssAgHTCJeg==
+"@abp/core@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.2.tgz#0eab20842f8c0801d1dca036d3d66a67e155e019"
+ integrity sha512-8bC1MAV4iSFLJvRvM5mvrI9+N5FPAjaG79hr3p0xJtNixFOFpNELDf4p0zwy97zY8juL+AIEyJAkg+KIIK90DQ==
dependencies:
- "@abp/utils" "~9.2.0-rc.1"
+ "@abp/utils" "~9.2.0-rc.2"
-"@abp/datatables.net-bs5@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.1.tgz#7d56850b6e46f744c794e40d08aeb5fd1a7543ee"
- integrity sha512-PFt0PruHikzXzcEKtykwnRo+Z0D+njmhaoJk4J11yoZjvSFOAQXIRdsVgFgJub8REN3I57eG9PPCl3AZwAba9w==
+"@abp/datatables.net-bs5@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.2.tgz#8c07544cafd2d2257f45150d3265c25eafc0ec0f"
+ integrity sha512-l3VOtc0fleUsx+ZUMr49+nPBWRBUVw4Z26ogT7O7uRR8doeerNU1GfA4yFJCUp02WIwt8cmZ+apJHADykn9Vng==
dependencies:
- "@abp/datatables.net" "~9.2.0-rc.1"
+ "@abp/datatables.net" "~9.2.0-rc.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.1.tgz#8d165f404e85a54a4e92887173a3d01f827ba5ef"
- integrity sha512-rEvCSJWH2l505Nb7Nqa0tL1iFpnMZ+WxnfbomaqdSpL6YsCUd8syeGI37V+LQUknXGsUFqGVyazPrU3vjIR8Kg==
+"@abp/datatables.net@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.2.tgz#2880ccb61750faa1689aec15f9e49d92ab1e94a1"
+ integrity sha512-nljq0p8mxoBvMZngtViInyQJqX/MI7EyQeCIYNICF2LO42RRZfpKaRy5zX+4Uc3z/wz209CfK8QfRNH/d1HtBQ==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.1.tgz#758b4028fa5f6d11bb675ff465fc222e3b656c01"
- integrity sha512-H0fmIM/YAkT64LLMub0eDzpxvrNVjkFrRgX4YM10U/AQ0gILxjuEapRxv3+ueIJiy3DiBLkPWQ+SQN3Lwh4FOA==
+"@abp/font-awesome@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.2.tgz#51eb750f5697668db538ad68cc6b9279517da537"
+ integrity sha512-X9JfF4n4MDZLszwZHIHuxSdGGxImEzV91ROKqNeclErCx3bOXyq/l9C+haZl/3TLzTAOSDMLgHGrT3MUCVPF5w==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.1.tgz#558bcf9da8912e0014b407018d1f0fb7ab294bf0"
- integrity sha512-MzhptVbyZ7WNYAw4KmWiI4WnR8H16jBshceO7DFtfyZDRUU0n4ZPTYs1rGlj4+5iv2B7r8dci0Nx94bkId7FwA==
+"@abp/jquery-form@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.2.tgz#58ce31a32bdfb355e5d4e3f97cb4761f594aa8e1"
+ integrity sha512-xN2xjK1RWKygwaqzTaWmpMlU0kGWGa2nKaudM6g9k/B6b1Pfdr8ykI4DaSuPb4BkRmurGkgy4r9o7IUoqv0T8Q==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.1.tgz#48b227ee95e0d7a12efbdfbdf1a28e3003dcdb8f"
- integrity sha512-wTo5/oqU1TVOuuYfsu6XipryW2rrSx+bebP4fm/lQ1cZF+Ki1Rbvt5p+3fIGZfg8dJRMKXCtL3UYyadKTlqJ8A==
+"@abp/jquery-validation-unobtrusive@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.2.tgz#4e624e22cbf149d1c78da46aabaf6fc18d3b65ff"
+ integrity sha512-adKJxnWnhCrIYWoVdo41zgO5p4SjyypCxoHeQ7mkohry2WN6WuQG5nmHqhpdevw966DENvmVzFfz7vnO72vtrg==
dependencies:
- "@abp/jquery-validation" "~9.2.0-rc.1"
+ "@abp/jquery-validation" "~9.2.0-rc.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.1.tgz#fae0ce1e0db0af62f80836d3e982c9a79f7b1209"
- integrity sha512-c2+BwErN2w6ikbOYuuSQHZeMdLaKR7l0CIvwtUnzwCHjdUGAbMX9w9lYwnO6R6DsNCV7Cb5+YrbjM7jGY7zMiQ==
+"@abp/jquery-validation@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.2.tgz#b6a8124d5056ddad515733bffc78703f6bd422be"
+ integrity sha512-4j1fg1qImif2vFZQFJ7z1olEUnjc3BByKS+7joNQ+96/NqOQdOQjRjB2n490od7ExCinKnvYx3JFttpYjHU3Xw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.1.tgz#a930c1ef6a17a831cd7d064b7cbb20d604fbc4bb"
- integrity sha512-qc461cJOQvEX95JbIFtDLj5dxUUDyP7PUXP8SjCvxP4GURoKhjxx0j0U0mBkMDJMrSrvALFKbF5S6OlgdgaPGQ==
+"@abp/jquery@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.2.tgz#335643787ab282d5d2fee4f360c2b62cce3db962"
+ integrity sha512-baKNDuiQMzkV0LFzBwEqS0JYtXIUe5KH+MVizGR6Zv10B8l/gIrUzWI/nnqDtbts6gmY9OBDXkCTcgMQBwKqjw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
jquery "~3.7.1"
-"@abp/lodash@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.1.tgz#0e0b455c84c6b6c52a3aaf1ccc4c704f49503ac8"
- integrity sha512-Bg2Bz7G04jvz+QRXLlK3A2eUBR3Ef1rq622jWsaKo4fW4rCdHkZBbjeqYDLYc1PqDIJawhEdIByh8VzMgRd6tA==
+"@abp/lodash@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.2.tgz#521bccafcc09780c751932688b6ec45c368c2854"
+ integrity sha512-T6eYsDovUl4AYD9n2N4WZq9MeC4/ryke5ctvdhzuArqM7WpPvohq3VKGugrP/MLo9oD3MZ5DVQvMJ0AVg+IXNQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
lodash "^4.17.21"
-"@abp/luxon@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.1.tgz#275726bf1f9ff14cdf902a7ea64213a3e7434927"
- integrity sha512-vga0taYVDPGwcAQqFe6pAEAUu3vRH7MgxBQdMrEX80YhsSJevPHSl6jG3ey5IqWOy4dpMyiN4v7gWBHJ93mbFg==
+"@abp/luxon@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.2.tgz#da366d335f9575b104ea2206e076af35cbbfcfba"
+ integrity sha512-mr8ipYrJDDJPoImIwORK7Z6d1C07APl95L17ufRbig4sjdxjNEDR5uUXVviVafF1No2bVkYiS0xGKQmojA2twg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.1.tgz#3d4c17a9d6ace815e4bc4dc825d0020474a794f7"
- integrity sha512-Cqs6A88bWggdtDoiCREBTXknCI+c7vhmZ/SM84k4NfwzlPscZYMCbtJlrln4g3zmElJwwBPerl0Gs778kUOjog==
+"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.2.tgz#cb79018adf08276041eb5c5dcf75130c8995686b"
+ integrity sha512-jdHXx7kPduaEfFXDvf5s+QVl10RqshNbnZkkqPx0mMkhz2H/qxwzF1e0mcLFL38nEgs+0gxIkcA8/MKq85tyqQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.1.tgz#1604d38429f1e0484223ea4a7a3a10f1785420f4"
- integrity sha512-5VnPhCOnTug7tqlLsg46LY84LU5DrYNKxm5T3oz+OFq4I05Ut/LWGElRvOnEFxfFfkYuJvbxih3trAGuEJD6+A==
+"@abp/moment@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.2.tgz#f4339138668ca72be1d700624b91789344557bff"
+ integrity sha512-J4ZaCDEcXLGmJ+8zqgaMK9Lutnjga28LSbuiFaGLlZ1QgYZ5HDScE128o3vX9qr60tc6IIY0cDkHi4bBHo7ozw==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.2.0-rc.1.tgz#623659c50c776bc8efcb7eacea70b2704ff87eec"
- integrity sha512-QZ6NY4TXmWzrrZViN8v3CgH2l4fQUpEZLPsUaEmiRtq3+3meCaM3hxgNEOvcUg5IHZI7cPBRabQtVKoAPozcvQ==
+"@abp/prismjs@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.2.0-rc.2.tgz#1ee12acdd9e1dcc9ae2ce4a9f21f159c3f9e3dec"
+ integrity sha512-GuKz6bujBlYHAgLhW1RT7aEOwKyZ+vnyMIhN0/fQ34+nbqg0PC4htwJcN6spgN8gZKD06lCqBH+GjLE2WtE/Rw==
dependencies:
- "@abp/clipboard" "~9.2.0-rc.1"
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/clipboard" "~9.2.0-rc.2"
+ "@abp/core" "~9.2.0-rc.2"
prismjs "^1.29.0"
-"@abp/select2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.1.tgz#6f378c9bd4a01dbe72bf41f175c964e36353ef4e"
- integrity sha512-HlQtSmY3VRIbCbTJnWFmvPeUmHYX8cI5z0Dwa30/TNPWDQuws5Yx3F4B9crw6AC/EIzCobsAZ4QhsgQxsUHNvg==
+"@abp/select2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.2.tgz#ba6e839644b7ecdd198fe5286101302a3dc79ce3"
+ integrity sha512-AQMXb5ATgbN7grpKU8lB2xFFfirCe45lIvd9krW5SwUHCYZP7pRPbwQXAew+BqlIIYJJF2GA7/Nf//e/71bKtg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.1.tgz#b70784ff038ff4d6cdc07a7ef35edd7da5dfaa23"
- integrity sha512-cJVdPB1hh7AtmfmcLLAFGxFDYc08sjtRS5kJ37ru9WFVOyzF1A99QgMOEBSB6BGKNbkCJwQbkwGCHjtQTHQ46w==
+"@abp/sweetalert2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.2.tgz#075634dc3ec996607757694d636d276ba2350e06"
+ integrity sha512-ZgHgqM8Q+V9ECQyAyepM5KpshKpQP463xRHwgY45oR7/CfCcO/vS56YQgJNg2zE6+lRQZaRQ9OL7lph8975vVg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.1.tgz#689fa9c9d4b0c0a239b37cd4d045dfb745f392df"
- integrity sha512-mNmmRVzGryW45woLmDrxVnUCSi2+Xp2djHNKe7VF4D2Xywos9yxEImTX8B9lB0QMWl8BawsZCz/jsC3QURkXGw==
+"@abp/timeago@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.2.tgz#25324732966438bd6f505bdd932511ba2cc8c22b"
+ integrity sha512-WfWxxiycg77vVN2hPHqUOu552la+zxr0EZnHMqnEnnBe+gFYe9C0CpdYuyBq2eQXRXHoVzsB+4YRVNk5sbSGng==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
timeago "^1.6.7"
-"@abp/utils@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.1.tgz#508d9922c842f2a76fc748574f0ae3a9954b6895"
- integrity sha512-XFaBI4qxeXixAtapXRzETkS60+5XkZeEnW9O3wyHU6r4rEtIdOHo9w7t/vM5b5KAUlcEE02jS6pcqlJHd7miqw==
+"@abp/utils@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.2.tgz#669885ad1e3ac7b8e182d7c392ea1b633df65aac"
+ integrity sha512-rfQxhJy04Qf50P3ciasKbDlJ+9JidD60xW77TjcoUJvljJE+A8iwTX8Wwqz7+YcC7rks2ILM4y3Ay7/47NOICQ==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json
index 4c612121de..a391f0da97 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/package.json
+++ b/modules/blogging/app/Volo.BloggingTestApp/package.json
@@ -3,7 +3,7 @@
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.1",
- "@abp/blogging": "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.2",
+ "@abp/blogging": "~9.2.0-rc.2"
}
}
diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
index 63672215ea..a2099198fc 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
+++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
@@ -2,228 +2,228 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.1.tgz#00f6c73e8e38578cfb6eb10214a8e4347dda75b3"
- integrity sha512-Ophg50dxq2E4A2PgAtErDZ8LQfgAoT1ipZv4H3lxu0GwtRXrLEScfykHVDScTHJVpTF8Z549zYQl3jYtPJACog==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.1.tgz#4fb738ad5a6ac85165cf3e45893615d1762d43ed"
- integrity sha512-TCW7nGGMqnBD8n2Jc1r9ht2HixRj8kDOZJysQUd3uHNmTBCO1b5cBjxL4ksSzM98/kEs6i0q6OTasqJrxHuHNA==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.1"
- "@abp/bootstrap" "~9.2.0-rc.1"
- "@abp/bootstrap-datepicker" "~9.2.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~9.2.0-rc.1"
- "@abp/datatables.net-bs5" "~9.2.0-rc.1"
- "@abp/font-awesome" "~9.2.0-rc.1"
- "@abp/jquery-form" "~9.2.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.1"
- "@abp/lodash" "~9.2.0-rc.1"
- "@abp/luxon" "~9.2.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.1"
- "@abp/moment" "~9.2.0-rc.1"
- "@abp/select2" "~9.2.0-rc.1"
- "@abp/sweetalert2" "~9.2.0-rc.1"
- "@abp/timeago" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.1.tgz#d2a2c5fc25444eedf2f4ea92505ba4aede86b771"
- integrity sha512-vgdJFOzxqwuaDcMhzIHHn1wIJbIar/NzJxpbUBjRWjnZzrKKerDLF9FuDegpU1fX3nOvunI11zSFT3yCuMHebQ==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.2.tgz#e32c8bd046d7377ae3f6a703eac9069e10bcd600"
+ integrity sha512-oj4lGrzllgGrq7rI7gz1Xvq5TU+xT+isGVf4T8hF3INE/J2nIyK45HnkjDq5wpdM3P+HkdM1+RtWNrLSVu0Klg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.2.tgz#77562013b604d0193e361efa6801235179dc7b4f"
+ integrity sha512-5KcMGg6o6W5uwsujrjUARlZFgWmZeYBNCf1vkf3btakkwTzmPDbypUx6VrgBJbt4AUnYlMQbSHvbfK0d3I1e6w==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.2"
+ "@abp/bootstrap" "~9.2.0-rc.2"
+ "@abp/bootstrap-datepicker" "~9.2.0-rc.2"
+ "@abp/bootstrap-daterangepicker" "~9.2.0-rc.2"
+ "@abp/datatables.net-bs5" "~9.2.0-rc.2"
+ "@abp/font-awesome" "~9.2.0-rc.2"
+ "@abp/jquery-form" "~9.2.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.2"
+ "@abp/lodash" "~9.2.0-rc.2"
+ "@abp/luxon" "~9.2.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.2"
+ "@abp/moment" "~9.2.0-rc.2"
+ "@abp/select2" "~9.2.0-rc.2"
+ "@abp/sweetalert2" "~9.2.0-rc.2"
+ "@abp/timeago" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.2.tgz#e1c0e4b0280d5fe37659da8dc696150f0d461336"
+ integrity sha512-WG4WWGS1mSb2QWAVOA2nrvoi9/3oueEaKEG18xbPgWiLz5GCq8gsopKqUgW/fmBaw+1Jh9tsuCTH7eED/2tUxA==
dependencies:
ansi-colors "^4.1.3"
-"@abp/blogging@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-9.2.0-rc.1.tgz#fb3a050d4919fbb5cb8ad5f48b183c4965f4d7d3"
- integrity sha512-OMroH5AeH57D737ZFPTZcGSY2Bqoez/bQDgkHyBnxn1WYwXYJNtAm8HepPT5dqLmEFcSldg7lnmHbt28a1E52g==
+"@abp/blogging@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-9.2.0-rc.2.tgz#8ac5e0727991f71d062aa8e34b2b46f5d3135a44"
+ integrity sha512-AFXjnGKONqdyykqtVMMNpjlphtivzSkOZTxQURIRV1aS5n+LaYDJDwGzLC8QyHtyafGqhuwYc//wxitz8gLR9Q==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.1"
- "@abp/owl.carousel" "~9.2.0-rc.1"
- "@abp/prismjs" "~9.2.0-rc.1"
- "@abp/tui-editor" "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.2"
+ "@abp/owl.carousel" "~9.2.0-rc.2"
+ "@abp/prismjs" "~9.2.0-rc.2"
+ "@abp/tui-editor" "~9.2.0-rc.2"
-"@abp/bootstrap-datepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.1.tgz#b548840efb6a9c8d9acabf828af4e95628be6cbe"
- integrity sha512-ClR+fiOiUccEIvbeAgfo2+Z3eZYp7MRIVrll8Rh93oKr6C0XzjwA7acSGe87CS3e5wkUXMsKtqmRX+eSXyJBPQ==
+"@abp/bootstrap-datepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.2.tgz#429c2d44a22f9190013aea0efa420854b7e83a4f"
+ integrity sha512-bxMpaxTgnF5/VELbKvtZVw0tI0bowzUQFVSBQJqO4o7wJmxyHNzJuaom8Is+tCsoMrpo8t9EGMGfpWHV1IsrjQ==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.1.tgz#e7174841889b80f7beddaeb84be7a0b908cc34a3"
- integrity sha512-CzSutc7rtYzd4jzTTiKlUmFGlZk70DTcp/tnuD7rVWZp7Njr2INfwGlgt7P7Hj3g9Wt3j0mAM+IDz9t2rleqtA==
+"@abp/bootstrap-daterangepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.2.tgz#85bb869d5d43eb6c97f50943ea2c390cb4d37d54"
+ integrity sha512-rLLsY6GCY16IOwRkmx7vZ25sVHOM9dPdTlcZiuUuEi5+QrmgGiqZmIwqYiu4WFSPPTJtufsyMaHzXxqiZRpXVg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.1.tgz#87c17c50a9e8f6fdb6474541aeaadf1ebb1d6b1b"
- integrity sha512-tgOIGY7HfiwgM9QUpcydZN9tdKSrm6mYPzECBDU866xWi8aUeLZp12hLoSL94M1iZ6jchbZaqTqMOy00Tc0FCQ==
+"@abp/bootstrap@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.2.tgz#ba2ab98d930501e7f004f99e7d7e7d4e6d3c0998"
+ integrity sha512-u2mtHHbmXNgngExl4hM5uo/E3k453n0im2Ci02+4dnhZoFicLZlBdtJusZAw5QR1XTLPybW6RXofWBvkZcgiwg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.2.0-rc.1.tgz#50069847848714fb155d35b656563f26f2fd870c"
- integrity sha512-3lEUrQNje436F8t4nhTrIrFru1A1ZGJHgsYaXR6At50hNwWHcE1LtZKJnXm4am0dALJK/uwv4p7BfNT9Edo11A==
+"@abp/clipboard@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.2.0-rc.2.tgz#608bdb3d4a3ff1a7b38ad5850385746f7cfe6c0c"
+ integrity sha512-w/JiTmidNc7SZuvpkQumyNj6FTBq6hLnhXeBBh4/xega1Ob2q+tbrOSpemgpK6YOXUQbmH8a4vEPvwt7uzNfvQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
clipboard "^2.0.11"
-"@abp/core@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.1.tgz#30fb627e750f651b4d1819461e3ffeb5fc6d9011"
- integrity sha512-Adb4sk9oZJaxL19RbM1opLGWn2kKzRUcFLH6lNG2QYCAXf74y/YfFLQyoZSrTKS1M+hkGjIrEW6GssAgHTCJeg==
+"@abp/core@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.2.tgz#0eab20842f8c0801d1dca036d3d66a67e155e019"
+ integrity sha512-8bC1MAV4iSFLJvRvM5mvrI9+N5FPAjaG79hr3p0xJtNixFOFpNELDf4p0zwy97zY8juL+AIEyJAkg+KIIK90DQ==
dependencies:
- "@abp/utils" "~9.2.0-rc.1"
+ "@abp/utils" "~9.2.0-rc.2"
-"@abp/datatables.net-bs5@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.1.tgz#7d56850b6e46f744c794e40d08aeb5fd1a7543ee"
- integrity sha512-PFt0PruHikzXzcEKtykwnRo+Z0D+njmhaoJk4J11yoZjvSFOAQXIRdsVgFgJub8REN3I57eG9PPCl3AZwAba9w==
+"@abp/datatables.net-bs5@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.2.tgz#8c07544cafd2d2257f45150d3265c25eafc0ec0f"
+ integrity sha512-l3VOtc0fleUsx+ZUMr49+nPBWRBUVw4Z26ogT7O7uRR8doeerNU1GfA4yFJCUp02WIwt8cmZ+apJHADykn9Vng==
dependencies:
- "@abp/datatables.net" "~9.2.0-rc.1"
+ "@abp/datatables.net" "~9.2.0-rc.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.1.tgz#8d165f404e85a54a4e92887173a3d01f827ba5ef"
- integrity sha512-rEvCSJWH2l505Nb7Nqa0tL1iFpnMZ+WxnfbomaqdSpL6YsCUd8syeGI37V+LQUknXGsUFqGVyazPrU3vjIR8Kg==
+"@abp/datatables.net@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.2.tgz#2880ccb61750faa1689aec15f9e49d92ab1e94a1"
+ integrity sha512-nljq0p8mxoBvMZngtViInyQJqX/MI7EyQeCIYNICF2LO42RRZfpKaRy5zX+4Uc3z/wz209CfK8QfRNH/d1HtBQ==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.1.tgz#758b4028fa5f6d11bb675ff465fc222e3b656c01"
- integrity sha512-H0fmIM/YAkT64LLMub0eDzpxvrNVjkFrRgX4YM10U/AQ0gILxjuEapRxv3+ueIJiy3DiBLkPWQ+SQN3Lwh4FOA==
+"@abp/font-awesome@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.2.tgz#51eb750f5697668db538ad68cc6b9279517da537"
+ integrity sha512-X9JfF4n4MDZLszwZHIHuxSdGGxImEzV91ROKqNeclErCx3bOXyq/l9C+haZl/3TLzTAOSDMLgHGrT3MUCVPF5w==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.1.tgz#558bcf9da8912e0014b407018d1f0fb7ab294bf0"
- integrity sha512-MzhptVbyZ7WNYAw4KmWiI4WnR8H16jBshceO7DFtfyZDRUU0n4ZPTYs1rGlj4+5iv2B7r8dci0Nx94bkId7FwA==
+"@abp/jquery-form@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.2.tgz#58ce31a32bdfb355e5d4e3f97cb4761f594aa8e1"
+ integrity sha512-xN2xjK1RWKygwaqzTaWmpMlU0kGWGa2nKaudM6g9k/B6b1Pfdr8ykI4DaSuPb4BkRmurGkgy4r9o7IUoqv0T8Q==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.1.tgz#48b227ee95e0d7a12efbdfbdf1a28e3003dcdb8f"
- integrity sha512-wTo5/oqU1TVOuuYfsu6XipryW2rrSx+bebP4fm/lQ1cZF+Ki1Rbvt5p+3fIGZfg8dJRMKXCtL3UYyadKTlqJ8A==
+"@abp/jquery-validation-unobtrusive@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.2.tgz#4e624e22cbf149d1c78da46aabaf6fc18d3b65ff"
+ integrity sha512-adKJxnWnhCrIYWoVdo41zgO5p4SjyypCxoHeQ7mkohry2WN6WuQG5nmHqhpdevw966DENvmVzFfz7vnO72vtrg==
dependencies:
- "@abp/jquery-validation" "~9.2.0-rc.1"
+ "@abp/jquery-validation" "~9.2.0-rc.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.1.tgz#fae0ce1e0db0af62f80836d3e982c9a79f7b1209"
- integrity sha512-c2+BwErN2w6ikbOYuuSQHZeMdLaKR7l0CIvwtUnzwCHjdUGAbMX9w9lYwnO6R6DsNCV7Cb5+YrbjM7jGY7zMiQ==
+"@abp/jquery-validation@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.2.tgz#b6a8124d5056ddad515733bffc78703f6bd422be"
+ integrity sha512-4j1fg1qImif2vFZQFJ7z1olEUnjc3BByKS+7joNQ+96/NqOQdOQjRjB2n490od7ExCinKnvYx3JFttpYjHU3Xw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.1.tgz#a930c1ef6a17a831cd7d064b7cbb20d604fbc4bb"
- integrity sha512-qc461cJOQvEX95JbIFtDLj5dxUUDyP7PUXP8SjCvxP4GURoKhjxx0j0U0mBkMDJMrSrvALFKbF5S6OlgdgaPGQ==
+"@abp/jquery@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.2.tgz#335643787ab282d5d2fee4f360c2b62cce3db962"
+ integrity sha512-baKNDuiQMzkV0LFzBwEqS0JYtXIUe5KH+MVizGR6Zv10B8l/gIrUzWI/nnqDtbts6gmY9OBDXkCTcgMQBwKqjw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
jquery "~3.7.1"
-"@abp/lodash@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.1.tgz#0e0b455c84c6b6c52a3aaf1ccc4c704f49503ac8"
- integrity sha512-Bg2Bz7G04jvz+QRXLlK3A2eUBR3Ef1rq622jWsaKo4fW4rCdHkZBbjeqYDLYc1PqDIJawhEdIByh8VzMgRd6tA==
+"@abp/lodash@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.2.tgz#521bccafcc09780c751932688b6ec45c368c2854"
+ integrity sha512-T6eYsDovUl4AYD9n2N4WZq9MeC4/ryke5ctvdhzuArqM7WpPvohq3VKGugrP/MLo9oD3MZ5DVQvMJ0AVg+IXNQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
lodash "^4.17.21"
-"@abp/luxon@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.1.tgz#275726bf1f9ff14cdf902a7ea64213a3e7434927"
- integrity sha512-vga0taYVDPGwcAQqFe6pAEAUu3vRH7MgxBQdMrEX80YhsSJevPHSl6jG3ey5IqWOy4dpMyiN4v7gWBHJ93mbFg==
+"@abp/luxon@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.2.tgz#da366d335f9575b104ea2206e076af35cbbfcfba"
+ integrity sha512-mr8ipYrJDDJPoImIwORK7Z6d1C07APl95L17ufRbig4sjdxjNEDR5uUXVviVafF1No2bVkYiS0xGKQmojA2twg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.1.tgz#3d4c17a9d6ace815e4bc4dc825d0020474a794f7"
- integrity sha512-Cqs6A88bWggdtDoiCREBTXknCI+c7vhmZ/SM84k4NfwzlPscZYMCbtJlrln4g3zmElJwwBPerl0Gs778kUOjog==
+"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.2.tgz#cb79018adf08276041eb5c5dcf75130c8995686b"
+ integrity sha512-jdHXx7kPduaEfFXDvf5s+QVl10RqshNbnZkkqPx0mMkhz2H/qxwzF1e0mcLFL38nEgs+0gxIkcA8/MKq85tyqQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.1.tgz#1604d38429f1e0484223ea4a7a3a10f1785420f4"
- integrity sha512-5VnPhCOnTug7tqlLsg46LY84LU5DrYNKxm5T3oz+OFq4I05Ut/LWGElRvOnEFxfFfkYuJvbxih3trAGuEJD6+A==
+"@abp/moment@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.2.tgz#f4339138668ca72be1d700624b91789344557bff"
+ integrity sha512-J4ZaCDEcXLGmJ+8zqgaMK9Lutnjga28LSbuiFaGLlZ1QgYZ5HDScE128o3vX9qr60tc6IIY0cDkHi4bBHo7ozw==
dependencies:
moment "^2.30.1"
-"@abp/owl.carousel@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-9.2.0-rc.1.tgz#ed7cc4d3f806ea6ee15739446b114a040b93be6a"
- integrity sha512-+NyE5hmJaaUBISrNgYt+Fg9R+tHC7i5WykL9dYoA0BcYP20sTovr6B3IA3jzZcLt8GGXt3HAzLfkSc21nOurSA==
+"@abp/owl.carousel@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-9.2.0-rc.2.tgz#b00cfb3784c2d04fea06ff9ad21daabbb3411e11"
+ integrity sha512-gj9YNlvqoho1TenZTmd1eDOLfSaQFzsSk+vKvqIn9Y5fbL71WoY1yc18NXZYTBes0JDBYi8xqYsT9dh9KhFY6Q==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
owl.carousel "^2.3.4"
-"@abp/prismjs@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.2.0-rc.1.tgz#623659c50c776bc8efcb7eacea70b2704ff87eec"
- integrity sha512-QZ6NY4TXmWzrrZViN8v3CgH2l4fQUpEZLPsUaEmiRtq3+3meCaM3hxgNEOvcUg5IHZI7cPBRabQtVKoAPozcvQ==
+"@abp/prismjs@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.2.0-rc.2.tgz#1ee12acdd9e1dcc9ae2ce4a9f21f159c3f9e3dec"
+ integrity sha512-GuKz6bujBlYHAgLhW1RT7aEOwKyZ+vnyMIhN0/fQ34+nbqg0PC4htwJcN6spgN8gZKD06lCqBH+GjLE2WtE/Rw==
dependencies:
- "@abp/clipboard" "~9.2.0-rc.1"
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/clipboard" "~9.2.0-rc.2"
+ "@abp/core" "~9.2.0-rc.2"
prismjs "^1.29.0"
-"@abp/select2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.1.tgz#6f378c9bd4a01dbe72bf41f175c964e36353ef4e"
- integrity sha512-HlQtSmY3VRIbCbTJnWFmvPeUmHYX8cI5z0Dwa30/TNPWDQuws5Yx3F4B9crw6AC/EIzCobsAZ4QhsgQxsUHNvg==
+"@abp/select2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.2.tgz#ba6e839644b7ecdd198fe5286101302a3dc79ce3"
+ integrity sha512-AQMXb5ATgbN7grpKU8lB2xFFfirCe45lIvd9krW5SwUHCYZP7pRPbwQXAew+BqlIIYJJF2GA7/Nf//e/71bKtg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.1.tgz#b70784ff038ff4d6cdc07a7ef35edd7da5dfaa23"
- integrity sha512-cJVdPB1hh7AtmfmcLLAFGxFDYc08sjtRS5kJ37ru9WFVOyzF1A99QgMOEBSB6BGKNbkCJwQbkwGCHjtQTHQ46w==
+"@abp/sweetalert2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.2.tgz#075634dc3ec996607757694d636d276ba2350e06"
+ integrity sha512-ZgHgqM8Q+V9ECQyAyepM5KpshKpQP463xRHwgY45oR7/CfCcO/vS56YQgJNg2zE6+lRQZaRQ9OL7lph8975vVg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.1.tgz#689fa9c9d4b0c0a239b37cd4d045dfb745f392df"
- integrity sha512-mNmmRVzGryW45woLmDrxVnUCSi2+Xp2djHNKe7VF4D2Xywos9yxEImTX8B9lB0QMWl8BawsZCz/jsC3QURkXGw==
+"@abp/timeago@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.2.tgz#25324732966438bd6f505bdd932511ba2cc8c22b"
+ integrity sha512-WfWxxiycg77vVN2hPHqUOu552la+zxr0EZnHMqnEnnBe+gFYe9C0CpdYuyBq2eQXRXHoVzsB+4YRVNk5sbSGng==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
timeago "^1.6.7"
-"@abp/tui-editor@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.2.0-rc.1.tgz#fdb0e13891da88a0da89dc2ee22f748b7bda7420"
- integrity sha512-FVpaOF1yoox2X9ejbDQVRVDrm+5dElY5X7fxKPUthw7PUpCT+HCScVX4xtqkbF3GB3VYRdwQO2m1GdqIRC0Zlw==
+"@abp/tui-editor@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.2.0-rc.2.tgz#8f755bfb7413d1636fe904d409efe6363f48516b"
+ integrity sha512-Ap2JOZShRvbHI4+5f1pGRgP26i6bel+2eBT1w33UWMclyNGhNYVcm9VNIyLaS9KbGM5bphij2bMdnTUpjQ10Dw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
- "@abp/prismjs" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
+ "@abp/prismjs" "~9.2.0-rc.2"
-"@abp/utils@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.1.tgz#508d9922c842f2a76fc748574f0ae3a9954b6895"
- integrity sha512-XFaBI4qxeXixAtapXRzETkS60+5XkZeEnW9O3wyHU6r4rEtIdOHo9w7t/vM5b5KAUlcEE02jS6pcqlJHd7miqw==
+"@abp/utils@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.2.tgz#669885ad1e3ac7b8e182d7c392ea1b633df65aac"
+ integrity sha512-rfQxhJy04Qf50P3ciasKbDlJ+9JidD60xW77TjcoUJvljJE+A8iwTX8Wwqz7+YcC7rks2ILM4y3Ay7/47NOICQ==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
index 319adb77e5..5de62f5e2c 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
@@ -3,6 +3,6 @@
"name": "client-simulation-web",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.2"
}
}
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
index 8524474dd3..7a9396e283 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
@@ -2,185 +2,185 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.1.tgz#00f6c73e8e38578cfb6eb10214a8e4347dda75b3"
- integrity sha512-Ophg50dxq2E4A2PgAtErDZ8LQfgAoT1ipZv4H3lxu0GwtRXrLEScfykHVDScTHJVpTF8Z549zYQl3jYtPJACog==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.2.tgz#e32c8bd046d7377ae3f6a703eac9069e10bcd600"
+ integrity sha512-oj4lGrzllgGrq7rI7gz1Xvq5TU+xT+isGVf4T8hF3INE/J2nIyK45HnkjDq5wpdM3P+HkdM1+RtWNrLSVu0Klg==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.2"
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.1.tgz#4fb738ad5a6ac85165cf3e45893615d1762d43ed"
- integrity sha512-TCW7nGGMqnBD8n2Jc1r9ht2HixRj8kDOZJysQUd3uHNmTBCO1b5cBjxL4ksSzM98/kEs6i0q6OTasqJrxHuHNA==
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.2.tgz#77562013b604d0193e361efa6801235179dc7b4f"
+ integrity sha512-5KcMGg6o6W5uwsujrjUARlZFgWmZeYBNCf1vkf3btakkwTzmPDbypUx6VrgBJbt4AUnYlMQbSHvbfK0d3I1e6w==
dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.1"
- "@abp/bootstrap" "~9.2.0-rc.1"
- "@abp/bootstrap-datepicker" "~9.2.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~9.2.0-rc.1"
- "@abp/datatables.net-bs5" "~9.2.0-rc.1"
- "@abp/font-awesome" "~9.2.0-rc.1"
- "@abp/jquery-form" "~9.2.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.1"
- "@abp/lodash" "~9.2.0-rc.1"
- "@abp/luxon" "~9.2.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.1"
- "@abp/moment" "~9.2.0-rc.1"
- "@abp/select2" "~9.2.0-rc.1"
- "@abp/sweetalert2" "~9.2.0-rc.1"
- "@abp/timeago" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.1.tgz#d2a2c5fc25444eedf2f4ea92505ba4aede86b771"
- integrity sha512-vgdJFOzxqwuaDcMhzIHHn1wIJbIar/NzJxpbUBjRWjnZzrKKerDLF9FuDegpU1fX3nOvunI11zSFT3yCuMHebQ==
+ "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.2"
+ "@abp/bootstrap" "~9.2.0-rc.2"
+ "@abp/bootstrap-datepicker" "~9.2.0-rc.2"
+ "@abp/bootstrap-daterangepicker" "~9.2.0-rc.2"
+ "@abp/datatables.net-bs5" "~9.2.0-rc.2"
+ "@abp/font-awesome" "~9.2.0-rc.2"
+ "@abp/jquery-form" "~9.2.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.2"
+ "@abp/lodash" "~9.2.0-rc.2"
+ "@abp/luxon" "~9.2.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.2"
+ "@abp/moment" "~9.2.0-rc.2"
+ "@abp/select2" "~9.2.0-rc.2"
+ "@abp/sweetalert2" "~9.2.0-rc.2"
+ "@abp/timeago" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.2.tgz#e1c0e4b0280d5fe37659da8dc696150f0d461336"
+ integrity sha512-WG4WWGS1mSb2QWAVOA2nrvoi9/3oueEaKEG18xbPgWiLz5GCq8gsopKqUgW/fmBaw+1Jh9tsuCTH7eED/2tUxA==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.1.tgz#b548840efb6a9c8d9acabf828af4e95628be6cbe"
- integrity sha512-ClR+fiOiUccEIvbeAgfo2+Z3eZYp7MRIVrll8Rh93oKr6C0XzjwA7acSGe87CS3e5wkUXMsKtqmRX+eSXyJBPQ==
+"@abp/bootstrap-datepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.2.tgz#429c2d44a22f9190013aea0efa420854b7e83a4f"
+ integrity sha512-bxMpaxTgnF5/VELbKvtZVw0tI0bowzUQFVSBQJqO4o7wJmxyHNzJuaom8Is+tCsoMrpo8t9EGMGfpWHV1IsrjQ==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.1.tgz#e7174841889b80f7beddaeb84be7a0b908cc34a3"
- integrity sha512-CzSutc7rtYzd4jzTTiKlUmFGlZk70DTcp/tnuD7rVWZp7Njr2INfwGlgt7P7Hj3g9Wt3j0mAM+IDz9t2rleqtA==
+"@abp/bootstrap-daterangepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.2.tgz#85bb869d5d43eb6c97f50943ea2c390cb4d37d54"
+ integrity sha512-rLLsY6GCY16IOwRkmx7vZ25sVHOM9dPdTlcZiuUuEi5+QrmgGiqZmIwqYiu4WFSPPTJtufsyMaHzXxqiZRpXVg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.1.tgz#87c17c50a9e8f6fdb6474541aeaadf1ebb1d6b1b"
- integrity sha512-tgOIGY7HfiwgM9QUpcydZN9tdKSrm6mYPzECBDU866xWi8aUeLZp12hLoSL94M1iZ6jchbZaqTqMOy00Tc0FCQ==
+"@abp/bootstrap@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.2.tgz#ba2ab98d930501e7f004f99e7d7e7d4e6d3c0998"
+ integrity sha512-u2mtHHbmXNgngExl4hM5uo/E3k453n0im2Ci02+4dnhZoFicLZlBdtJusZAw5QR1XTLPybW6RXofWBvkZcgiwg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
bootstrap "^5.3.3"
-"@abp/core@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.1.tgz#30fb627e750f651b4d1819461e3ffeb5fc6d9011"
- integrity sha512-Adb4sk9oZJaxL19RbM1opLGWn2kKzRUcFLH6lNG2QYCAXf74y/YfFLQyoZSrTKS1M+hkGjIrEW6GssAgHTCJeg==
+"@abp/core@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.2.tgz#0eab20842f8c0801d1dca036d3d66a67e155e019"
+ integrity sha512-8bC1MAV4iSFLJvRvM5mvrI9+N5FPAjaG79hr3p0xJtNixFOFpNELDf4p0zwy97zY8juL+AIEyJAkg+KIIK90DQ==
dependencies:
- "@abp/utils" "~9.2.0-rc.1"
+ "@abp/utils" "~9.2.0-rc.2"
-"@abp/datatables.net-bs5@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.1.tgz#7d56850b6e46f744c794e40d08aeb5fd1a7543ee"
- integrity sha512-PFt0PruHikzXzcEKtykwnRo+Z0D+njmhaoJk4J11yoZjvSFOAQXIRdsVgFgJub8REN3I57eG9PPCl3AZwAba9w==
+"@abp/datatables.net-bs5@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.2.tgz#8c07544cafd2d2257f45150d3265c25eafc0ec0f"
+ integrity sha512-l3VOtc0fleUsx+ZUMr49+nPBWRBUVw4Z26ogT7O7uRR8doeerNU1GfA4yFJCUp02WIwt8cmZ+apJHADykn9Vng==
dependencies:
- "@abp/datatables.net" "~9.2.0-rc.1"
+ "@abp/datatables.net" "~9.2.0-rc.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.1.tgz#8d165f404e85a54a4e92887173a3d01f827ba5ef"
- integrity sha512-rEvCSJWH2l505Nb7Nqa0tL1iFpnMZ+WxnfbomaqdSpL6YsCUd8syeGI37V+LQUknXGsUFqGVyazPrU3vjIR8Kg==
+"@abp/datatables.net@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.2.tgz#2880ccb61750faa1689aec15f9e49d92ab1e94a1"
+ integrity sha512-nljq0p8mxoBvMZngtViInyQJqX/MI7EyQeCIYNICF2LO42RRZfpKaRy5zX+4Uc3z/wz209CfK8QfRNH/d1HtBQ==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.1.tgz#758b4028fa5f6d11bb675ff465fc222e3b656c01"
- integrity sha512-H0fmIM/YAkT64LLMub0eDzpxvrNVjkFrRgX4YM10U/AQ0gILxjuEapRxv3+ueIJiy3DiBLkPWQ+SQN3Lwh4FOA==
+"@abp/font-awesome@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.2.tgz#51eb750f5697668db538ad68cc6b9279517da537"
+ integrity sha512-X9JfF4n4MDZLszwZHIHuxSdGGxImEzV91ROKqNeclErCx3bOXyq/l9C+haZl/3TLzTAOSDMLgHGrT3MUCVPF5w==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.1.tgz#558bcf9da8912e0014b407018d1f0fb7ab294bf0"
- integrity sha512-MzhptVbyZ7WNYAw4KmWiI4WnR8H16jBshceO7DFtfyZDRUU0n4ZPTYs1rGlj4+5iv2B7r8dci0Nx94bkId7FwA==
+"@abp/jquery-form@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.2.tgz#58ce31a32bdfb355e5d4e3f97cb4761f594aa8e1"
+ integrity sha512-xN2xjK1RWKygwaqzTaWmpMlU0kGWGa2nKaudM6g9k/B6b1Pfdr8ykI4DaSuPb4BkRmurGkgy4r9o7IUoqv0T8Q==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.1.tgz#48b227ee95e0d7a12efbdfbdf1a28e3003dcdb8f"
- integrity sha512-wTo5/oqU1TVOuuYfsu6XipryW2rrSx+bebP4fm/lQ1cZF+Ki1Rbvt5p+3fIGZfg8dJRMKXCtL3UYyadKTlqJ8A==
+"@abp/jquery-validation-unobtrusive@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.2.tgz#4e624e22cbf149d1c78da46aabaf6fc18d3b65ff"
+ integrity sha512-adKJxnWnhCrIYWoVdo41zgO5p4SjyypCxoHeQ7mkohry2WN6WuQG5nmHqhpdevw966DENvmVzFfz7vnO72vtrg==
dependencies:
- "@abp/jquery-validation" "~9.2.0-rc.1"
+ "@abp/jquery-validation" "~9.2.0-rc.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.1.tgz#fae0ce1e0db0af62f80836d3e982c9a79f7b1209"
- integrity sha512-c2+BwErN2w6ikbOYuuSQHZeMdLaKR7l0CIvwtUnzwCHjdUGAbMX9w9lYwnO6R6DsNCV7Cb5+YrbjM7jGY7zMiQ==
+"@abp/jquery-validation@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.2.tgz#b6a8124d5056ddad515733bffc78703f6bd422be"
+ integrity sha512-4j1fg1qImif2vFZQFJ7z1olEUnjc3BByKS+7joNQ+96/NqOQdOQjRjB2n490od7ExCinKnvYx3JFttpYjHU3Xw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.1.tgz#a930c1ef6a17a831cd7d064b7cbb20d604fbc4bb"
- integrity sha512-qc461cJOQvEX95JbIFtDLj5dxUUDyP7PUXP8SjCvxP4GURoKhjxx0j0U0mBkMDJMrSrvALFKbF5S6OlgdgaPGQ==
+"@abp/jquery@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.2.tgz#335643787ab282d5d2fee4f360c2b62cce3db962"
+ integrity sha512-baKNDuiQMzkV0LFzBwEqS0JYtXIUe5KH+MVizGR6Zv10B8l/gIrUzWI/nnqDtbts6gmY9OBDXkCTcgMQBwKqjw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
jquery "~3.7.1"
-"@abp/lodash@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.1.tgz#0e0b455c84c6b6c52a3aaf1ccc4c704f49503ac8"
- integrity sha512-Bg2Bz7G04jvz+QRXLlK3A2eUBR3Ef1rq622jWsaKo4fW4rCdHkZBbjeqYDLYc1PqDIJawhEdIByh8VzMgRd6tA==
+"@abp/lodash@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.2.tgz#521bccafcc09780c751932688b6ec45c368c2854"
+ integrity sha512-T6eYsDovUl4AYD9n2N4WZq9MeC4/ryke5ctvdhzuArqM7WpPvohq3VKGugrP/MLo9oD3MZ5DVQvMJ0AVg+IXNQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
lodash "^4.17.21"
-"@abp/luxon@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.1.tgz#275726bf1f9ff14cdf902a7ea64213a3e7434927"
- integrity sha512-vga0taYVDPGwcAQqFe6pAEAUu3vRH7MgxBQdMrEX80YhsSJevPHSl6jG3ey5IqWOy4dpMyiN4v7gWBHJ93mbFg==
+"@abp/luxon@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.2.tgz#da366d335f9575b104ea2206e076af35cbbfcfba"
+ integrity sha512-mr8ipYrJDDJPoImIwORK7Z6d1C07APl95L17ufRbig4sjdxjNEDR5uUXVviVafF1No2bVkYiS0xGKQmojA2twg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.1.tgz#3d4c17a9d6ace815e4bc4dc825d0020474a794f7"
- integrity sha512-Cqs6A88bWggdtDoiCREBTXknCI+c7vhmZ/SM84k4NfwzlPscZYMCbtJlrln4g3zmElJwwBPerl0Gs778kUOjog==
+"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.2.tgz#cb79018adf08276041eb5c5dcf75130c8995686b"
+ integrity sha512-jdHXx7kPduaEfFXDvf5s+QVl10RqshNbnZkkqPx0mMkhz2H/qxwzF1e0mcLFL38nEgs+0gxIkcA8/MKq85tyqQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.1.tgz#1604d38429f1e0484223ea4a7a3a10f1785420f4"
- integrity sha512-5VnPhCOnTug7tqlLsg46LY84LU5DrYNKxm5T3oz+OFq4I05Ut/LWGElRvOnEFxfFfkYuJvbxih3trAGuEJD6+A==
+"@abp/moment@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.2.tgz#f4339138668ca72be1d700624b91789344557bff"
+ integrity sha512-J4ZaCDEcXLGmJ+8zqgaMK9Lutnjga28LSbuiFaGLlZ1QgYZ5HDScE128o3vX9qr60tc6IIY0cDkHi4bBHo7ozw==
dependencies:
moment "^2.30.1"
-"@abp/select2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.1.tgz#6f378c9bd4a01dbe72bf41f175c964e36353ef4e"
- integrity sha512-HlQtSmY3VRIbCbTJnWFmvPeUmHYX8cI5z0Dwa30/TNPWDQuws5Yx3F4B9crw6AC/EIzCobsAZ4QhsgQxsUHNvg==
+"@abp/select2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.2.tgz#ba6e839644b7ecdd198fe5286101302a3dc79ce3"
+ integrity sha512-AQMXb5ATgbN7grpKU8lB2xFFfirCe45lIvd9krW5SwUHCYZP7pRPbwQXAew+BqlIIYJJF2GA7/Nf//e/71bKtg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.1.tgz#b70784ff038ff4d6cdc07a7ef35edd7da5dfaa23"
- integrity sha512-cJVdPB1hh7AtmfmcLLAFGxFDYc08sjtRS5kJ37ru9WFVOyzF1A99QgMOEBSB6BGKNbkCJwQbkwGCHjtQTHQ46w==
+"@abp/sweetalert2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.2.tgz#075634dc3ec996607757694d636d276ba2350e06"
+ integrity sha512-ZgHgqM8Q+V9ECQyAyepM5KpshKpQP463xRHwgY45oR7/CfCcO/vS56YQgJNg2zE6+lRQZaRQ9OL7lph8975vVg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.1.tgz#689fa9c9d4b0c0a239b37cd4d045dfb745f392df"
- integrity sha512-mNmmRVzGryW45woLmDrxVnUCSi2+Xp2djHNKe7VF4D2Xywos9yxEImTX8B9lB0QMWl8BawsZCz/jsC3QURkXGw==
+"@abp/timeago@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.2.tgz#25324732966438bd6f505bdd932511ba2cc8c22b"
+ integrity sha512-WfWxxiycg77vVN2hPHqUOu552la+zxr0EZnHMqnEnnBe+gFYe9C0CpdYuyBq2eQXRXHoVzsB+4YRVNk5sbSGng==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
timeago "^1.6.7"
-"@abp/utils@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.1.tgz#508d9922c842f2a76fc748574f0ae3a9954b6895"
- integrity sha512-XFaBI4qxeXixAtapXRzETkS60+5XkZeEnW9O3wyHU6r4rEtIdOHo9w7t/vM5b5KAUlcEE02jS6pcqlJHd7miqw==
+"@abp/utils@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.2.tgz#669885ad1e3ac7b8e182d7c392ea1b633df65aac"
+ integrity sha512-rfQxhJy04Qf50P3ciasKbDlJ+9JidD60xW77TjcoUJvljJE+A8iwTX8Wwqz7+YcC7rks2ILM4y3Ay7/47NOICQ==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json
index 5a72096ceb..8e8c9c00f3 100644
--- a/modules/cms-kit/angular/package.json
+++ b/modules/cms-kit/angular/package.json
@@ -15,11 +15,11 @@
},
"private": true,
"dependencies": {
- "@abp/ng.account": "~9.2.0-rc.1",
- "@abp/ng.identity": "~9.2.0-rc.1",
- "@abp/ng.setting-management": "~9.2.0-rc.1",
- "@abp/ng.tenant-management": "~9.2.0-rc.1",
- "@abp/ng.theme.basic": "~9.2.0-rc.1",
+ "@abp/ng.account": "~9.2.0-rc.2",
+ "@abp/ng.identity": "~9.2.0-rc.2",
+ "@abp/ng.setting-management": "~9.2.0-rc.2",
+ "@abp/ng.tenant-management": "~9.2.0-rc.2",
+ "@abp/ng.theme.basic": "~9.2.0-rc.2",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",
diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json
index 53ed83b2bd..85e1f747dc 100644
--- a/modules/cms-kit/angular/projects/cms-kit/package.json
+++ b/modules/cms-kit/angular/projects/cms-kit/package.json
@@ -4,8 +4,8 @@
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
- "@abp/ng.core": ">=9.2.0-rc.1",
- "@abp/ng.theme.shared": ">=9.2.0-rc.1"
+ "@abp/ng.core": ">=9.2.0-rc.2",
+ "@abp/ng.theme.shared": ">=9.2.0-rc.2"
},
"dependencies": {
"tslib": "^2.0.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
index 82bc8fc24c..b39f45087b 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
@@ -3,6 +3,6 @@
"name": "my-app-identityserver",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.2"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
index 8524474dd3..7a9396e283 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
@@ -2,185 +2,185 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.1.tgz#00f6c73e8e38578cfb6eb10214a8e4347dda75b3"
- integrity sha512-Ophg50dxq2E4A2PgAtErDZ8LQfgAoT1ipZv4H3lxu0GwtRXrLEScfykHVDScTHJVpTF8Z549zYQl3jYtPJACog==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.2.tgz#e32c8bd046d7377ae3f6a703eac9069e10bcd600"
+ integrity sha512-oj4lGrzllgGrq7rI7gz1Xvq5TU+xT+isGVf4T8hF3INE/J2nIyK45HnkjDq5wpdM3P+HkdM1+RtWNrLSVu0Klg==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.2"
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.1.tgz#4fb738ad5a6ac85165cf3e45893615d1762d43ed"
- integrity sha512-TCW7nGGMqnBD8n2Jc1r9ht2HixRj8kDOZJysQUd3uHNmTBCO1b5cBjxL4ksSzM98/kEs6i0q6OTasqJrxHuHNA==
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.2.tgz#77562013b604d0193e361efa6801235179dc7b4f"
+ integrity sha512-5KcMGg6o6W5uwsujrjUARlZFgWmZeYBNCf1vkf3btakkwTzmPDbypUx6VrgBJbt4AUnYlMQbSHvbfK0d3I1e6w==
dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.1"
- "@abp/bootstrap" "~9.2.0-rc.1"
- "@abp/bootstrap-datepicker" "~9.2.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~9.2.0-rc.1"
- "@abp/datatables.net-bs5" "~9.2.0-rc.1"
- "@abp/font-awesome" "~9.2.0-rc.1"
- "@abp/jquery-form" "~9.2.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.1"
- "@abp/lodash" "~9.2.0-rc.1"
- "@abp/luxon" "~9.2.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.1"
- "@abp/moment" "~9.2.0-rc.1"
- "@abp/select2" "~9.2.0-rc.1"
- "@abp/sweetalert2" "~9.2.0-rc.1"
- "@abp/timeago" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.1.tgz#d2a2c5fc25444eedf2f4ea92505ba4aede86b771"
- integrity sha512-vgdJFOzxqwuaDcMhzIHHn1wIJbIar/NzJxpbUBjRWjnZzrKKerDLF9FuDegpU1fX3nOvunI11zSFT3yCuMHebQ==
+ "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.2"
+ "@abp/bootstrap" "~9.2.0-rc.2"
+ "@abp/bootstrap-datepicker" "~9.2.0-rc.2"
+ "@abp/bootstrap-daterangepicker" "~9.2.0-rc.2"
+ "@abp/datatables.net-bs5" "~9.2.0-rc.2"
+ "@abp/font-awesome" "~9.2.0-rc.2"
+ "@abp/jquery-form" "~9.2.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.2"
+ "@abp/lodash" "~9.2.0-rc.2"
+ "@abp/luxon" "~9.2.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.2"
+ "@abp/moment" "~9.2.0-rc.2"
+ "@abp/select2" "~9.2.0-rc.2"
+ "@abp/sweetalert2" "~9.2.0-rc.2"
+ "@abp/timeago" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.2.tgz#e1c0e4b0280d5fe37659da8dc696150f0d461336"
+ integrity sha512-WG4WWGS1mSb2QWAVOA2nrvoi9/3oueEaKEG18xbPgWiLz5GCq8gsopKqUgW/fmBaw+1Jh9tsuCTH7eED/2tUxA==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.1.tgz#b548840efb6a9c8d9acabf828af4e95628be6cbe"
- integrity sha512-ClR+fiOiUccEIvbeAgfo2+Z3eZYp7MRIVrll8Rh93oKr6C0XzjwA7acSGe87CS3e5wkUXMsKtqmRX+eSXyJBPQ==
+"@abp/bootstrap-datepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.2.tgz#429c2d44a22f9190013aea0efa420854b7e83a4f"
+ integrity sha512-bxMpaxTgnF5/VELbKvtZVw0tI0bowzUQFVSBQJqO4o7wJmxyHNzJuaom8Is+tCsoMrpo8t9EGMGfpWHV1IsrjQ==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.1.tgz#e7174841889b80f7beddaeb84be7a0b908cc34a3"
- integrity sha512-CzSutc7rtYzd4jzTTiKlUmFGlZk70DTcp/tnuD7rVWZp7Njr2INfwGlgt7P7Hj3g9Wt3j0mAM+IDz9t2rleqtA==
+"@abp/bootstrap-daterangepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.2.tgz#85bb869d5d43eb6c97f50943ea2c390cb4d37d54"
+ integrity sha512-rLLsY6GCY16IOwRkmx7vZ25sVHOM9dPdTlcZiuUuEi5+QrmgGiqZmIwqYiu4WFSPPTJtufsyMaHzXxqiZRpXVg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.1.tgz#87c17c50a9e8f6fdb6474541aeaadf1ebb1d6b1b"
- integrity sha512-tgOIGY7HfiwgM9QUpcydZN9tdKSrm6mYPzECBDU866xWi8aUeLZp12hLoSL94M1iZ6jchbZaqTqMOy00Tc0FCQ==
+"@abp/bootstrap@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.2.tgz#ba2ab98d930501e7f004f99e7d7e7d4e6d3c0998"
+ integrity sha512-u2mtHHbmXNgngExl4hM5uo/E3k453n0im2Ci02+4dnhZoFicLZlBdtJusZAw5QR1XTLPybW6RXofWBvkZcgiwg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
bootstrap "^5.3.3"
-"@abp/core@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.1.tgz#30fb627e750f651b4d1819461e3ffeb5fc6d9011"
- integrity sha512-Adb4sk9oZJaxL19RbM1opLGWn2kKzRUcFLH6lNG2QYCAXf74y/YfFLQyoZSrTKS1M+hkGjIrEW6GssAgHTCJeg==
+"@abp/core@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.2.tgz#0eab20842f8c0801d1dca036d3d66a67e155e019"
+ integrity sha512-8bC1MAV4iSFLJvRvM5mvrI9+N5FPAjaG79hr3p0xJtNixFOFpNELDf4p0zwy97zY8juL+AIEyJAkg+KIIK90DQ==
dependencies:
- "@abp/utils" "~9.2.0-rc.1"
+ "@abp/utils" "~9.2.0-rc.2"
-"@abp/datatables.net-bs5@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.1.tgz#7d56850b6e46f744c794e40d08aeb5fd1a7543ee"
- integrity sha512-PFt0PruHikzXzcEKtykwnRo+Z0D+njmhaoJk4J11yoZjvSFOAQXIRdsVgFgJub8REN3I57eG9PPCl3AZwAba9w==
+"@abp/datatables.net-bs5@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.2.tgz#8c07544cafd2d2257f45150d3265c25eafc0ec0f"
+ integrity sha512-l3VOtc0fleUsx+ZUMr49+nPBWRBUVw4Z26ogT7O7uRR8doeerNU1GfA4yFJCUp02WIwt8cmZ+apJHADykn9Vng==
dependencies:
- "@abp/datatables.net" "~9.2.0-rc.1"
+ "@abp/datatables.net" "~9.2.0-rc.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.1.tgz#8d165f404e85a54a4e92887173a3d01f827ba5ef"
- integrity sha512-rEvCSJWH2l505Nb7Nqa0tL1iFpnMZ+WxnfbomaqdSpL6YsCUd8syeGI37V+LQUknXGsUFqGVyazPrU3vjIR8Kg==
+"@abp/datatables.net@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.2.tgz#2880ccb61750faa1689aec15f9e49d92ab1e94a1"
+ integrity sha512-nljq0p8mxoBvMZngtViInyQJqX/MI7EyQeCIYNICF2LO42RRZfpKaRy5zX+4Uc3z/wz209CfK8QfRNH/d1HtBQ==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.1.tgz#758b4028fa5f6d11bb675ff465fc222e3b656c01"
- integrity sha512-H0fmIM/YAkT64LLMub0eDzpxvrNVjkFrRgX4YM10U/AQ0gILxjuEapRxv3+ueIJiy3DiBLkPWQ+SQN3Lwh4FOA==
+"@abp/font-awesome@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.2.tgz#51eb750f5697668db538ad68cc6b9279517da537"
+ integrity sha512-X9JfF4n4MDZLszwZHIHuxSdGGxImEzV91ROKqNeclErCx3bOXyq/l9C+haZl/3TLzTAOSDMLgHGrT3MUCVPF5w==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.1.tgz#558bcf9da8912e0014b407018d1f0fb7ab294bf0"
- integrity sha512-MzhptVbyZ7WNYAw4KmWiI4WnR8H16jBshceO7DFtfyZDRUU0n4ZPTYs1rGlj4+5iv2B7r8dci0Nx94bkId7FwA==
+"@abp/jquery-form@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.2.tgz#58ce31a32bdfb355e5d4e3f97cb4761f594aa8e1"
+ integrity sha512-xN2xjK1RWKygwaqzTaWmpMlU0kGWGa2nKaudM6g9k/B6b1Pfdr8ykI4DaSuPb4BkRmurGkgy4r9o7IUoqv0T8Q==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.1.tgz#48b227ee95e0d7a12efbdfbdf1a28e3003dcdb8f"
- integrity sha512-wTo5/oqU1TVOuuYfsu6XipryW2rrSx+bebP4fm/lQ1cZF+Ki1Rbvt5p+3fIGZfg8dJRMKXCtL3UYyadKTlqJ8A==
+"@abp/jquery-validation-unobtrusive@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.2.tgz#4e624e22cbf149d1c78da46aabaf6fc18d3b65ff"
+ integrity sha512-adKJxnWnhCrIYWoVdo41zgO5p4SjyypCxoHeQ7mkohry2WN6WuQG5nmHqhpdevw966DENvmVzFfz7vnO72vtrg==
dependencies:
- "@abp/jquery-validation" "~9.2.0-rc.1"
+ "@abp/jquery-validation" "~9.2.0-rc.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.1.tgz#fae0ce1e0db0af62f80836d3e982c9a79f7b1209"
- integrity sha512-c2+BwErN2w6ikbOYuuSQHZeMdLaKR7l0CIvwtUnzwCHjdUGAbMX9w9lYwnO6R6DsNCV7Cb5+YrbjM7jGY7zMiQ==
+"@abp/jquery-validation@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.2.tgz#b6a8124d5056ddad515733bffc78703f6bd422be"
+ integrity sha512-4j1fg1qImif2vFZQFJ7z1olEUnjc3BByKS+7joNQ+96/NqOQdOQjRjB2n490od7ExCinKnvYx3JFttpYjHU3Xw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.1.tgz#a930c1ef6a17a831cd7d064b7cbb20d604fbc4bb"
- integrity sha512-qc461cJOQvEX95JbIFtDLj5dxUUDyP7PUXP8SjCvxP4GURoKhjxx0j0U0mBkMDJMrSrvALFKbF5S6OlgdgaPGQ==
+"@abp/jquery@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.2.tgz#335643787ab282d5d2fee4f360c2b62cce3db962"
+ integrity sha512-baKNDuiQMzkV0LFzBwEqS0JYtXIUe5KH+MVizGR6Zv10B8l/gIrUzWI/nnqDtbts6gmY9OBDXkCTcgMQBwKqjw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
jquery "~3.7.1"
-"@abp/lodash@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.1.tgz#0e0b455c84c6b6c52a3aaf1ccc4c704f49503ac8"
- integrity sha512-Bg2Bz7G04jvz+QRXLlK3A2eUBR3Ef1rq622jWsaKo4fW4rCdHkZBbjeqYDLYc1PqDIJawhEdIByh8VzMgRd6tA==
+"@abp/lodash@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.2.tgz#521bccafcc09780c751932688b6ec45c368c2854"
+ integrity sha512-T6eYsDovUl4AYD9n2N4WZq9MeC4/ryke5ctvdhzuArqM7WpPvohq3VKGugrP/MLo9oD3MZ5DVQvMJ0AVg+IXNQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
lodash "^4.17.21"
-"@abp/luxon@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.1.tgz#275726bf1f9ff14cdf902a7ea64213a3e7434927"
- integrity sha512-vga0taYVDPGwcAQqFe6pAEAUu3vRH7MgxBQdMrEX80YhsSJevPHSl6jG3ey5IqWOy4dpMyiN4v7gWBHJ93mbFg==
+"@abp/luxon@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.2.tgz#da366d335f9575b104ea2206e076af35cbbfcfba"
+ integrity sha512-mr8ipYrJDDJPoImIwORK7Z6d1C07APl95L17ufRbig4sjdxjNEDR5uUXVviVafF1No2bVkYiS0xGKQmojA2twg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.1.tgz#3d4c17a9d6ace815e4bc4dc825d0020474a794f7"
- integrity sha512-Cqs6A88bWggdtDoiCREBTXknCI+c7vhmZ/SM84k4NfwzlPscZYMCbtJlrln4g3zmElJwwBPerl0Gs778kUOjog==
+"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.2.tgz#cb79018adf08276041eb5c5dcf75130c8995686b"
+ integrity sha512-jdHXx7kPduaEfFXDvf5s+QVl10RqshNbnZkkqPx0mMkhz2H/qxwzF1e0mcLFL38nEgs+0gxIkcA8/MKq85tyqQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.1.tgz#1604d38429f1e0484223ea4a7a3a10f1785420f4"
- integrity sha512-5VnPhCOnTug7tqlLsg46LY84LU5DrYNKxm5T3oz+OFq4I05Ut/LWGElRvOnEFxfFfkYuJvbxih3trAGuEJD6+A==
+"@abp/moment@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.2.tgz#f4339138668ca72be1d700624b91789344557bff"
+ integrity sha512-J4ZaCDEcXLGmJ+8zqgaMK9Lutnjga28LSbuiFaGLlZ1QgYZ5HDScE128o3vX9qr60tc6IIY0cDkHi4bBHo7ozw==
dependencies:
moment "^2.30.1"
-"@abp/select2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.1.tgz#6f378c9bd4a01dbe72bf41f175c964e36353ef4e"
- integrity sha512-HlQtSmY3VRIbCbTJnWFmvPeUmHYX8cI5z0Dwa30/TNPWDQuws5Yx3F4B9crw6AC/EIzCobsAZ4QhsgQxsUHNvg==
+"@abp/select2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.2.tgz#ba6e839644b7ecdd198fe5286101302a3dc79ce3"
+ integrity sha512-AQMXb5ATgbN7grpKU8lB2xFFfirCe45lIvd9krW5SwUHCYZP7pRPbwQXAew+BqlIIYJJF2GA7/Nf//e/71bKtg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.1.tgz#b70784ff038ff4d6cdc07a7ef35edd7da5dfaa23"
- integrity sha512-cJVdPB1hh7AtmfmcLLAFGxFDYc08sjtRS5kJ37ru9WFVOyzF1A99QgMOEBSB6BGKNbkCJwQbkwGCHjtQTHQ46w==
+"@abp/sweetalert2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.2.tgz#075634dc3ec996607757694d636d276ba2350e06"
+ integrity sha512-ZgHgqM8Q+V9ECQyAyepM5KpshKpQP463xRHwgY45oR7/CfCcO/vS56YQgJNg2zE6+lRQZaRQ9OL7lph8975vVg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.1.tgz#689fa9c9d4b0c0a239b37cd4d045dfb745f392df"
- integrity sha512-mNmmRVzGryW45woLmDrxVnUCSi2+Xp2djHNKe7VF4D2Xywos9yxEImTX8B9lB0QMWl8BawsZCz/jsC3QURkXGw==
+"@abp/timeago@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.2.tgz#25324732966438bd6f505bdd932511ba2cc8c22b"
+ integrity sha512-WfWxxiycg77vVN2hPHqUOu552la+zxr0EZnHMqnEnnBe+gFYe9C0CpdYuyBq2eQXRXHoVzsB+4YRVNk5sbSGng==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
timeago "^1.6.7"
-"@abp/utils@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.1.tgz#508d9922c842f2a76fc748574f0ae3a9954b6895"
- integrity sha512-XFaBI4qxeXixAtapXRzETkS60+5XkZeEnW9O3wyHU6r4rEtIdOHo9w7t/vM5b5KAUlcEE02jS6pcqlJHd7miqw==
+"@abp/utils@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.2.tgz#669885ad1e3ac7b8e182d7c392ea1b633df65aac"
+ integrity sha512-rfQxhJy04Qf50P3ciasKbDlJ+9JidD60xW77TjcoUJvljJE+A8iwTX8Wwqz7+YcC7rks2ILM4y3Ay7/47NOICQ==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
index ece4546430..701670d422 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
@@ -3,6 +3,6 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.2"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
index 8524474dd3..7a9396e283 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
@@ -2,185 +2,185 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.1.tgz#00f6c73e8e38578cfb6eb10214a8e4347dda75b3"
- integrity sha512-Ophg50dxq2E4A2PgAtErDZ8LQfgAoT1ipZv4H3lxu0GwtRXrLEScfykHVDScTHJVpTF8Z549zYQl3jYtPJACog==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.2.tgz#e32c8bd046d7377ae3f6a703eac9069e10bcd600"
+ integrity sha512-oj4lGrzllgGrq7rI7gz1Xvq5TU+xT+isGVf4T8hF3INE/J2nIyK45HnkjDq5wpdM3P+HkdM1+RtWNrLSVu0Klg==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.2"
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.1.tgz#4fb738ad5a6ac85165cf3e45893615d1762d43ed"
- integrity sha512-TCW7nGGMqnBD8n2Jc1r9ht2HixRj8kDOZJysQUd3uHNmTBCO1b5cBjxL4ksSzM98/kEs6i0q6OTasqJrxHuHNA==
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.2.tgz#77562013b604d0193e361efa6801235179dc7b4f"
+ integrity sha512-5KcMGg6o6W5uwsujrjUARlZFgWmZeYBNCf1vkf3btakkwTzmPDbypUx6VrgBJbt4AUnYlMQbSHvbfK0d3I1e6w==
dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.1"
- "@abp/bootstrap" "~9.2.0-rc.1"
- "@abp/bootstrap-datepicker" "~9.2.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~9.2.0-rc.1"
- "@abp/datatables.net-bs5" "~9.2.0-rc.1"
- "@abp/font-awesome" "~9.2.0-rc.1"
- "@abp/jquery-form" "~9.2.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.1"
- "@abp/lodash" "~9.2.0-rc.1"
- "@abp/luxon" "~9.2.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.1"
- "@abp/moment" "~9.2.0-rc.1"
- "@abp/select2" "~9.2.0-rc.1"
- "@abp/sweetalert2" "~9.2.0-rc.1"
- "@abp/timeago" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.1.tgz#d2a2c5fc25444eedf2f4ea92505ba4aede86b771"
- integrity sha512-vgdJFOzxqwuaDcMhzIHHn1wIJbIar/NzJxpbUBjRWjnZzrKKerDLF9FuDegpU1fX3nOvunI11zSFT3yCuMHebQ==
+ "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.2"
+ "@abp/bootstrap" "~9.2.0-rc.2"
+ "@abp/bootstrap-datepicker" "~9.2.0-rc.2"
+ "@abp/bootstrap-daterangepicker" "~9.2.0-rc.2"
+ "@abp/datatables.net-bs5" "~9.2.0-rc.2"
+ "@abp/font-awesome" "~9.2.0-rc.2"
+ "@abp/jquery-form" "~9.2.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.2"
+ "@abp/lodash" "~9.2.0-rc.2"
+ "@abp/luxon" "~9.2.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.2"
+ "@abp/moment" "~9.2.0-rc.2"
+ "@abp/select2" "~9.2.0-rc.2"
+ "@abp/sweetalert2" "~9.2.0-rc.2"
+ "@abp/timeago" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.2.tgz#e1c0e4b0280d5fe37659da8dc696150f0d461336"
+ integrity sha512-WG4WWGS1mSb2QWAVOA2nrvoi9/3oueEaKEG18xbPgWiLz5GCq8gsopKqUgW/fmBaw+1Jh9tsuCTH7eED/2tUxA==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.1.tgz#b548840efb6a9c8d9acabf828af4e95628be6cbe"
- integrity sha512-ClR+fiOiUccEIvbeAgfo2+Z3eZYp7MRIVrll8Rh93oKr6C0XzjwA7acSGe87CS3e5wkUXMsKtqmRX+eSXyJBPQ==
+"@abp/bootstrap-datepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.2.tgz#429c2d44a22f9190013aea0efa420854b7e83a4f"
+ integrity sha512-bxMpaxTgnF5/VELbKvtZVw0tI0bowzUQFVSBQJqO4o7wJmxyHNzJuaom8Is+tCsoMrpo8t9EGMGfpWHV1IsrjQ==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.1.tgz#e7174841889b80f7beddaeb84be7a0b908cc34a3"
- integrity sha512-CzSutc7rtYzd4jzTTiKlUmFGlZk70DTcp/tnuD7rVWZp7Njr2INfwGlgt7P7Hj3g9Wt3j0mAM+IDz9t2rleqtA==
+"@abp/bootstrap-daterangepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.2.tgz#85bb869d5d43eb6c97f50943ea2c390cb4d37d54"
+ integrity sha512-rLLsY6GCY16IOwRkmx7vZ25sVHOM9dPdTlcZiuUuEi5+QrmgGiqZmIwqYiu4WFSPPTJtufsyMaHzXxqiZRpXVg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.1.tgz#87c17c50a9e8f6fdb6474541aeaadf1ebb1d6b1b"
- integrity sha512-tgOIGY7HfiwgM9QUpcydZN9tdKSrm6mYPzECBDU866xWi8aUeLZp12hLoSL94M1iZ6jchbZaqTqMOy00Tc0FCQ==
+"@abp/bootstrap@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.2.tgz#ba2ab98d930501e7f004f99e7d7e7d4e6d3c0998"
+ integrity sha512-u2mtHHbmXNgngExl4hM5uo/E3k453n0im2Ci02+4dnhZoFicLZlBdtJusZAw5QR1XTLPybW6RXofWBvkZcgiwg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
bootstrap "^5.3.3"
-"@abp/core@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.1.tgz#30fb627e750f651b4d1819461e3ffeb5fc6d9011"
- integrity sha512-Adb4sk9oZJaxL19RbM1opLGWn2kKzRUcFLH6lNG2QYCAXf74y/YfFLQyoZSrTKS1M+hkGjIrEW6GssAgHTCJeg==
+"@abp/core@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.2.tgz#0eab20842f8c0801d1dca036d3d66a67e155e019"
+ integrity sha512-8bC1MAV4iSFLJvRvM5mvrI9+N5FPAjaG79hr3p0xJtNixFOFpNELDf4p0zwy97zY8juL+AIEyJAkg+KIIK90DQ==
dependencies:
- "@abp/utils" "~9.2.0-rc.1"
+ "@abp/utils" "~9.2.0-rc.2"
-"@abp/datatables.net-bs5@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.1.tgz#7d56850b6e46f744c794e40d08aeb5fd1a7543ee"
- integrity sha512-PFt0PruHikzXzcEKtykwnRo+Z0D+njmhaoJk4J11yoZjvSFOAQXIRdsVgFgJub8REN3I57eG9PPCl3AZwAba9w==
+"@abp/datatables.net-bs5@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.2.tgz#8c07544cafd2d2257f45150d3265c25eafc0ec0f"
+ integrity sha512-l3VOtc0fleUsx+ZUMr49+nPBWRBUVw4Z26ogT7O7uRR8doeerNU1GfA4yFJCUp02WIwt8cmZ+apJHADykn9Vng==
dependencies:
- "@abp/datatables.net" "~9.2.0-rc.1"
+ "@abp/datatables.net" "~9.2.0-rc.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.1.tgz#8d165f404e85a54a4e92887173a3d01f827ba5ef"
- integrity sha512-rEvCSJWH2l505Nb7Nqa0tL1iFpnMZ+WxnfbomaqdSpL6YsCUd8syeGI37V+LQUknXGsUFqGVyazPrU3vjIR8Kg==
+"@abp/datatables.net@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.2.tgz#2880ccb61750faa1689aec15f9e49d92ab1e94a1"
+ integrity sha512-nljq0p8mxoBvMZngtViInyQJqX/MI7EyQeCIYNICF2LO42RRZfpKaRy5zX+4Uc3z/wz209CfK8QfRNH/d1HtBQ==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.1.tgz#758b4028fa5f6d11bb675ff465fc222e3b656c01"
- integrity sha512-H0fmIM/YAkT64LLMub0eDzpxvrNVjkFrRgX4YM10U/AQ0gILxjuEapRxv3+ueIJiy3DiBLkPWQ+SQN3Lwh4FOA==
+"@abp/font-awesome@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.2.tgz#51eb750f5697668db538ad68cc6b9279517da537"
+ integrity sha512-X9JfF4n4MDZLszwZHIHuxSdGGxImEzV91ROKqNeclErCx3bOXyq/l9C+haZl/3TLzTAOSDMLgHGrT3MUCVPF5w==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/jquery-form@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.1.tgz#558bcf9da8912e0014b407018d1f0fb7ab294bf0"
- integrity sha512-MzhptVbyZ7WNYAw4KmWiI4WnR8H16jBshceO7DFtfyZDRUU0n4ZPTYs1rGlj4+5iv2B7r8dci0Nx94bkId7FwA==
+"@abp/jquery-form@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.2.tgz#58ce31a32bdfb355e5d4e3f97cb4761f594aa8e1"
+ integrity sha512-xN2xjK1RWKygwaqzTaWmpMlU0kGWGa2nKaudM6g9k/B6b1Pfdr8ykI4DaSuPb4BkRmurGkgy4r9o7IUoqv0T8Q==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.1.tgz#48b227ee95e0d7a12efbdfbdf1a28e3003dcdb8f"
- integrity sha512-wTo5/oqU1TVOuuYfsu6XipryW2rrSx+bebP4fm/lQ1cZF+Ki1Rbvt5p+3fIGZfg8dJRMKXCtL3UYyadKTlqJ8A==
+"@abp/jquery-validation-unobtrusive@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.2.tgz#4e624e22cbf149d1c78da46aabaf6fc18d3b65ff"
+ integrity sha512-adKJxnWnhCrIYWoVdo41zgO5p4SjyypCxoHeQ7mkohry2WN6WuQG5nmHqhpdevw966DENvmVzFfz7vnO72vtrg==
dependencies:
- "@abp/jquery-validation" "~9.2.0-rc.1"
+ "@abp/jquery-validation" "~9.2.0-rc.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.1.tgz#fae0ce1e0db0af62f80836d3e982c9a79f7b1209"
- integrity sha512-c2+BwErN2w6ikbOYuuSQHZeMdLaKR7l0CIvwtUnzwCHjdUGAbMX9w9lYwnO6R6DsNCV7Cb5+YrbjM7jGY7zMiQ==
+"@abp/jquery-validation@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.2.tgz#b6a8124d5056ddad515733bffc78703f6bd422be"
+ integrity sha512-4j1fg1qImif2vFZQFJ7z1olEUnjc3BByKS+7joNQ+96/NqOQdOQjRjB2n490od7ExCinKnvYx3JFttpYjHU3Xw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.1.tgz#a930c1ef6a17a831cd7d064b7cbb20d604fbc4bb"
- integrity sha512-qc461cJOQvEX95JbIFtDLj5dxUUDyP7PUXP8SjCvxP4GURoKhjxx0j0U0mBkMDJMrSrvALFKbF5S6OlgdgaPGQ==
+"@abp/jquery@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.2.tgz#335643787ab282d5d2fee4f360c2b62cce3db962"
+ integrity sha512-baKNDuiQMzkV0LFzBwEqS0JYtXIUe5KH+MVizGR6Zv10B8l/gIrUzWI/nnqDtbts6gmY9OBDXkCTcgMQBwKqjw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
jquery "~3.7.1"
-"@abp/lodash@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.1.tgz#0e0b455c84c6b6c52a3aaf1ccc4c704f49503ac8"
- integrity sha512-Bg2Bz7G04jvz+QRXLlK3A2eUBR3Ef1rq622jWsaKo4fW4rCdHkZBbjeqYDLYc1PqDIJawhEdIByh8VzMgRd6tA==
+"@abp/lodash@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.2.tgz#521bccafcc09780c751932688b6ec45c368c2854"
+ integrity sha512-T6eYsDovUl4AYD9n2N4WZq9MeC4/ryke5ctvdhzuArqM7WpPvohq3VKGugrP/MLo9oD3MZ5DVQvMJ0AVg+IXNQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
lodash "^4.17.21"
-"@abp/luxon@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.1.tgz#275726bf1f9ff14cdf902a7ea64213a3e7434927"
- integrity sha512-vga0taYVDPGwcAQqFe6pAEAUu3vRH7MgxBQdMrEX80YhsSJevPHSl6jG3ey5IqWOy4dpMyiN4v7gWBHJ93mbFg==
+"@abp/luxon@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.2.tgz#da366d335f9575b104ea2206e076af35cbbfcfba"
+ integrity sha512-mr8ipYrJDDJPoImIwORK7Z6d1C07APl95L17ufRbig4sjdxjNEDR5uUXVviVafF1No2bVkYiS0xGKQmojA2twg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.1.tgz#3d4c17a9d6ace815e4bc4dc825d0020474a794f7"
- integrity sha512-Cqs6A88bWggdtDoiCREBTXknCI+c7vhmZ/SM84k4NfwzlPscZYMCbtJlrln4g3zmElJwwBPerl0Gs778kUOjog==
+"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.2.tgz#cb79018adf08276041eb5c5dcf75130c8995686b"
+ integrity sha512-jdHXx7kPduaEfFXDvf5s+QVl10RqshNbnZkkqPx0mMkhz2H/qxwzF1e0mcLFL38nEgs+0gxIkcA8/MKq85tyqQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.1.tgz#1604d38429f1e0484223ea4a7a3a10f1785420f4"
- integrity sha512-5VnPhCOnTug7tqlLsg46LY84LU5DrYNKxm5T3oz+OFq4I05Ut/LWGElRvOnEFxfFfkYuJvbxih3trAGuEJD6+A==
+"@abp/moment@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.2.tgz#f4339138668ca72be1d700624b91789344557bff"
+ integrity sha512-J4ZaCDEcXLGmJ+8zqgaMK9Lutnjga28LSbuiFaGLlZ1QgYZ5HDScE128o3vX9qr60tc6IIY0cDkHi4bBHo7ozw==
dependencies:
moment "^2.30.1"
-"@abp/select2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.1.tgz#6f378c9bd4a01dbe72bf41f175c964e36353ef4e"
- integrity sha512-HlQtSmY3VRIbCbTJnWFmvPeUmHYX8cI5z0Dwa30/TNPWDQuws5Yx3F4B9crw6AC/EIzCobsAZ4QhsgQxsUHNvg==
+"@abp/select2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.2.tgz#ba6e839644b7ecdd198fe5286101302a3dc79ce3"
+ integrity sha512-AQMXb5ATgbN7grpKU8lB2xFFfirCe45lIvd9krW5SwUHCYZP7pRPbwQXAew+BqlIIYJJF2GA7/Nf//e/71bKtg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
select2 "^4.0.13"
-"@abp/sweetalert2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.1.tgz#b70784ff038ff4d6cdc07a7ef35edd7da5dfaa23"
- integrity sha512-cJVdPB1hh7AtmfmcLLAFGxFDYc08sjtRS5kJ37ru9WFVOyzF1A99QgMOEBSB6BGKNbkCJwQbkwGCHjtQTHQ46w==
+"@abp/sweetalert2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.2.tgz#075634dc3ec996607757694d636d276ba2350e06"
+ integrity sha512-ZgHgqM8Q+V9ECQyAyepM5KpshKpQP463xRHwgY45oR7/CfCcO/vS56YQgJNg2zE6+lRQZaRQ9OL7lph8975vVg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.1.tgz#689fa9c9d4b0c0a239b37cd4d045dfb745f392df"
- integrity sha512-mNmmRVzGryW45woLmDrxVnUCSi2+Xp2djHNKe7VF4D2Xywos9yxEImTX8B9lB0QMWl8BawsZCz/jsC3QURkXGw==
+"@abp/timeago@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.2.tgz#25324732966438bd6f505bdd932511ba2cc8c22b"
+ integrity sha512-WfWxxiycg77vVN2hPHqUOu552la+zxr0EZnHMqnEnnBe+gFYe9C0CpdYuyBq2eQXRXHoVzsB+4YRVNk5sbSGng==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
timeago "^1.6.7"
-"@abp/utils@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.1.tgz#508d9922c842f2a76fc748574f0ae3a9954b6895"
- integrity sha512-XFaBI4qxeXixAtapXRzETkS60+5XkZeEnW9O3wyHU6r4rEtIdOHo9w7t/vM5b5KAUlcEE02jS6pcqlJHd7miqw==
+"@abp/utils@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.2.tgz#669885ad1e3ac7b8e182d7c392ea1b633df65aac"
+ integrity sha512-rfQxhJy04Qf50P3ciasKbDlJ+9JidD60xW77TjcoUJvljJE+A8iwTX8Wwqz7+YcC7rks2ILM4y3Ay7/47NOICQ==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
index 8d367f02e8..5243b8b399 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
@@ -3,7 +3,7 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.1",
- "@abp/cms-kit": "9.2.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.2.0-rc.2",
+ "@abp/cms-kit": "9.2.0-rc.2"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
index dea3820ce1..dd4e5281d4 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
@@ -2,293 +2,293 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.1.tgz#00f6c73e8e38578cfb6eb10214a8e4347dda75b3"
- integrity sha512-Ophg50dxq2E4A2PgAtErDZ8LQfgAoT1ipZv4H3lxu0GwtRXrLEScfykHVDScTHJVpTF8Z549zYQl3jYtPJACog==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.1.tgz#4fb738ad5a6ac85165cf3e45893615d1762d43ed"
- integrity sha512-TCW7nGGMqnBD8n2Jc1r9ht2HixRj8kDOZJysQUd3uHNmTBCO1b5cBjxL4ksSzM98/kEs6i0q6OTasqJrxHuHNA==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.1"
- "@abp/bootstrap" "~9.2.0-rc.1"
- "@abp/bootstrap-datepicker" "~9.2.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~9.2.0-rc.1"
- "@abp/datatables.net-bs5" "~9.2.0-rc.1"
- "@abp/font-awesome" "~9.2.0-rc.1"
- "@abp/jquery-form" "~9.2.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.1"
- "@abp/lodash" "~9.2.0-rc.1"
- "@abp/luxon" "~9.2.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.1"
- "@abp/moment" "~9.2.0-rc.1"
- "@abp/select2" "~9.2.0-rc.1"
- "@abp/sweetalert2" "~9.2.0-rc.1"
- "@abp/timeago" "~9.2.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.1.tgz#d2a2c5fc25444eedf2f4ea92505ba4aede86b771"
- integrity sha512-vgdJFOzxqwuaDcMhzIHHn1wIJbIar/NzJxpbUBjRWjnZzrKKerDLF9FuDegpU1fX3nOvunI11zSFT3yCuMHebQ==
+"@abp/aspnetcore.mvc.ui.theme.basic@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.2.0-rc.2.tgz#e32c8bd046d7377ae3f6a703eac9069e10bcd600"
+ integrity sha512-oj4lGrzllgGrq7rI7gz1Xvq5TU+xT+isGVf4T8hF3INE/J2nIyK45HnkjDq5wpdM3P+HkdM1+RtWNrLSVu0Klg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.2.0-rc.2.tgz#77562013b604d0193e361efa6801235179dc7b4f"
+ integrity sha512-5KcMGg6o6W5uwsujrjUARlZFgWmZeYBNCf1vkf3btakkwTzmPDbypUx6VrgBJbt4AUnYlMQbSHvbfK0d3I1e6w==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~9.2.0-rc.2"
+ "@abp/bootstrap" "~9.2.0-rc.2"
+ "@abp/bootstrap-datepicker" "~9.2.0-rc.2"
+ "@abp/bootstrap-daterangepicker" "~9.2.0-rc.2"
+ "@abp/datatables.net-bs5" "~9.2.0-rc.2"
+ "@abp/font-awesome" "~9.2.0-rc.2"
+ "@abp/jquery-form" "~9.2.0-rc.2"
+ "@abp/jquery-validation-unobtrusive" "~9.2.0-rc.2"
+ "@abp/lodash" "~9.2.0-rc.2"
+ "@abp/luxon" "~9.2.0-rc.2"
+ "@abp/malihu-custom-scrollbar-plugin" "~9.2.0-rc.2"
+ "@abp/moment" "~9.2.0-rc.2"
+ "@abp/select2" "~9.2.0-rc.2"
+ "@abp/sweetalert2" "~9.2.0-rc.2"
+ "@abp/timeago" "~9.2.0-rc.2"
+
+"@abp/aspnetcore.mvc.ui@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.2.0-rc.2.tgz#e1c0e4b0280d5fe37659da8dc696150f0d461336"
+ integrity sha512-WG4WWGS1mSb2QWAVOA2nrvoi9/3oueEaKEG18xbPgWiLz5GCq8gsopKqUgW/fmBaw+1Jh9tsuCTH7eED/2tUxA==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.1.tgz#b548840efb6a9c8d9acabf828af4e95628be6cbe"
- integrity sha512-ClR+fiOiUccEIvbeAgfo2+Z3eZYp7MRIVrll8Rh93oKr6C0XzjwA7acSGe87CS3e5wkUXMsKtqmRX+eSXyJBPQ==
+"@abp/bootstrap-datepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.2.0-rc.2.tgz#429c2d44a22f9190013aea0efa420854b7e83a4f"
+ integrity sha512-bxMpaxTgnF5/VELbKvtZVw0tI0bowzUQFVSBQJqO4o7wJmxyHNzJuaom8Is+tCsoMrpo8t9EGMGfpWHV1IsrjQ==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.1.tgz#e7174841889b80f7beddaeb84be7a0b908cc34a3"
- integrity sha512-CzSutc7rtYzd4jzTTiKlUmFGlZk70DTcp/tnuD7rVWZp7Njr2INfwGlgt7P7Hj3g9Wt3j0mAM+IDz9t2rleqtA==
+"@abp/bootstrap-daterangepicker@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.2.0-rc.2.tgz#85bb869d5d43eb6c97f50943ea2c390cb4d37d54"
+ integrity sha512-rLLsY6GCY16IOwRkmx7vZ25sVHOM9dPdTlcZiuUuEi5+QrmgGiqZmIwqYiu4WFSPPTJtufsyMaHzXxqiZRpXVg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.1.tgz#87c17c50a9e8f6fdb6474541aeaadf1ebb1d6b1b"
- integrity sha512-tgOIGY7HfiwgM9QUpcydZN9tdKSrm6mYPzECBDU866xWi8aUeLZp12hLoSL94M1iZ6jchbZaqTqMOy00Tc0FCQ==
+"@abp/bootstrap@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.2.0-rc.2.tgz#ba2ab98d930501e7f004f99e7d7e7d4e6d3c0998"
+ integrity sha512-u2mtHHbmXNgngExl4hM5uo/E3k453n0im2Ci02+4dnhZoFicLZlBdtJusZAw5QR1XTLPybW6RXofWBvkZcgiwg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
bootstrap "^5.3.3"
-"@abp/clipboard@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.2.0-rc.1.tgz#50069847848714fb155d35b656563f26f2fd870c"
- integrity sha512-3lEUrQNje436F8t4nhTrIrFru1A1ZGJHgsYaXR6At50hNwWHcE1LtZKJnXm4am0dALJK/uwv4p7BfNT9Edo11A==
+"@abp/clipboard@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.2.0-rc.2.tgz#608bdb3d4a3ff1a7b38ad5850385746f7cfe6c0c"
+ integrity sha512-w/JiTmidNc7SZuvpkQumyNj6FTBq6hLnhXeBBh4/xega1Ob2q+tbrOSpemgpK6YOXUQbmH8a4vEPvwt7uzNfvQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
clipboard "^2.0.11"
-"@abp/cms-kit.admin@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-9.2.0-rc.1.tgz#6965f9448e9968ae6b23c55d51873b8dbc0a3ba0"
- integrity sha512-FsQlYUv6JYf7uccOabBY0bhprSOK6t6reRA3JFmU0M9LAEBN8XDl6qL8d/vcAznwOSm/nUAIo1VeKAKUjF6XWg==
+"@abp/cms-kit.admin@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-9.2.0-rc.2.tgz#10f34b0bf826f1f402a8e86527a4631107ac62f7"
+ integrity sha512-LkEC7JJPs0nJrCRJJgNYKnUNBXfRYixORmVRnSa+hm+Wi3hqm1sRNQr86rUTOqlw90s9LtrVcBCnDkGmb0/pdg==
dependencies:
- "@abp/codemirror" "~9.2.0-rc.1"
- "@abp/jstree" "~9.2.0-rc.1"
- "@abp/markdown-it" "~9.2.0-rc.1"
- "@abp/slugify" "~9.2.0-rc.1"
- "@abp/tui-editor" "~9.2.0-rc.1"
- "@abp/uppy" "~9.2.0-rc.1"
+ "@abp/codemirror" "~9.2.0-rc.2"
+ "@abp/jstree" "~9.2.0-rc.2"
+ "@abp/markdown-it" "~9.2.0-rc.2"
+ "@abp/slugify" "~9.2.0-rc.2"
+ "@abp/tui-editor" "~9.2.0-rc.2"
+ "@abp/uppy" "~9.2.0-rc.2"
-"@abp/cms-kit.public@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-9.2.0-rc.1.tgz#055fd81cfbbbcf2dce6c006f53a3d9a8f634e729"
- integrity sha512-4m0vAyQHaEaSyVaC/X8UPer4Wwz6XiBN87KXY1Mg7TbjNZNsjGtd6Kouct5EwGYV5R296W5VhxvLQBzqTivIww==
+"@abp/cms-kit.public@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-9.2.0-rc.2.tgz#f2ba7951a33e52224d28a78921ef882a506d5611"
+ integrity sha512-R5se5hJrmbQx8zbgx9dDGnH0e1CatPLSLb7miVt7rdfyT6jD0bWLBKwtSSRws3jBhNWu8neKVokJubPRoWuz1A==
dependencies:
- "@abp/highlight.js" "~9.2.0-rc.1"
- "@abp/star-rating-svg" "~9.2.0-rc.1"
+ "@abp/highlight.js" "~9.2.0-rc.2"
+ "@abp/star-rating-svg" "~9.2.0-rc.2"
-"@abp/cms-kit@9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-9.2.0-rc.1.tgz#63097f42539d6bcdc36ebab9bebea7bfc195f922"
- integrity sha512-vfWy0Lrc9hRFZ87jtMUIi/soOuc00v5mwJgUVX6dDuIWr+dQ+MvffQ2WfCvM512q2XoQsdlRs7PTL6GIzaDfqg==
+"@abp/cms-kit@9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-9.2.0-rc.2.tgz#73acef605cc400e33378b7ae56808a26eb5ac1b9"
+ integrity sha512-0TLLsLfDuLznpyWjEGUxHmtvW88eVmKahsqcym1RhotUYr6p8qxZikh2prvqqL9UuXEuY4RDhM7i9fyw3PhS/A==
dependencies:
- "@abp/cms-kit.admin" "~9.2.0-rc.1"
- "@abp/cms-kit.public" "~9.2.0-rc.1"
+ "@abp/cms-kit.admin" "~9.2.0-rc.2"
+ "@abp/cms-kit.public" "~9.2.0-rc.2"
-"@abp/codemirror@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-9.2.0-rc.1.tgz#387c935361f8d434b9b9829c3b1e905e0461976f"
- integrity sha512-KtLXu6LBo1v3pHqfm5i0+5DHddg9Wuc8iAeAu0TDyV9/D8nwVDYmVotOcVY8pLV1AWxJ1+X7fse7NH9QDlPUvg==
+"@abp/codemirror@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-9.2.0-rc.2.tgz#185bf41b3aa9dc11a344e7d360f7d5accc045c5e"
+ integrity sha512-jaLvLRTUfIC6c93ND0rfVZJTuE1CrsSP30wZIXoEt9TgmNmEfnirJiDBDNupAg7mIwBvVjoEVr3k+KspPQOmZA==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
codemirror "^5.65.1"
-"@abp/core@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.1.tgz#30fb627e750f651b4d1819461e3ffeb5fc6d9011"
- integrity sha512-Adb4sk9oZJaxL19RbM1opLGWn2kKzRUcFLH6lNG2QYCAXf74y/YfFLQyoZSrTKS1M+hkGjIrEW6GssAgHTCJeg==
+"@abp/core@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.2.0-rc.2.tgz#0eab20842f8c0801d1dca036d3d66a67e155e019"
+ integrity sha512-8bC1MAV4iSFLJvRvM5mvrI9+N5FPAjaG79hr3p0xJtNixFOFpNELDf4p0zwy97zY8juL+AIEyJAkg+KIIK90DQ==
dependencies:
- "@abp/utils" "~9.2.0-rc.1"
+ "@abp/utils" "~9.2.0-rc.2"
-"@abp/datatables.net-bs5@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.1.tgz#7d56850b6e46f744c794e40d08aeb5fd1a7543ee"
- integrity sha512-PFt0PruHikzXzcEKtykwnRo+Z0D+njmhaoJk4J11yoZjvSFOAQXIRdsVgFgJub8REN3I57eG9PPCl3AZwAba9w==
+"@abp/datatables.net-bs5@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.2.0-rc.2.tgz#8c07544cafd2d2257f45150d3265c25eafc0ec0f"
+ integrity sha512-l3VOtc0fleUsx+ZUMr49+nPBWRBUVw4Z26ogT7O7uRR8doeerNU1GfA4yFJCUp02WIwt8cmZ+apJHADykn9Vng==
dependencies:
- "@abp/datatables.net" "~9.2.0-rc.1"
+ "@abp/datatables.net" "~9.2.0-rc.2"
datatables.net-bs5 "^2.1.8"
-"@abp/datatables.net@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.1.tgz#8d165f404e85a54a4e92887173a3d01f827ba5ef"
- integrity sha512-rEvCSJWH2l505Nb7Nqa0tL1iFpnMZ+WxnfbomaqdSpL6YsCUd8syeGI37V+LQUknXGsUFqGVyazPrU3vjIR8Kg==
+"@abp/datatables.net@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.2.0-rc.2.tgz#2880ccb61750faa1689aec15f9e49d92ab1e94a1"
+ integrity sha512-nljq0p8mxoBvMZngtViInyQJqX/MI7EyQeCIYNICF2LO42RRZfpKaRy5zX+4Uc3z/wz209CfK8QfRNH/d1HtBQ==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
datatables.net "^2.1.8"
-"@abp/font-awesome@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.1.tgz#758b4028fa5f6d11bb675ff465fc222e3b656c01"
- integrity sha512-H0fmIM/YAkT64LLMub0eDzpxvrNVjkFrRgX4YM10U/AQ0gILxjuEapRxv3+ueIJiy3DiBLkPWQ+SQN3Lwh4FOA==
+"@abp/font-awesome@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.2.0-rc.2.tgz#51eb750f5697668db538ad68cc6b9279517da537"
+ integrity sha512-X9JfF4n4MDZLszwZHIHuxSdGGxImEzV91ROKqNeclErCx3bOXyq/l9C+haZl/3TLzTAOSDMLgHGrT3MUCVPF5w==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@fortawesome/fontawesome-free" "^6.6.0"
-"@abp/highlight.js@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.2.0-rc.1.tgz#2eabf8c5aa61a7dfa1462d87853cc37774e6b021"
- integrity sha512-xmyUIB/ZNpObnZf2JeJaOgSSnowxqlkk8OUoVzjthmsVszWGJU3l8TABjWpReJclywFlrsXGZPqvg/LIuDN8tA==
+"@abp/highlight.js@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.2.0-rc.2.tgz#9865cae50e39cca9ddd0c0390da794778ed36779"
+ integrity sha512-43NEl2omc8HWJjprEJpcMtb88QCD9bTCXrW7e2CO8ReyFuEoQh+79c0q2E5xJ5aitZpFhq4j4OOxxzUvAKORKw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
"@highlightjs/cdn-assets" "~11.10.0"
-"@abp/jquery-form@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.1.tgz#558bcf9da8912e0014b407018d1f0fb7ab294bf0"
- integrity sha512-MzhptVbyZ7WNYAw4KmWiI4WnR8H16jBshceO7DFtfyZDRUU0n4ZPTYs1rGlj4+5iv2B7r8dci0Nx94bkId7FwA==
+"@abp/jquery-form@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.2.0-rc.2.tgz#58ce31a32bdfb355e5d4e3f97cb4761f594aa8e1"
+ integrity sha512-xN2xjK1RWKygwaqzTaWmpMlU0kGWGa2nKaudM6g9k/B6b1Pfdr8ykI4DaSuPb4BkRmurGkgy4r9o7IUoqv0T8Q==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.1.tgz#48b227ee95e0d7a12efbdfbdf1a28e3003dcdb8f"
- integrity sha512-wTo5/oqU1TVOuuYfsu6XipryW2rrSx+bebP4fm/lQ1cZF+Ki1Rbvt5p+3fIGZfg8dJRMKXCtL3UYyadKTlqJ8A==
+"@abp/jquery-validation-unobtrusive@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.2.0-rc.2.tgz#4e624e22cbf149d1c78da46aabaf6fc18d3b65ff"
+ integrity sha512-adKJxnWnhCrIYWoVdo41zgO5p4SjyypCxoHeQ7mkohry2WN6WuQG5nmHqhpdevw966DENvmVzFfz7vnO72vtrg==
dependencies:
- "@abp/jquery-validation" "~9.2.0-rc.1"
+ "@abp/jquery-validation" "~9.2.0-rc.2"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.1.tgz#fae0ce1e0db0af62f80836d3e982c9a79f7b1209"
- integrity sha512-c2+BwErN2w6ikbOYuuSQHZeMdLaKR7l0CIvwtUnzwCHjdUGAbMX9w9lYwnO6R6DsNCV7Cb5+YrbjM7jGY7zMiQ==
+"@abp/jquery-validation@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.2.0-rc.2.tgz#b6a8124d5056ddad515733bffc78703f6bd422be"
+ integrity sha512-4j1fg1qImif2vFZQFJ7z1olEUnjc3BByKS+7joNQ+96/NqOQdOQjRjB2n490od7ExCinKnvYx3JFttpYjHU3Xw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jquery-validation "^1.21.0"
-"@abp/jquery@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.1.tgz#a930c1ef6a17a831cd7d064b7cbb20d604fbc4bb"
- integrity sha512-qc461cJOQvEX95JbIFtDLj5dxUUDyP7PUXP8SjCvxP4GURoKhjxx0j0U0mBkMDJMrSrvALFKbF5S6OlgdgaPGQ==
+"@abp/jquery@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.2.0-rc.2.tgz#335643787ab282d5d2fee4f360c2b62cce3db962"
+ integrity sha512-baKNDuiQMzkV0LFzBwEqS0JYtXIUe5KH+MVizGR6Zv10B8l/gIrUzWI/nnqDtbts6gmY9OBDXkCTcgMQBwKqjw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
jquery "~3.7.1"
-"@abp/jstree@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-9.2.0-rc.1.tgz#b2778864d8472d531c9acca4e300c1c788fcd712"
- integrity sha512-8xuyLu1cxR6+9vQ83etxFCi3FUq17bCgE9Mjt4RXOpXAdEg2GV/pyL3skJfzfIF1sPVxmaxOrE5kaURCW0psLQ==
+"@abp/jstree@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-9.2.0-rc.2.tgz#65c9a263d51f93ec7a1935a8761b51ca9526b7c4"
+ integrity sha512-fhpiykHROkYx+CPVCnndXzrRkEuLwa2QlFCvBVn1A6FG/f+Z3luRqVJ7eF/hPVyMoAvsG/byRkpBEAg4B+8XNg==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
jstree "^3.3.17"
-"@abp/lodash@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.1.tgz#0e0b455c84c6b6c52a3aaf1ccc4c704f49503ac8"
- integrity sha512-Bg2Bz7G04jvz+QRXLlK3A2eUBR3Ef1rq622jWsaKo4fW4rCdHkZBbjeqYDLYc1PqDIJawhEdIByh8VzMgRd6tA==
+"@abp/lodash@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.2.0-rc.2.tgz#521bccafcc09780c751932688b6ec45c368c2854"
+ integrity sha512-T6eYsDovUl4AYD9n2N4WZq9MeC4/ryke5ctvdhzuArqM7WpPvohq3VKGugrP/MLo9oD3MZ5DVQvMJ0AVg+IXNQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
lodash "^4.17.21"
-"@abp/luxon@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.1.tgz#275726bf1f9ff14cdf902a7ea64213a3e7434927"
- integrity sha512-vga0taYVDPGwcAQqFe6pAEAUu3vRH7MgxBQdMrEX80YhsSJevPHSl6jG3ey5IqWOy4dpMyiN4v7gWBHJ93mbFg==
+"@abp/luxon@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.2.0-rc.2.tgz#da366d335f9575b104ea2206e076af35cbbfcfba"
+ integrity sha512-mr8ipYrJDDJPoImIwORK7Z6d1C07APl95L17ufRbig4sjdxjNEDR5uUXVviVafF1No2bVkYiS0xGKQmojA2twg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
luxon "^3.5.0"
-"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.1.tgz#3d4c17a9d6ace815e4bc4dc825d0020474a794f7"
- integrity sha512-Cqs6A88bWggdtDoiCREBTXknCI+c7vhmZ/SM84k4NfwzlPscZYMCbtJlrln4g3zmElJwwBPerl0Gs778kUOjog==
+"@abp/malihu-custom-scrollbar-plugin@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.2.0-rc.2.tgz#cb79018adf08276041eb5c5dcf75130c8995686b"
+ integrity sha512-jdHXx7kPduaEfFXDvf5s+QVl10RqshNbnZkkqPx0mMkhz2H/qxwzF1e0mcLFL38nEgs+0gxIkcA8/MKq85tyqQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/markdown-it@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-9.2.0-rc.1.tgz#f3a34b9efbb957c802cbb0ddccce1cc16231fe01"
- integrity sha512-o0S+irI1tQsODFh4cU6qtCmtTnjLOoeDdi/gzEke4nKhpVOIcvgiOawcsl/CoX1Gg7U1akque2WRL+bA3TIRnw==
+"@abp/markdown-it@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-9.2.0-rc.2.tgz#a91f28718e8b2fde0494c24e9af5f1acfcfd1fca"
+ integrity sha512-PsiOjpXYf8WGXVZUOQWES+GHHg7lEmVN6P9GHXiezDppeAks11mJSGbYIz6LcPr9YObZyfQY3kBTeBGBZQapQw==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
markdown-it "^14.1.0"
-"@abp/moment@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.1.tgz#1604d38429f1e0484223ea4a7a3a10f1785420f4"
- integrity sha512-5VnPhCOnTug7tqlLsg46LY84LU5DrYNKxm5T3oz+OFq4I05Ut/LWGElRvOnEFxfFfkYuJvbxih3trAGuEJD6+A==
+"@abp/moment@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.2.0-rc.2.tgz#f4339138668ca72be1d700624b91789344557bff"
+ integrity sha512-J4ZaCDEcXLGmJ+8zqgaMK9Lutnjga28LSbuiFaGLlZ1QgYZ5HDScE128o3vX9qr60tc6IIY0cDkHi4bBHo7ozw==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.2.0-rc.1.tgz#623659c50c776bc8efcb7eacea70b2704ff87eec"
- integrity sha512-QZ6NY4TXmWzrrZViN8v3CgH2l4fQUpEZLPsUaEmiRtq3+3meCaM3hxgNEOvcUg5IHZI7cPBRabQtVKoAPozcvQ==
+"@abp/prismjs@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.2.0-rc.2.tgz#1ee12acdd9e1dcc9ae2ce4a9f21f159c3f9e3dec"
+ integrity sha512-GuKz6bujBlYHAgLhW1RT7aEOwKyZ+vnyMIhN0/fQ34+nbqg0PC4htwJcN6spgN8gZKD06lCqBH+GjLE2WtE/Rw==
dependencies:
- "@abp/clipboard" "~9.2.0-rc.1"
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/clipboard" "~9.2.0-rc.2"
+ "@abp/core" "~9.2.0-rc.2"
prismjs "^1.29.0"
-"@abp/select2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.1.tgz#6f378c9bd4a01dbe72bf41f175c964e36353ef4e"
- integrity sha512-HlQtSmY3VRIbCbTJnWFmvPeUmHYX8cI5z0Dwa30/TNPWDQuws5Yx3F4B9crw6AC/EIzCobsAZ4QhsgQxsUHNvg==
+"@abp/select2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.2.0-rc.2.tgz#ba6e839644b7ecdd198fe5286101302a3dc79ce3"
+ integrity sha512-AQMXb5ATgbN7grpKU8lB2xFFfirCe45lIvd9krW5SwUHCYZP7pRPbwQXAew+BqlIIYJJF2GA7/Nf//e/71bKtg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
select2 "^4.0.13"
-"@abp/slugify@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-9.2.0-rc.1.tgz#ed7e6d96a698b83fc11d49c4a4ed0ab892a00167"
- integrity sha512-RmMpbQYR5h0Lnf2bXCxEsGKcRzQJYFfa5SRsY++KTi8geHI2oh/zckm7Rw10zVxbyMufn71Z4kyGYOtuUAZLFQ==
+"@abp/slugify@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-9.2.0-rc.2.tgz#659a16bdf9d27d712442c6989d0fa764e6ab5d49"
+ integrity sha512-8YT9Dn1WDPDVPQsy+kg0rbMP2zIW94zBzs3U8xj4JWRARTz/8qP3YciXh/p7/ncJJwvyz3OvL2QHhj9xWlTHVA==
dependencies:
slugify "^1.6.6"
-"@abp/star-rating-svg@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-9.2.0-rc.1.tgz#1554b029341638247d73a1da48604498eb87344b"
- integrity sha512-DNo1QyvB7yNF7eCGq0JTWLMRj2gvMT3I/c162ZJ2ZuOe4WBt6P5eS61DGXW9Sde3+JlUSh5mvYYDMJuR/WbARA==
+"@abp/star-rating-svg@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-9.2.0-rc.2.tgz#ae79e454c07910df4f345dbeea9da6ebc774b1f1"
+ integrity sha512-1psK0ZvbNvSLMxNKInJgg7fEgn4/wg8xr5Mytup+xHZQ9d1GprjIoMENRlmiu6BgfEr+du/QjuyAP1B8Y4fZmw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
star-rating-svg "^3.5.0"
-"@abp/sweetalert2@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.1.tgz#b70784ff038ff4d6cdc07a7ef35edd7da5dfaa23"
- integrity sha512-cJVdPB1hh7AtmfmcLLAFGxFDYc08sjtRS5kJ37ru9WFVOyzF1A99QgMOEBSB6BGKNbkCJwQbkwGCHjtQTHQ46w==
+"@abp/sweetalert2@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.2.0-rc.2.tgz#075634dc3ec996607757694d636d276ba2350e06"
+ integrity sha512-ZgHgqM8Q+V9ECQyAyepM5KpshKpQP463xRHwgY45oR7/CfCcO/vS56YQgJNg2zE6+lRQZaRQ9OL7lph8975vVg==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
sweetalert2 "^11.14.1"
-"@abp/timeago@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.1.tgz#689fa9c9d4b0c0a239b37cd4d045dfb745f392df"
- integrity sha512-mNmmRVzGryW45woLmDrxVnUCSi2+Xp2djHNKe7VF4D2Xywos9yxEImTX8B9lB0QMWl8BawsZCz/jsC3QURkXGw==
+"@abp/timeago@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.2.0-rc.2.tgz#25324732966438bd6f505bdd932511ba2cc8c22b"
+ integrity sha512-WfWxxiycg77vVN2hPHqUOu552la+zxr0EZnHMqnEnnBe+gFYe9C0CpdYuyBq2eQXRXHoVzsB+4YRVNk5sbSGng==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
timeago "^1.6.7"
-"@abp/tui-editor@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.2.0-rc.1.tgz#fdb0e13891da88a0da89dc2ee22f748b7bda7420"
- integrity sha512-FVpaOF1yoox2X9ejbDQVRVDrm+5dElY5X7fxKPUthw7PUpCT+HCScVX4xtqkbF3GB3VYRdwQO2m1GdqIRC0Zlw==
+"@abp/tui-editor@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.2.0-rc.2.tgz#8f755bfb7413d1636fe904d409efe6363f48516b"
+ integrity sha512-Ap2JOZShRvbHI4+5f1pGRgP26i6bel+2eBT1w33UWMclyNGhNYVcm9VNIyLaS9KbGM5bphij2bMdnTUpjQ10Dw==
dependencies:
- "@abp/jquery" "~9.2.0-rc.1"
- "@abp/prismjs" "~9.2.0-rc.1"
+ "@abp/jquery" "~9.2.0-rc.2"
+ "@abp/prismjs" "~9.2.0-rc.2"
-"@abp/uppy@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-9.2.0-rc.1.tgz#4f05e7f1db4fac6662c315fe7b51634564e12488"
- integrity sha512-XlG4qc4QrUjlL+o41expGJU4ESs5S4BMYRMYBP/6YhJrDC15tG0+bQp8OP8qNWP8PPTu9tQ4/U+C5qvckvyjng==
+"@abp/uppy@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-9.2.0-rc.2.tgz#27672c7947410b0c0b57225cbf7c436268dcd05b"
+ integrity sha512-CfsHC54V0iDNr3urc5TctW8ZBuy2xCaTyqvA+7WmdSeGfEkB+aDaWekQF+xGKqZvsx/mWgz69AZHLHF4sRi4yQ==
dependencies:
- "@abp/core" "~9.2.0-rc.1"
+ "@abp/core" "~9.2.0-rc.2"
uppy "^4.4.1"
-"@abp/utils@~9.2.0-rc.1":
- version "9.2.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.1.tgz#508d9922c842f2a76fc748574f0ae3a9954b6895"
- integrity sha512-XFaBI4qxeXixAtapXRzETkS60+5XkZeEnW9O3wyHU6r4rEtIdOHo9w7t/vM5b5KAUlcEE02jS6pcqlJHd7miqw==
+"@abp/utils@~9.2.0-rc.2":
+ version "9.2.0-rc.2"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.2.0-rc.2.tgz#669885ad1e3ac7b8e182d7c392ea1b633df65aac"
+ integrity sha512-rfQxhJy04Qf50P3ciasKbDlJ+9JidD60xW77TjcoUJvljJE+A8iwTX8Wwqz7+YcC7rks2ILM4y3Ay7/47NOICQ==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/Approve/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/Approve/Index.cshtml
index d15396f33d..788ae3f682 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/Approve/Index.cshtml
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Comments/Approve/Index.cshtml
@@ -35,7 +35,7 @@
-