diff --git a/Directory.Packages.props b/Directory.Packages.props index b93d9f0733..56910650b7 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -117,10 +117,10 @@ - - - - + + + + @@ -132,11 +132,11 @@ - - - - - + + + + + diff --git a/docs/en/Community-Articles/2025-09-02-training-campaign/post.md b/docs/en/Community-Articles/2025-09-02-training-campaign/post.md new file mode 100644 index 0000000000..20f2bcf4bd --- /dev/null +++ b/docs/en/Community-Articles/2025-09-02-training-campaign/post.md @@ -0,0 +1,29 @@ +# IMPROVE YOUR ABP SKILLS WITH 33% OFF LIVE TRAININGS! + +We have exciting news to share\! As you know, we offer live training packages to help you improve your skills and knowledge of ABP. From September 8th to 19th, we are giving you 33% OFF our live trainings, so you can learn more about the product at a discounted price\! + +#### Why Join ABP.IO Training? + +ABP training programs are designed to help developers, architects, and teams master the ABP Framework efficiently. Whether you're new to the framework or looking to deepen your knowledge, our courses cover everything you need to build robust and scalable applications with ABP. + +#### What You’ll Gain: + +✔ Comprehensive live training from ABP Experts +✔ Hands-on learning with real-world applications +✔ Best practices for building modern web applications +✔ Certification to showcase your expertise + +#### [Limited-Time 33% Discount – Don’t Miss Out\!](https://abp.io/trainings?utm_source=referral&utm_medium=website&utm_campaign=training_abpblogpost) + +For a short period, all training packages are available at a 33% discount. This is a great opportunity to upskill yourself or train your team at a significantly reduced cost. + +#### How to Get the Discount? + +Simply visit our training page, select your preferred package, add your note if needed and send your training request, that's all\! ABP Training Team will reply to your request via email soon. + +#### Take Advantage of This Offer Today + +Invest in your skills and advance your career with ABP.IO training. This offer won’t last long, so grab your spot now\! + +### 🔗[Pick your package and send your training request now!](https://abp.io/trainings?utm_source=referral&utm_medium=website&utm_campaign=training_abpblogpost) + diff --git a/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/1.png b/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/1.png new file mode 100644 index 0000000000..9168907741 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/1.png differ diff --git a/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/2.png b/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/2.png new file mode 100644 index 0000000000..ff84b51766 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/2.png differ diff --git a/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/POST.md b/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/POST.md new file mode 100644 index 0000000000..076e623ad8 --- /dev/null +++ b/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/POST.md @@ -0,0 +1,335 @@ +# Keep Track of Your Users in an ASP.NET Core Application + +Tracking what users do in your app matters for security, debugging, and business insights. Doing it by hand usually means lots of boilerplate: managing request context, logging operations, tracking entity changes, and more. It adds complexity and makes mistakes more likely. + +## Why Applications Need Audit Logs + +Audit logs are time-ordered records that show what happened in your app. + +A good audit log should capture details for every web request, including: + +### 1. Request and Response Details +- Basic info like **URL, HTTP method, browser**, and **HTTP status code** +- Network info like **client IP address** and **user agent** +- **Request parameters** and **response content** when needed + +### 2. Operations Performed +- **Controller actions** and **application service method calls** with parameters +- **Execution time** and **duration** for performance tracking +- **Call chains** and **dependencies** where helpful + +### 3. Entity Changes +- **Entity changes** that happen during requests +- **Property-level changes**, with old and new values +- **Change types** (create, update, delete) and timestamps + +### 4. Exception Information +- **Errors and exceptions** during request execution +- **Exception stack traces** and **error context** +- Clear records of failed operations + +### 5. Request Duration +- Key metrics for **measuring performance** +- **Finding bottlenecks** and optimization opportunities +- Useful data for **monitoring system health** + +## The Challenge with Doing It by Hand + +In ASP.NET Core, developers often use middleware or MVC filters for tracking. Here’s what that looks like and the common problems you’ll hit. + +### Using Middleware + +Middleware are components in the ASP.NET Core pipeline that run during request processing. + +Manual tracking typically requires: +- Writing custom middleware to intercept HTTP requests +- Extracting user info (user ID, username, IP address, and so on) +- Recording request start time and execution duration +- Handling both success and failure cases +- Saving audit data to logs or a database + +### Tracking Inside Business Methods + +In your business code, you also need to: +- Log the start and end of important operations +- Capture errors and related context +- Link business operations to the request-level audit data +- Make sure you track all critical actions + +### Problems with Manual Tracking + +Manual tracking has some big downsides: + +**Code duplication and maintenance pain**: Each controller ends up repeating similar tracking logic. Changing the rules means touching many places, and it’s easy to miss some. + +**Consistency and reliability issues**: Different people implement tracking differently. Exception paths are easy to forget. It’s hard to ensure complete coverage. + +**Performance and scalability concerns**: Homegrown tracking can slow the app if not designed well. Tuning and extending it takes effort. + +**Entity change tracking is especially hard**. It often requires: +- Recording original values before updates +- Comparing old and new values for each property +- Handling complex types, collections, and navigation properties +- Designing and saving change records +- Capturing data even when exceptions happen + +This usually leads to: +- **A lot of code** in every update method +- **Easy-to-miss edge cases** and subtle bugs +- **High maintenance** when entity models change +- **Extra queries and comparisons** that can hurt performance +- **Incomplete coverage** for complex scenarios + +## ABP Framework’s Built-in Solution + +ABP Framework includes a built-in audit logging system. It solves the problems above and adds useful features on top. + +### Simple Setup vs. Manual Tracking + +Instead of writing lots of code, you configure it once: + +```csharp +// Configure audit log options in the module's ConfigureServices method +Configure(options => +{ + options.IsEnabled = true; // Enable audit log system (default value) + options.IsEnabledForAnonymousUsers = true; // Track anonymous users (default value) + options.IsEnabledForGetRequests = false; // Skip GET requests (default value) + options.AlwaysLogOnException = true; // Always log on errors (default value) + options.HideErrors = true; // Hide audit log errors (default value) + options.EntityHistorySelectors.AddAllEntities(); // Track all entity changes +}); +``` + +```csharp +// Add middleware in the module's OnApplicationInitialization method +public override void OnApplicationInitialization(ApplicationInitializationContext context) +{ + var app = context.GetApplicationBuilder(); + + // Add audit log middleware - one line of code solves all problems! + app.UseAuditing(); +} +``` + +By contrast, manual tracking needs middleware, controller logic, exception handling, and often hundreds of lines. With ABP, a couple of lines enable it and it just works. + +## What You Get with ABP + +Here’s how ABP removes tracking code from your application and still captures what you need. + +### 1. Application Services: No Tracking Code + +Manual approach: You’d log inside each method and still risk missing cases. + +ABP approach: Tracking is automatic—no tracking code in your methods. + +```csharp +public class BookAppService : ApplicationService +{ + private readonly IRepository _bookRepository; + private readonly IRepository _authorRepository; + + [Authorize(BookPermissions.Create)] + public virtual async Task CreateAsync(CreateBookDto input) + { + // No need to write any tracking code! + // ABP automatically tracks: + // - Method calls and parameters + // - Calling user + // - Execution duration + // - Any exceptions thrown + + var author = await _authorRepository.GetAsync(input.AuthorId); + var book = new Book(input.Title, author, input.Price); + + await _bookRepository.InsertAsync(book); + + return ObjectMapper.Map(book); + } + + [Authorize(BookPermissions.Update)] + public virtual async Task UpdateAsync(Guid id, UpdateBookDto input) + { + var book = await _bookRepository.GetAsync(id); + + // No need to write any entity change tracking code! + // ABP automatically tracks entity changes: + // - Which properties changed + // - Old and new values + // - When the change happened + + book.ChangeTitle(input.Title); + book.ChangePrice(input.Price); + + await _bookRepository.UpdateAsync(book); + + return ObjectMapper.Map(book); + } +} +``` + +With manual code, each method might need 20–30 lines for tracking. With ABP, it’s zero—and you still get richer data. + +For entity changes, ABP also saves you from writing comparison code. It handles: +- Property change detection +- Recording old and new values +- Complex types and collections +- Navigation property changes +- All with no extra code to maintain + +### 2. Entity Change Tracking: One Line to Turn It On + +Manual approach: You’d compare properties, serialize complex types, track collection changes, and write to storage. + +ABP approach: Mark the entity or select entities globally. + +```csharp +// Enable audit log for specific entity - one line of code solves all problems! +[Audited] +public class MyEntity : Entity +{ + public string Name { get; set; } + public string Description { get; set; } + + [DisableAuditing] // Exclude sensitive data - security control + public string InternalNotes { get; set; } +} +``` + +```csharp +// Or global configuration - batch processing +Configure(options => +{ + // Track all entities - one line of code tracks all entity changes + options.EntityHistorySelectors.AddAllEntities(); + + // Or use custom selector - precise control + options.EntityHistorySelectors.Add( + new NamedTypeSelector( + "MySelectorName", + type => typeof(IEntity).IsAssignableFrom(type) + ) + ); +}); +``` + +### 3. Extension Features + +Manual approach: Adding custom tracking usually spreads across many places and is hard to test. + +ABP approach: Use a contributor for clean, centralized extensions. + +```csharp +public class MyAuditLogContributor : AuditLogContributor +{ + public override void PreContribute(AuditLogContributionContext context) + { + var currentUser = context.ServiceProvider.GetRequiredService(); + + // Easily add custom properties - manual implementation needs lots of work + context.AuditInfo.SetProperty( + "MyCustomClaimValue", + currentUser.FindClaimValue("MyCustomClaim") + ); + } + + public override void PostContribute(AuditLogContributionContext context) + { + // Add custom comments - business logic integration + context.AuditInfo.Comments.Add("Some comment..."); + } +} + +// Register contributor - one line of code enables extension features +Configure(options => +{ + options.Contributors.Add(new MyAuditLogContributor()); +}); +``` + +### 4. Precise Control + +Manual approach: You end up with complex conditional logic. + +ABP approach: Use attributes for simple, precise control. + +```csharp +// Disable audit log for specific controller - precise control +[DisableAuditing] +public class HomeController : AbpController +{ + // Health check endpoints won't be audited - avoid meaningless logs +} + +// Disable for specific action - method-level control +public class HomeController : AbpController +{ + [DisableAuditing] + public async Task Home() + { + // This action won't be audited - public data access + } + + public async Task OtherActionLogged() + { + // This action will be audited - important business operation + } +} +``` + +### 5. Visual Management of Audit Logs + +ABP also provides a UI to browse and inspect audit logs: + +![](1.png) + +![](2.png) + +## Manual vs. ABP: A Quick Comparison + +The benefits of ABP’s audit log system compared to doing it by hand: + +| Aspect | Manual Implementation | ABP Audit Logs | +|--------|----------------------|----------------| +| **Setup Complexity** | High — Write middleware, services, repository code | Low — A few lines of config, works out of the box | +| **Code Maintenance** | High — Tracking code spread across the app | Low — Centralized, convention-based | +| **Consistency** | Variable — Depends on discipline | Consistent — Automated and standardized | +| **Performance** | Risky without careful tuning | Built-in optimizations and scope control | +| **Functionality Completeness** | Basic tracking only | Comprehensive by default | +| **Error Handling** | Easy to miss edge cases | Automatic and reliable | +| **Data Integrity** | Manual effort required | Handled by the framework | +| **Extensibility** | Custom work is costly | Rich extension points | +| **Development Efficiency** | Weeks to build | Minutes to enable | +| **Learning Cost** | Understand many details | Convention-based, low effort | + +## Why ABP Audit Logs Matter + +ABP’s audit logging removes the boilerplate from user tracking in ASP.NET Core apps. + +### Core Idea + +Manual tracking is error-prone and hard to maintain. ABP gives you a convention-based, automated system that works with minimal setup. + +### Key Benefits + +ABP runs by convention, so you don’t need repetitive code. You can control behavior at the request, entity, and method levels. It automatically captures request details, operations, entity changes, and exceptions, and you can extend it with contributors when needed. + +### Results in Practice + +| Metric | Manual Implementation | ABP Implementation | Improvement | +|--------|----------------------|-------------------|-------------| +| Development Time | Weeks | Minutes | **99%+** | +| Lines of Code | Hundreds of lines | 2 lines of config | **99%+** | +| Maintenance Cost | High | Low | **Significant** | +| Functionality Completeness | Basic | Comprehensive | **Significant** | +| Error Rate | Higher risk | Lower risk | **Improved** | + +### Recommendation + +If you need audit logs, start with ABP’s built-in system. It reduces effort, improves consistency, and stays flexible as your app grows. You can focus on your business logic and let the framework handle the infrastructure. + +## References + +- [ABP Audit Logging](https://abp.io/docs/latest/framework/infrastructure/audit-logging) +- [ABP Audit Logging UI](https://abp.io/modules/Volo.AuditLogging.Ui) diff --git a/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/cover.png b/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/cover.png new file mode 100644 index 0000000000..7030e285b2 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-03-Keep-Track-of-Your-Users-in-an-ASP.NET-Core-Application/cover.png differ diff --git a/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/Post.md b/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/Post.md new file mode 100644 index 0000000000..3de235e86d --- /dev/null +++ b/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/Post.md @@ -0,0 +1,173 @@ +# .NET 10: What You Need to Know (LTS Release, Coming November 2025) + +The next version of .NET is .NET 10 and it is coming with **Long-Term Support (LTS)**, scheduled for **November 2025**. + +On **September 9, 2025**, Microsoft released **.NET 10 Release Candidate 1 (RC1)**, which supports go-live usage and is compatible with [Visual Studio 2026 Insider](https://visualstudio.microsoft.com/insiders/) and [Visual Studio Code Insider](https://code.visualstudio.com/insiders/) via the [C# Dev Kit](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit) extension. + +------ + +## .NET 10 Runtime Enhancements + +- **JIT Speed-ups**: Enhanced struct argument handling—members now go directly into registers, reducing memory load/store operations. +- **Advanced Loop Optimization**: New graph-based loop inversion improves precision and boosts further optimizations. +- **Array Interface De-virtualization**: Critical for performance, now array-based enumerations inline and skip virtual calls including de-abstraction of array enumeration and small-array stack allocation. +- **General JIT Improvements**: Better code layout and branch reduction support overall efficiency. + +------ + +## Language & Library Upgrades + +### C# 14 Enhancements + +- Field-backed properties: easier custom getters/setters. +- `nameof` for unbound generics like `List<>`. +- Implicit conversions for `Span` and `ReadOnlySpan`. +- Lambda parameter modifiers (`ref`, `in`, `out`). +- Partial constructors/events. +- `extension` blocks for static extension members. +- Null-conditional assignment (`?.=`) and custom compound/increment operators. + +### F# & Visual Basic Enhancements + +- F# improvements via `preview`, updated `FSharp.Core`, and compiler fixes. +- VB compiler supports `unmanaged` generics and respects `OverloadResolutionPriorityAttribute` for performance and overload clarity. + +## .NET Libraries & SDK + +### Libraries: + +- Better ZipArchive performance (lazy entry loading). +- JSON improvements, including `JsonSourceGenerationOptions` and reference-handling tweaks. +- Enhanced `OrderedDictionary`, ISOWeek date APIs, PEM data and certificate handling, `CompareOptions.NumericOrdering` + +### SDK & CLI: + +- No major new SDK features in RC1—you should expect stability fixes rather than additions. +- Earlier previews brought JSON support improvements (e.g., `PipeReader` for JSON, WebSocketStream, ML-DSA crypto, AES KeyWrap), TLS 1.3 for macOS + +------ + +## ASP.NET Core & Blazor + +### Blazor & Web App Security: + +Enhanced OIDC and Microsoft Entra ID integration, including encrypted token caching and Key Vault use. + +### UI Enhancements: + +- `QuickGrid` gains `RowClass` for conditional styling. +- Scripts now served as static assets with compression and fingerprinting. +- NavigationManager no longer scrolls to top for same-page updates. + +### API Improvements: + +Full support for OpenAPI 3.1 (JSON Schema draft 2020-12), and metrics for authentication/authorization events (e.g., sign-ins, logins) . + +------ + +## .NET MAUI + +Updates include multiple file selection, image compression, WebView request interception, and support for Android API 35/36. + +## EF Core + +LINQ enhancements, performance boosts, better Azure Cosmos DB support, and more flexible named query filters. + + + +## Breaking Changes in .NET 10 + +### ASP.NET Core - Breaking Changes in .NET 10: + +.NET 10 Preview 7 brings **several deprecations + behavior changes**, while **RC1 removes the old WebHost model**. + +- **[Cookie login redirects disabled](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/cookie-authentication-api-endpoints)** → Redirects no longer occur for API endpoints; APIs now return `401`/`403`. *(Behavioral change)* +- **[WithOpenApi deprecated](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/withopenapi-deprecated)** → Extension method removed; use updated OpenAPI generator features. *(Source incompatible)* +- **[Exception diagnostics suppressed](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/exception-handler-diagnostics-suppressed)** → When `TryHandleAsync` returns true, exception details aren’t logged. *(Behavioral change)* +- **[IActionContextAccessor obsolete](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/iactioncontextaccessor-obsolete)** → Marked obsolete; may break code depending on it. *(Source/behavioral change)* +- **[IncludeOpenAPIAnalyzers deprecated](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/openapi-analyzers-deprecated)** → Property and MVC API analyzers removed. *(Source incompatible)* +- **[IPNetwork & KnownNetworks obsolete](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/ipnetwork-knownnetworks-obsolete)** → Old networking APIs removed in favor of new ones. *(Source incompatible)* +- **[ApiDescription.Client package deprecated](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/apidescription-client-deprecated)** → No longer maintained; migrate to other tools. *(Source incompatible)* +- **[Razor run-time compilation obsolete](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/razor-runtime-compilation-obsolete)** → Disabled at runtime; precompilation required. *(Source incompatible)* +- **[WebHostBuilder, IWebHost, WebHost obsolete](https://learn.microsoft.com/en-us/dotnet/core/compatibility/aspnet-core/10/webhostbuilder-deprecated)** → Legacy hosting model deprecated; use `WebApplicationBuilder`. *(Source incompatible, RC1)* + +### EF Core - Breaking Changes in .NET 10: + +You can find the complete list at [Microsoft EF Core 10 Breaking Changes page](https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-10.0/breaking-changes). Here's the brief summary: + +#### EF Core - SQL Server + +- **JSON column type by default (Azure SQL / compat level ≥170).** Primitive collections and owned types mapped to JSON now use SQL Server’s native `json` type instead of `nvarchar(max)`. A migration may alter existing columns. Mitigate by setting compat level <170 or explicitly forcing `nvarchar(max)`. +- **`ExecuteUpdateAsync` signature change.** Column setters now take a regular `Func<…>` (not an expression). Dynamic expression-tree code won’t compile; replace with imperative setters inside the lambda. + +#### Microsoft.Data.Sqlite + +- **`GetDateTimeOffset` (no offset) assumes UTC.** Previously assumed local time. You can temporarily revert via `AppContext.SetSwitch("Microsoft.Data.Sqlite.Pre10TimeZoneHandling", true)`. +- **Writing `DateTimeOffset` to REAL stores UTC.** Conversion now happens before writing; revertable with the same switch. +- **`GetDateTime` (with offset) returns UTC `DateTime` (`DateTimeKind.Utc`).** Was `Local` before. Same temporary switch if needed. + +#### Who’s most affected + +- Apps on **Azure SQL / SQL Server 2025** using JSON mapping. +- Codebases building **expression trees** for bulk updates. +- Apps using **SQLite** with date/time parsing or REAL timestamp storage. + +#### Quick mitigations + +- Set SQL Server compatibility <170 or force column type. +- Rewrite `ExecuteUpdateAsync` callers to use the new delegate form. +- For SQLite, update handling to UTC or use the temporary AppContext switch while transitioning. + +### Containers - Breaking Changes in .NET 10: + +Default .NET images now use [Ubuntu](https://learn.microsoft.com/en-us/dotnet/core/compatibility/containers/10.0/default-images-use-ubuntu). + +### Core Libraries - Breaking Changes in .NET 10: + +[ActivitySource](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/10.0/activity-sampling) behavior tweaks; [generic math](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/10.0/generic-math) shift behavior aligned; W3C trace context is [default](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/10.0/default-trace-context-propagator); [DriveInfo](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/10.0/driveinfo-driveformat-linux) reports Linux FS types; InlineArray size rules tightened; [System.Linq.AsyncEnumerable](https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/10.0/asyncenumerable) included in core libs... + +### Cryptography - Breaking Changes in .NET 10: + +[Stricter X500](https://learn.microsoft.com/en-us/dotnet/core/compatibility/cryptography/10.0/x500distinguishedname-validation) name validation; [OpenSSL](https://learn.microsoft.com/en-us/dotnet/core/compatibility/cryptography/10.0/openssl-macos-unsupported) primitives unsupported on macOS; [some key members](https://learn.microsoft.com/en-us/dotnet/core/compatibility/cryptography/10.0/mldsa-slhdsa-secretkey-to-privatekey) nullable/renamed; env var [rename to](https://learn.microsoft.com/en-us/dotnet/core/compatibility/cryptography/10.0/version-override) `DOTNET_OPENSSL_VERSION_OVERRIDE`. + +### Extensions - Breaking Changes in .NET 10: + +[Config preserves](https://learn.microsoft.com/en-us/dotnet/core/compatibility/extensions/10.0/configuration-null-values-preserved) nulls; [logging](https://learn.microsoft.com/en-us/dotnet/core/compatibility/extensions/10.0/console-json-logging-duplicate-messages)/[package](https://learn.microsoft.com/en-us/dotnet/core/compatibility/extensions/10.0/provideraliasattribute-moved-assembly)/trim annotations changes; some [trim-unsafe](https://learn.microsoft.com/en-us/dotnet/core/compatibility/extensions/10.0/dynamically-accessed-members-configuration) code annotations removed. + +### Globalization & Interop - Breaking Changes in .NET 10: + +[ICU](https://learn.microsoft.com/en-us/dotnet/core/compatibility/globalization/10.0/version-override) env var renamed; single-file apps stop probing executable dir for native libs; [DllImport](https://learn.microsoft.com/en-us/dotnet/core/compatibility/interop/10.0/search-assembly-directory) search path tightened. + +Networking: + +[HTTP/3 disabled ](https://learn.microsoft.com/en-us/dotnet/core/compatibility/networking/10.0/http3-disabled-with-publishtrimmed) by default when trimming; [default cert revocation](https://learn.microsoft.com/en-us/dotnet/core/compatibility/networking/10.0/ssl-certificate-revocation-check-default) check now Online; [browser clients](https://learn.microsoft.com/en-us/dotnet/core/compatibility/networking/10.0/default-http-streaming) stream responses by default; [URI length limits](https://learn.microsoft.com/en-us/dotnet/core/compatibility/networking/10.0/uri-length-limits-removed) removed. + +### SDK & MSBuild/NuGet - Breaking Changes in .NET 10: + +`dotnet --interactive` [defaults to true](https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/dotnet-cli-interactive); tool packages are [RID-specific](https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/dotnet-tool-pack-publish); [workload](https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/default-workload-config) sets default; `dotnet new sln` uses [SLNX](https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/dotnet-new-sln-slnx-default); restore audits transitives; [local tool](https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/dotnet-tool-install-local-manifest) install creates manifest by default; `project.json` [not supported](https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/dotnet-restore-project-json-unsupported); stricter NuGet [validation](https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/nuget-packageid-validation)/[errors](https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/10.0/http-warnings-to-errors). + +WinForms/WPF: + +Multiple [API obsoletions](https://learn.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/10.0/obsolete-apis)/parameter [renames](https://learn.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/10.0/insertadjacentelement-orientation); [rendering](https://learn.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/10.0/statusstrip-renderer)/behavior tweaks; stricter XAML rules (e.g., [disallow empty row](https://learn.microsoft.com/en-us/dotnet/core/compatibility/wpf/10.0/empty-grid-definitions)/column definitions or incorrect usage of [DynamicResource](https://learn.microsoft.com/en-us/dotnet/core/compatibility/wpf/10.0/dynamicresource-crash) will crash). + + + +------ + + + +## Support Policy for .NET 10 +As you can see from the picture below, **.NET 10 has long term support** therefore it will be maintained for 3 years **until November 2028**. + +[![.NET 10 Support Policy](image-2.png)](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core) + + + +## Download .NET10 + +Click 👉 https://dotnet.microsoft.com/en-us/download/dotnet/10.0 to download the latest release candidate (currently RC.1). + +[![Download .NET 10](image-1.png)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) + +Also to use the latest features, download/update your Visual Studio to the latest 👉 https://visualstudio.microsoft.com/downloads/ + diff --git a/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/cover.png b/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/cover.png new file mode 100644 index 0000000000..e85f53b9ec Binary files /dev/null and b/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/cover.png differ diff --git a/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/image-1.png b/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/image-1.png new file mode 100644 index 0000000000..970f3194bc Binary files /dev/null and b/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/image-1.png differ diff --git a/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/image-2.png b/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/image-2.png new file mode 100644 index 0000000000..6e5b57c588 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-10-NET10-What-You-Need-To-Know/image-2.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/BenchmarkDotnet.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/BenchmarkDotnet.png new file mode 100644 index 0000000000..ed81071118 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/BenchmarkDotnet.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Disruptor.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Disruptor.png new file mode 100644 index 0000000000..d66333865c Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Disruptor.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MemoryPack.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MemoryPack.png new file mode 100644 index 0000000000..cdb4f81e38 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MemoryPack.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MessagePack.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MessagePack.png new file mode 100644 index 0000000000..dc7d76dd2f Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/MessagePack.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Polly.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Polly.png new file mode 100644 index 0000000000..18a930df0e Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Polly.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Post.md b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Post.md new file mode 100644 index 0000000000..5a258da00a --- /dev/null +++ b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/Post.md @@ -0,0 +1,161 @@ +# High-Performance .NET Libraries You Didn’t Know You Needed + +Whether you’re building enterprise apps, microservices, or SaaS platforms, using the right libraries can help you ship faster and scale effortlessly. +Here are some **high-performance .NET libraries** you might not know but definitely should. + + + +## 1. BenchmarkDotNet – Measure before you optimize + +![BenchmarkDotnet](BenchmarkDotnet.png) + +BenchmarkDotNet makes it simple to **benchmark .NET code with precision**. + +- Easy setup with `[Benchmark]` attributes +- Generates detailed performance reports +- Works with .NET Core, .NET Framework, and Mono + +Perfect for spotting bottlenecks in APIs, background services, or CPU-bound operations. + +- **NuGet** (40M downloads) 🔗 https://www.nuget.org/packages/BenchmarkDotNet +- **GitHub** (11k stars) 🔗 https://github.com/dotnet/BenchmarkDotNet + +------ + +## 2. MessagePack – Fastest JSON serializer + +Need speed beyond System.Text.Json or Newtonsoft.Json ? MessagePack is the fastest serializer for C# (.NET, .NET Core, Unity, Xamarin). MessagePack has a compact binary size and a full set of general purpose expressive data types. Ideal for high-traffic APIs, IoT data processing, and microservices. + +![MessagePack Benchmark](MessagePack.png) + +- **NuGet** (204M downloads) 🔗 https://www.nuget.org/packages/messagepack +- **GitHub** (6.4K stars) 🔗 https://github.com/MessagePack-CSharp/MessagePack-CSharp + +------ + +## 3. Polly – Resilience at scale + +![Polly](Polly.png) + +In distributed systems, failures are inevitable. **Polly** provides a fluent way to add **retry, circuit-breaker, and fallback** strategies. + +- Handle transient faults gracefully +- Improve uptime and user experience +- Works seamlessly with HttpClient and gRPC + +A must-have for cloud-native .NET applications. + +- **NuGet** (1B downloads) 🔗 https://www.nuget.org/packages/polly/ +- **GitHub** (14K stars) 🔗 https://github.com/App-vNext/Polly + +------ + +## 4. MemoryPack – Zero-cost binary serialization + +If you need **blazing-fast serialization** for in-memory caching or network transport, **MemoryPack** is a game-changer. + +- Zero-copy, zero-alloc serialization +- Perfect for high-performance caching or game servers +- Strongly typed and version-tolerant + +![MemoryPack](MemoryPack.png) + +Great for real-time multiplayer games, chat apps, or financial systems. + +- **NuGet** (5.3M downloads) 🔗 https://www.nuget.org/packages/MemoryPack +- **GitHub** (4K stars) 🔗 https://github.com/Cysharp/MemoryPack + +------ + +## 5. WolverineFx – Ultra-low latency messaging + +![wolverine](wolverine-logo.png) + +MediatR was one of the best mediator library but now it's a paid library. Wolverine is a toolset for command execution and message handling within .NET applications. The killer feature of Wolverine is its very efficient command execution pipeline that can be used as: + +- An [inline "mediator" pipeline](https://wolverinefx.net/tutorials/mediator.html) for executing commands +- A [local message bus](https://wolverinefx.net/guide/messaging/transports/local.html) for in-application communication +- A full-fledged [asynchronous messaging framework](https://wolverinefx.net/guide/messaging/introduction.html) for robust communication and interaction between services when used in conjunction with low level messaging infrastructure tools like RabbitMQ +- With the [WolverineFx.Http](https://wolverinefx.net/guide/http/) library, Wolverine's execution pipeline can be used directly as an alternative ASP.Net Core Endpoint provider + +*Below image is from [codecrash.net](https://www.codecrash.net/2024/02/06/Mediatr-versus-Wolverine-performance.html)* +![WolverineFx](wolverine.png) + +WolverineFx is great for cleanly separating business logic from controllers while unifying in-process mediator patterns with powerful distributed messaging in a single, high-performance .NET library. + +- **NuGet** (1.5M downloads) 🔗 https://www.nuget.org/packages/WolverineFx +- **GitHub** (1.7K stars) 🔗 https://github.com/JasperFx/wolverine + + + +## 6. Disruptor-net – Next generation free .NET mediator + +The Disruptor is a high performance inter-thread message passing framework. A lock-free ring buffer for ultra-low latency messaging. +features are: + +- Zero memory allocation after initial setup (the events are pre-allocated). + +- Push-based consumers. + +- Optionally lock-free. + +- Configurable wait strategies. + +![Disruptor](Disruptor.png) + +- **NuGet** (1.2M downloads) 🔗 https://www.nuget.org/packages/Disruptor/ +- **GitHub** (1.3K stars) 🔗 https://github.com/disruptor-net/Disruptor-net + + + +## 7. CliWrap - Running command-line processes + +![CLIWrap](C:\Users\alper\Desktop\high-perf-dotnet-libs\cliwrap.png) + +CliWrap makes it easy to **run and manage external CLI processes in .NET**. + +- Fluent, task-based API for starting commands +- Streams standard input/output and error in real time +- Supports cancellation, timeouts, and piping between processes + +Ideal for automation, build tools, and integrating external executables. + +- **NuGet** (14.1M downloads) 🔗 https://www.nuget.org/packages/CliWrap +- **GitHub** (4.7K stars) 🔗 https://github.com/Tyrrrz/CliWrap + + + +--- + + + +## Hidden Libs from the Community + +### Sylvan.Csv & **Sep** + +- **Sylvan.Csv**: Up to *10× faster* and *100× less memory allocations* than `CsvHelper`, making CSV processing lightning-fast. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com)) +- **Sep**: Even faster than Sylvan, but trades off some flexibility. Great when performance matters more than API richness. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com)) + +### String Parsing: **csFastFloat** + +- Parses `float` and `double` around *8–9× faster* than `.Parse` methods—perfect for high-volume parsing tasks. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com)) + +### CySharp’s Suite: MemoryPack, MasterMemory, SimdLinq + +- **MemoryPack**: One of the fastest serializers available, with low allocations and high throughput. Ideal for Web APIs or microservices. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com)) +- **MasterMemory**: Designed for databases or config storage. Claims *4,700× faster than SQLite* with zero-allocations per query. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com)) +- **SimdLinq**: SIMD-accelerated LINQ operations supporting a broader set of methods than .NET's built-in SIMD. Works when slight floating-point differences are acceptable. ([Reddit](https://www.reddit.com/r/csharp/comments/191rwgt/extremely_highperformance_libraries_for_common/?utm_source=chatgpt.com)) + +### Jil – JSON Deserializer + +- Ultra-fast JSON (de)serializer with low memory overhead, used in high-scale systems. ([Performance is a Feature!](https://www.mattwarren.org/2014/09/05/stack-overflow-performance-lessons-part-2/?utm_source=chatgpt.com)) + +### StackExchange.NetGain – WebSocket Efficiency + +- High-performance WebSocket server library designed for low-latency IO scenarios. (Now mostly replaced by Kestrel's built-in support, but worth knowing.) ([GitHub](https://github.com/StackExchange/NetGain?utm_source=chatgpt.com)) + +### Math Libraries: Math.NET Numerics & ILNumerics + +- **Math.NET Numerics**: Core numerical methods and matrix math, similar to BLAS/LAPACK. ([Wikipedia](https://en.wikipedia.org/wiki/Math.NET_Numerics?utm_source=chatgpt.com)) +- **ILNumerics**: Efficient numerical arrays with parallelized processing, loop unrolling, cache optimizations. Great for scientific computing. ([Wikipedia](https://en.wikipedia.org/wiki/ILNumerics?utm_source=chatgpt.com)) + diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cliwrap.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cliwrap.png new file mode 100644 index 0000000000..718d1b558b Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cliwrap.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cover.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cover.png new file mode 100644 index 0000000000..a1b4c825e2 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/cover.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine-logo.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine-logo.png new file mode 100644 index 0000000000..b14dc2b7ed Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine-logo.png differ diff --git a/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine.png b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine.png new file mode 100644 index 0000000000..5ef73f0149 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-High-Perf-DotNet-Libs/wolverine.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_1.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_1.png new file mode 100644 index 0000000000..9889c8d813 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_1.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_2.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_2.png new file mode 100644 index 0000000000..5e00300c81 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_2.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_3.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_3.png new file mode 100644 index 0000000000..3675376cb3 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_3.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_4.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_4.png new file mode 100644 index 0000000000..e0b94bb47c Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_4.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_5.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_5.png new file mode 100644 index 0000000000..4ed8c4eabe Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_5.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_6.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_6.png new file mode 100644 index 0000000000..ad2640da1f Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_6.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_7.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_7.png new file mode 100644 index 0000000000..cfdf76ea7e Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_7.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_8.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_8.png new file mode 100644 index 0000000000..f399892ee8 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_8.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_9.png b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_9.png new file mode 100644 index 0000000000..171ff61851 Binary files /dev/null and b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/images/img_9.png differ diff --git a/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/post.md b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/post.md new file mode 100644 index 0000000000..cfd4db30bf --- /dev/null +++ b/docs/en/Community-Articles/2025-09-11-Web-Design-Basics-for-Graphic-Designers-Who-Dont-Code/post.md @@ -0,0 +1,282 @@ +# Web Design Basics for Graphic Designers Who Don't Code + +## Introduction + +As a **designer**, I have been working on **logos**, **posters**, and **social media announcement** **visuals** for years. However, when it comes to the web, I used to hold back saying “I **don’t know how to code**.” We have all thought about this at some point and unfortunately, we still think about it from time to time. + +🚀 **Good news**: We can learn **web design** without writing code and design **user-friendly**, **aesthetic, and functional web interfaces** using basic knowledge. + +In this article, we will talk about the **basics of web design**, its **differences from graphic design**, and whether it is possible to do **web design without knowing how to code**. + +## Differences Between Graphic Design & Web Design + +![](images/img_2.png) + +### What is Graphic Design? + +Graphic design is creating **visual content** that conveys a message to a **specific audience**. Graphic designers use various **visual elements** such as **color**, **typography**, **imagery**, and **layout** to communicate a message effectively. They work on a wide range of projects, including **logos**, **websites**, **packaging**, **advertisements, and branding**. + +### What is Web Design? + +Web design is the process of creating a website that can be viewed on computers or mobile devices. Like graphic design, web design also involves creating **graphics**, **typography**, **and visuals**, but they use the **internet** as the communication channel. + +### Graphic Design + +* Graphic Design is concerned with **visuals** and **appearance**. +* Graphic design focuses on visually conveying specific messages or ideas through **typography**, **visuals**, **colors**, and i**llustrations**. +* Graphic design focuses on how objects **look**. +* Graphic designers **do not need coding knowledge**. +* Graphic design is **static**. + +### Web Design + +* Web design is user experience–focused. +* Web design aims to create **functional** and **user-friendly** **websites** that provide the **best experience** for users. +* Web design considers **search engine optimization** when creating websites. +* Web designers need to have **knowledge of HTML**, **CSS**, and other web development languages to create **functional and responsive designs**. +* Web design is **dynamic**. + +## Fundamental Principles of Web Design (Applicable Without Coding) + +Companies and **brands** from almost every sector request the **creation of their own websites**. This way, they gain the opportunity to introduce their **services**, **prices**, and themselves to their **target audiences**. However, for this to have the desired effect, the website must be **designed properly**. What are the **fundamental principles** to pay attention to when designing a website? Now, it’s time to answer this question by introducing the basics. Here are the **indispensable principles in web design**. + + ### 1\) User-Centered Designs: + +Users always value **ease and practicality** when receiving a service. For this reason, it is important for websites to be designed in a user-centered way. **Easy to find menus**, **fast usage**, and the **easy to locate any information** are very important. With **user centered design**, it is possible to create websites that are **easy to use** and also **satisfy users**. + + + ### 2\) Responsive Designs: + +It is very important for the website and its design to be **usable on every digital platform**. Therefore, the designed sites must have a **responsive design**. This means easy access to the site on a **phone**, **tablet**, or **computer**. This also ensures that users continue to prefer the site. + + ### 3\) Visual Hierarchy: + +The page must have **visuals related to itself**, and **product content** should be matched with the **correct visuals**. It is also very important for visual elements to be placed according to their order of importance. On web pages, content compatible with visuals must be provided with **sufficient and accurate information**. + + ### 4\) Color and Typography Selection: + +Color and typography selection is very important for handling visuals, colors, and text in a certain **harmony**. For the site to **attract attention** or for the relevant pages to achieve the expected interaction, the use of color and the chosen font style and font color must be harmonious. A design that is both **easy to read** and **eye catching** without causing any disturbance should be preferred. + + ### 5\) Content and Layout Structure: + +One of the most desired features on web pages is **content organization**. Content that is **unrelated to the pages, creates confusion while reading**, or **lacks simplicity**, such as overly frequent paragraphs, incorrect fonts, and similar factors, causes web pages to have less impact. **Content structure** also includes **placing related topics sequentially** and **adding them to the menu**. For example, on a website created for shoes, if shoe types are grouped separately, users find it easier. Options like high heels, sandals, and sneakers help users find what they are looking for more easily, which in turn ensures positive site feedback. + + ### 6\) Speed Optimization: + +As with every type of service, speed is very important for services provided through web pages. Easy navigation between pages, error-free performance, and ease of use are very important for users. No one wants to shop or use a service on a website that takes a long time to load, because everyone prefers websites to save time. + + ### 7\) Consistency: + +For a service to be preferred, it must first be reliable. This is directly related to the information, visuals, and everything on the website. The information in the content, visuals, and content details must be consistent and should not raise any questions in visitors’ minds. Otherwise, negative feedback can later affect customer preferences and damage the brand image. + +## Is It Possible to Do Web Design Without Coding? + +In the past, it was not possible to create a website without at least some basic coding knowledge. However, today, almost anyone can build a website. Even if you have not written a **single line of code**. + +The biggest helpers for those who want to do **web development without coding** are **No-Code** and **Low-Code** platforms. These tools help users **design websites** without dealing with **technical details**. + +Systems like **Wix**, **Webflow**, **Shopify**, and **WordPress** are very common in this area. + +![](images/img_3.png) + +The web development process on these platforms is carried out through practical methods such as **drag-and-drop**, selecting **ready-made templates**, and filling out forms. + +### **No Code** + +As the name suggests, it allows you to create websites, mobile applications, automations, and workflows **without writing a single line of code**. + +* **How Does It Work**? They usually have a visual editor. You create the skeleton of your application by dragging and dropping ready “building blocks” such as buttons, forms, and visuals onto your canvas. Then, you determine what these elements will do (for example, “go to this page when this button is clicked”) by selecting options from the menus. +* **Who Uses It**? It is perfect for entrepreneurs, marketers, product managers, designers, and anyone who wants to quickly test an idea. +* **Examples**: Platforms like Webflow, Bubble, Adalo, and Glide allow you to create a wide range of products, from complex web applications to mobile apps. + +### **Low Code** + +Low-Code systems require a bit more **technical knowledge** but still **do not require learning full-scale programming**. + +* **How Does It Work**? You handle 80% of the work with drag-and-drop, and for the remaining 20% that requires customization, you add small code snippets. +* **Who Uses It**? It is generally preferred by IT departments of corporate companies and technical teams that want to develop more complex, scalable applications. +* **Examples**: Platforms like OutSystems and Mendix are used to build large, integrated systems that manage a company’s internal processes. + +## What Should the Web Design Process be Like? + +![](images/img_4.png) + +**Web design** is a passionate field but can be **overwhelming** at times. When starting out, coming up with a plan on how to tackle your website or a web app idea often feels daunting: Where should you begin?Web designers often think about the **web design process** with a focus on **technical matters** such as wireframes, code, and content management. But great + +design isn’t about how you integrate the social media buttons or even slick visuals. **Great design** is actually about having **a website creation process** that aligns with an **overarching strategy.** + +Doing all the thinking beforehand ensures that you don’t forget anything crucial. It also frees up headspace for doing the actual work, avoids overwhelm, improves efficiency, and allows you to build better websites on repeat. + +But how do you achieve that harmonious synthesis of elements? Through a **holistic web design** process that takes both **form and function** into account. + +We have already covered the fundamentals, now, I'll share the steps to an **effective web design process.** + +Let's get started. + +### 1\) Goal Identification + +In this **initial stage**, the designer needs to identify the end goal of the website design, usually in close collaboration with the client or other stakeholders. Questions to explore and answer in this stage of the design and website development process include: + +* Who is the site for? +* What do they hope to find or do there? +* Is the main purpose of this website to inform, to sell (e-commerce, for everyone?), or to entertain? +* Does the website need to clearly convey the **brand's core message**, or is it part of a broader **brand strategy** with its own unique focus? +* If there are any, which **competitor sites** exist, and how should this site be **inspired by them** / how should it differ from them? + +To have clear answers to above questions will lead to the **successful execution** of the project. + +### What Purpose Will the Website Serve? + +Whatever the project you’re taking on, you always want each and every initiative you take to achieve the goals you’ve set for it. **Goal setting is critical** because it will be key in making decisions throughout the project by asking yourself the right questions and **prioritizing tasks and efforts**. + +As basic as it may seem, following the **SMART framework** is always a great idea when setting your goals, to **ensure effectiveness:** + +**S \- SPECIFIC** +Your goal is direct, detailed, and meaningful. + +**M \- MEASURABLE** +Your goal is quantifiable to track progress or success. + +**A \- ATTAINABLE** +Your goal is realistic and you have the tools and/or resources to attain it. + +**R \- RELEVANT** +Your goal aligns with your company mission. + +**T \- TIME-BASED** +Your goal has a deadline. + +### 2\) Scope Definition + +This is easier said than done when starting out, so it is best to approach it with caution : Everyone has once been guilty of saying a project “will be done by next week” before realizing they dramatically **underestimated** how hard it would be. + +Nevertheless, **setting** a timeline will help a lot with **accountability**, both internal and external, and will help **break down the project in distinct stages**. + +You don’t have to reinvent anything from scratch, as a lot of tools such as Airtable’s timeline view will help you put the timeline together. + +![](images/img_5.png) + +Source: [Airtable](https://blog.airtable.com/introducing-airtables-new-timeline-view/) + +### 3\) Sitemap and Wireframe Creation + +The site map forms the foundation of a well-designed website. It gives web designers a clear idea of the **information architecture** of the website and explains the **relationships** between various **pages and content elements**. + +![](images/img_6.png) + +Building a web site without a site map is like building a house without a plan. And it rarely ends well. + +Time to start building the first iteration of your project\! To put it shortly, **wireframes** serve as a blueprint, a visual guide representing the skeletal framework of a website or application. It will be a raw version of your project, a great way to get your **initial idea down** in its first “physical” form. + +![](images/img_7.png) + +Source: [Afolayan Daniel](https://medium.com/fbdevclagos/4-reasons-why-wire-frame-is-important-during-website-or-mobile-app-development-46fabdf47190) + +While it won’t be functional yet, it’ll be a major web design step to share with your team, potential leads or even investors, and will highlight issues that you might not have thought about previously. Wireframes are a great opportunity to move fast, once they’re ready, you’ll be able to: + +* Gather early feedback; +* Run UX testing groups; +* Iterate on your timeline if necessary; +* Get concept validation. + +There are different ways to create wireframes. You can of course sketch them out on paper to start with, but creating a digital version will eventually be much more practical to share them. + +#### Tools for sitemapping and wireframing; + +* Pen/pencil and paper. +* Balsamiq. +* Moqups. +* Sketch. +* Axure. +* Webflow. +* Slickplan. +* Writemaps. +* Mindnode. +* Figma. +* Sketch. + +### 4\) Content Creation +A website should offer more than just a simple design and attractive graphics. An effective content strategy is essential to capture users’ interest and to make the site stand out in search engines. + +![](images/img_8.png) +When it comes to content, search engine optimization is only +half of the battle. + +There are two main goals that you need to focus on while creating content. + +#### **Goal 1 Content encourages engagement and action:** + +First of all, content drives readers to take action and encourages them to perform the actions necessary to achieve a site's goals. This is influenced both by the content itself (writing) and by the way it is presented (typography and structural elements). + +Boring, lifeless, and lengthy writing rarely holds visitors' attention for long enough. Short, fluent, and engaging content captures them and makes them click through to other pages. Even if your pages need a lot of content (which they often do), properly "breaking it up" into short paragraphs supported by visuals can help create a light and engaging feel. + +#### **Goal 2 Search Engine Optimization**: + +Content also increases a site's visibility in the eyes of search engines. The practice of creating and developing content to achieve a good ranking in search results is called search engine optimization or SEO. + +Identifying your keywords and key phrases correctly is very important for the success of any website. + +### 5\) Visual Elements + +![](images/img_9.png) + +Style Tile: a free style tile / moodboard template built by Mat Vogels. + +It is time to create the **visual style** of the site. This part of the design process is usually shaped by **existing brand elements, color choices**, and **logos** specified by the client. However, it is also the stage of the web design process where a **good web designer can truly shine**. + +**Visuals play a more important** **role** in web design than ever before. High quality visuals not only give a website a professional look and feel, but also convey a message, are mobile friendly, and help build trust. + +**Visual design is a way of communicating** with the web site users to make the site as **appealing to them** as possible. When done right, it can determine the site’s being one of the major successes amongst competitors. On the other hand, any mistake might put it in risk of becoming just another ordinary web site. + +**Tools for visual elements**: + +* (Sketch, Illustrator, Photoshop, Figma, vb.) +* Visual Style Guides. + + + +### 6\) Development & Platforms + +**Front-End Development**: The parts that users interact with (HTML, CSS, JavaScript). + +**Back-End Developmen**t: Database and server-side processes (PHP, Python, Node.js). + +**No-Code Platforms**: Publishing on platforms like Webflow, Bubble, Adalo, Glide. + +### 7\) Testing + +When your site has all the visuals and content, you are ready to test. +Once the **first iteration** of your website/web app is ready, it’s time for some **testing** to make sure it **runs smoothly**. + +A website should undergo a detailed testing process before going live. +Items to check during the testing process: + +* Mobile Compatibility. +* Functionality across different browsers. +* Functionality of forms and buttons. + +Alongside these steps, setting up website uptime monitoring is essential to ensure the site remains functional after launch, providing immediate alerts if any downtime occurs. Ultimately, while testing is an important part of the web design process, it’s not worth losing sleep over. **Done is always better than perfect** and when in doubt, keep this quote in mind. + +*“If you are not embarrassed by the first version of your product, you've launched too late.” \- Reid Hoffman, founder of LinkedIn* + +### 8\) Website Launch + +Now it’s time for everyone’s favorite part of the website design process: When everything has been thoroughly tested and you’re happy with the site, you can start. + +Don’t expect this to go perfectly. There may still be some elements that need fixing. Web design is a fluid and ongoing process that requires constant maintenance. + +Web design and design in general is about finding the right balance between form and function. You need to use the right fonts, colors, and design motifs. But the way users navigate and experience your site is just as important. + +## Conclusion + +Previously, when we wanted to turn our designs into reality, the barrier of learning and using a programming language tool stood in our way. This barrier has now been removed thanks to **No-Code tools**. With these tools, even without coding knowledge, there is now a way to bring your designs to life. + +## Resources + +* Bulut, B. (2025, July 20). *Kod yazmayı bilmeden yazılımcı olmak nasıl mümkün oldu?* Webtekno. [https://www.webtekno.com/kod-bilmeden-yazilimci-olmak-nasil-mumkun-oldu-h159799.html](https://www.webtekno.com/kod-bilmeden-yazilimci-olmak-nasil-mumkun-oldu-h159799.html) + +* Ectasarim. (2024, Kasım 10). *Web tasarım ilkeleri nelerdir? Önemli hususlar*. [https://www.ectasarim.com/web-tasarim-ilkeleri/](https://www.ectasarim.com/web-tasarim-ilkeleri/?utm_source=chatgpt.com) + +* Meazey, M. (2020, February 12). *The web design process in 7 simple steps*. *Webflow Blog*. [https://webflow.com/blog/the-web-design-process-in-7-simple-steps](https://webflow.com/blog/the-web-design-process-in-7-simple-steps) + +* University of California Office of the President. (2016). *How to write SMART goals: A how-to guide.* University of California. [https://www.ucop.edu/local-human-resources/\_files/performance-appraisal/How+to+write+SMART+Goals+v2.pdf](https://www.ucop.edu/local-human-resources/_files/performance-appraisal/How+to+write+SMART+Goals+v2.pdf) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index dc2412b529..585309d8eb 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -745,6 +745,10 @@ "text": "Image Manipulation", "path": "framework/infrastructure/image-manipulation.md" }, + { + "text": "Interceptors", + "path": "framework/infrastructure/interceptors.md" + }, { "text": "JSON", "path": "framework/infrastructure/json.md" diff --git a/docs/en/dynamic-proxying-interceptors.md b/docs/en/dynamic-proxying-interceptors.md deleted file mode 100644 index 722eadc249..0000000000 --- a/docs/en/dynamic-proxying-interceptors.md +++ /dev/null @@ -1,7 +0,0 @@ -# Dynamic Proxying / Interceptors - -This document is planned to be written later. - -## See Also - -* [Video tutorial](https://abp.io/video-courses/essentials/interception) \ No newline at end of file diff --git a/docs/en/framework/api-development/standard-apis/configuration.md b/docs/en/framework/api-development/standard-apis/configuration.md index c1470fcf71..11e754f214 100644 --- a/docs/en/framework/api-development/standard-apis/configuration.md +++ b/docs/en/framework/api-development/standard-apis/configuration.md @@ -55,7 +55,16 @@ namespace Acme.BookStore.Web } ``` +Add your contributor instance to the `AbpApplicationConfigurationOptions` + +```csharp +Configure(options => +{ + options.Contributors.AddIfNotContains(new MyApplicationConfigurationContributor()); +}); +``` + * `IApplicationConfigurationContributor` defines the `ContributeAsync` method to extend the **application-configuration** endpoint with the specified additional data. -* You can inject services and perform any logic needed to extend the endpoint as you wish. +* You can get services from `context.ServiceProvider` and perform any logic needed to extend the endpoint as you wish. -> Application configuration contributors are automatically discovered by the ABP and executed as a part of the application configuration initialization process. +> Application configuration contributors are executed as a part of the application configuration initialization process. diff --git a/docs/en/framework/architecture/domain-driven-design/application-services.md b/docs/en/framework/architecture/domain-driven-design/application-services.md index 4d32f853dd..968ceb434d 100644 --- a/docs/en/framework/architecture/domain-driven-design/application-services.md +++ b/docs/en/framework/architecture/domain-driven-design/application-services.md @@ -134,7 +134,7 @@ The `CreateAsync` method above manually creates a `Book` entity from given `Crea However, in many cases, it's very practical to use **auto object mapping** to set properties of an object from a similar object. ABP provides an [object to object mapping](../../infrastructure/object-to-object-mapping.md) infrastructure to make this even easier. -Object to object mapping provides abstractions and it is implemented by the [AutoMapper](https://automapper.org/) library by default. +Object to object mapping provides abstractions and it is implemented by the [Mapperly](https://mapperly.riok.app/) library by default. Let's create another method to get a book. First, define the method in the `IBookAppService` interface: @@ -162,36 +162,32 @@ public class BookDto } ```` -AutoMapper requires to create a mapping [profile class](https://docs.automapper.org/en/stable/Configuration.html#profile-instances). Example: +[Mapperly](https://mapperly.riok.app/) requires to create a mapping class that implements the `MapperBase` class with the `[Mapper]` attribute as follows: -````csharp -public class MyProfile : Profile +```csharp +[Mapper] +public partial class BookToBookDtoMapper : MapperBase { - public MyProfile() - { - CreateMap(); - } + public override partial BookDto Map(Book source); + + public override partial void Map(Book source, BookDto destination); } -```` +``` -You should then register profiles using the `AbpAutoMapperOptions`: +Then, if your application uses multiple mapping providers, you should add the following configuration to your module's `ConfigureServices` method to decide which mapping provider to use: ````csharp -[DependsOn(typeof(AbpAutoMapperModule))] +[DependsOn(typeof(AbpMapperlyModule))] public class MyModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => - { - //Add all mappings defined in the assembly of the MyModule class - options.AddMaps(); - }); + context.Services.AddMapperlyObjectMapper(); } } ```` -`AddMaps` registers all profile classes defined in the assembly of the given class, typically your module class. It also registers for the [attribute mapping](https://docs.automapper.org/en/stable/Attribute-mapping.html). +With this configuration, your module will use [Mapperly](https://mapperly.riok.app/) as the default mapping provider and you don't need to register mapping classes manually. Then you can implement the `GetAsync` method as shown below: @@ -291,16 +287,21 @@ public class CreateUpdateBookDto } ```` -[Profile](https://docs.automapper.org/en/stable/Configuration.html#profile-instances) class of DTO class. +Define the mapping classes for [Mapperly](https://mapperly.riok.app/) as follows: ```csharp -public class MyProfile : Profile +[Mapper] +public partial class BookToBookDtoMapper : MapperBase { - public MyProfile() - { - CreateMap(); - CreateMap(); - } + public override partial BookDto Map(Book source); + public override partial void Map(Book source, BookDto destination); +} + +[Mapper] +public partial class CreateUpdateBookDtoToBookMapper : MapperBase +{ + public override partial Book Map(CreateUpdateBookDto source); + public override partial void Map(CreateUpdateBookDto source, Book destination); } ``` diff --git a/docs/en/framework/fundamentals/localization.md b/docs/en/framework/fundamentals/localization.md index 6e8a3f678a..47c4ca564a 100644 --- a/docs/en/framework/fundamentals/localization.md +++ b/docs/en/framework/fundamentals/localization.md @@ -91,6 +91,34 @@ A JSON localization file content is shown below: > ABP will ignore (skip) the JSON file if the `culture` section is missing. +You can also use nesting or array in localization files, like this: + +````json +{ + "culture": "en", + "texts": { + "HelloWorld": "Hello World!", + "Hello": { + "World": "Hello World!" + }, + "Hi":[ + "Bye": "Bye World!" + "Hello": "Hello World!" + ] + } +} +```` + +Then you can use it like this: + +> The double underscore (`__`) is used to separate the parent key from the child key. + +````csharp +var str = L["Hello__World"]; // Hello World! +var str2 = L["Hi__0"]; // Bye World! +var str3 = L["Hi__1"]; // Hello World! +```` + ### Default Resource `AbpLocalizationOptions.DefaultResourceType` can be set to a resource type, so it is used when the localization resource was not specified: diff --git a/docs/en/framework/infrastructure/entity-cache.md b/docs/en/framework/infrastructure/entity-cache.md index 64a03ad4c4..cba0cf8eaa 100644 --- a/docs/en/framework/infrastructure/entity-cache.md +++ b/docs/en/framework/infrastructure/entity-cache.md @@ -88,6 +88,17 @@ public class MyMapperProfile : Profile } ``` +If you are using [Mapperly](https://mapperly.riok.app/), you can create a new mapping class that implements the `MapperBase` class with the `[Mapper]` attribute as follows: + +```csharp +[Mapper] +public partial class ProductToProductDtoMapper : MapperBase +{ + public override partial ProductDto Map(Product source); + public override partial void Map(Product source, ProductDto destination); +} +``` + Now, you can inject the `IEntityCache` service wherever you want: ```csharp diff --git a/docs/en/framework/infrastructure/interceptors.md b/docs/en/framework/infrastructure/interceptors.md new file mode 100644 index 0000000000..d50de3ad84 --- /dev/null +++ b/docs/en/framework/infrastructure/interceptors.md @@ -0,0 +1,213 @@ +# Interceptors + +ABP provides a powerful interception system that allows you to execute custom logic before and after method calls without modifying the original method code. This is achieved through **dynamic proxying** and is extensively used throughout the ABP framework to implement cross-cutting concerns. ABP's interception is implemented on top of the [Castle DynamicProxy](https://www.castleproject.org/projects/dynamicproxy/) library. + +## What is Dynamic Proxying / Interception? + +**Interception** is a technique that allows executing additional logic before or after a method call without directly modifying the method's code. This is achieved through **dynamic proxying**, where the runtime generates proxy classes that wrap the original class. + +When a method is called on a proxied object: +1. The call is intercepted by the proxy +2. Custom behaviors (like logging, validation, or authorization) can be executed +3. The original method is called +4. Additional logic can be executed after the method completes + +This enables **cross-cutting concerns** (logic that applies across many parts of an application) to be handled in a clean, reusable way without code duplication. + +## Similarities and Differences with MVC Action/Page Filters + +If you are familiar with ASP.NET Core MVC, you've likely used **action filters** or **page filters**. Interceptors are conceptually similar but have some key differences: + +### Similarities + +* Both allow executing code before and after method execution +* Both are used to implement cross-cutting concerns like validation, logging, caching, or exception handling +* Both support asynchronous operations + +### Differences + +* **Scope**: Filters are tied to MVC's request pipeline, while interceptors can be applied to **any class or service** in the application +* **Configuration**: Filters are configured via attributes or middleware in MVC, while interceptors in ABP are applied through **dependency injection and dynamic proxies** +* **Target**: Interceptors can target application services, domain services, repositories, and virtually any service resolved from the IoC container—not just web controllers + +## How ABP Uses Interceptors + +ABP Framework extensively leverages interception to provide built-in features without requiring boilerplate code. Here are some key examples: + +### [Unit of Work (UOW)](../architecture/domain-driven-design/unit-of-work.md) + +Automatically begins and commits/rolls back a database transaction when entering or exiting an application service method. This ensures data consistency without manual transaction management. + +### [Input Validation](../fundamentals/validation.md) + +Input DTOs are automatically validated against data annotation attributes and custom validation rules before executing the service logic, providing consistent validation behavior across all services. + +### [Authorization](../fundamentals/authorization.md) + +Checks user permissions before allowing the execution of application service methods, ensuring security policies are enforced consistently. + +### [Feature](./features.md) & [Global Feature](./global-features.md) Checking + +Checks if a feature is enabled before executing the service logic, allowing you to conditionally enable or restrict functionality for tenants or the application. + +### [Auditing](./audit-logging.md) + +Automatically logs who performed an action, when it happened, what parameters were used, and what data was involved, providing comprehensive audit trails. + +## Building Your Own Interceptor + +You can create custom interceptors in ABP to implement your own cross-cutting concerns. + +### Creating an Interceptor + +Create a class that inherits from `AbpInterceptor`: + +````csharp +using System.Threading.Tasks; +using Volo.Abp.Aspects; +using Volo.Abp.DependencyInjection; +using Volo.Abp.DynamicProxy; + +public class ExecutionTimeLogInterceptor : AbpInterceptor, ITransientDependency +{ + private readonly ILogger _logger; + + public ExecutionTimeLogInterceptor(ILogger logger) + { + _logger = logger; + } + + public override async Task InterceptAsync(IAbpMethodInvocation invocation) + { + var sw = Stopwatch.StartNew(); + + _logger.LogInformation($"Executing {invocation.TargetObject.GetType().Name}.{invocation.Method.Name}"); + + // Proceed to the actual target method + await invocation.ProceedAsync(); + + sw.Stop(); + + _logger.LogInformation($"Executed {invocation.TargetObject.GetType().Name}.{invocation.Method.Name} in {sw.ElapsedMilliseconds} ms"); + } +} +```` + +### Register Interceptors + +Create a static class that contains the `RegisterIfNeeded` method and register the interceptor in the `PreConfigureServices` method of your module. + +The `ShouldIntercept` method is used to determine if the interceptor should be registered for the given type. You can add an `IExecutionTimeLogEnabled` interface and implement it in the classes that you want to intercept. + +> `DynamicProxyIgnoreTypes` is static class that contains the types that should be ignored by the interceptor. See [Performance Considerations](#performance-considerations) for more information. + +````csharp +// Define an interface to mark the classes that should be intercepted +public interface IExecutionTimeLogEnabled +{ +} +```` + +````csharp +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +// A simple service that added to the DI container and will be intercepted since it implements the `IExecutionTimeLogEnabled` interface +public class SampleExecutionTimeService : IExecutionTimeLogEnabled, ITransientDependency +{ + public virtual async Task DoWorkAsync() + { + // Simulate a long-running task to test the interceptor + await Task.Delay(1000); + } +} +```` + +````csharp +using System; +using Volo.Abp.DependencyInjection; +using Volo.Abp.DynamicProxy; + +public static class ExecutionTimeLogInterceptorRegistrar +{ + public static void RegisterIfNeeded(IOnServiceRegistredContext context) + { + if (ShouldIntercept(context.ImplementationType)) + { + context.Interceptors.TryAdd(); + } + } + + private static bool ShouldIntercept(Type type) + { + return !DynamicProxyIgnoreTypes.Contains(type) && typeof(IExecutionTimeLogEnabled).IsAssignableFrom(type); + } +} +```` + +````csharp +public override void PreConfigureServices(ServiceConfigurationContext context) +{ + context.Services.OnRegistered(ExecutionTimeLogInterceptorRegistrar.RegisterIfNeeded); +} +```` + +## Restrictions and Important Notes + +### Always use asynchronous methods + +For best performance and reliability, implement your service methods as asynchronous to avoid **async over sync**, that can cause unexpected problems, For more information, see [Should I expose synchronous wrappers for asynchronous methods?](https://devblogs.microsoft.com/dotnet/should-i-expose-synchronous-wrappers-for-asynchronous-methods/) + +### Virtual Methods Requirement + +For **class proxies**, methods need to be marked as `virtual` so that they can be overridden by the proxy. Otherwise, interception will not occur. + +````csharp +public class MyService : IExecutionTimeLogEnabled, ITransientDependency +{ + // This method CANNOT be intercepted (not virtual) + public void CannotBeIntercepted() + { + } + + // This method CAN be intercepted (virtual) + public virtual void CanBeIntercepted() + { + } +} +```` + +> This restriction does **not** apply to interface-based proxies. If your service implements an interface and is injected via that interface, all methods can be intercepted regardless of the `virtual` keyword. + +### Dependency Injection Scope + +Interceptors only work when services are resolved from the dependency injection container. Direct instantiation with `new` bypasses interception: + +````csharp +// This will NOT be intercepted +var service = new MyService(); +service.CannotBeIntercepted(); + +// This WILL be intercepted (if MyService is registered with DI) +var service = serviceProvider.GetService(); +service.CanBeIntercepted(); +```` + +### Performance Considerations + +Interceptors are generally efficient, but each one adds method-call overhead. Keep the number of interceptors minimal on hot paths. + +Castle DynamicProxy can negatively impact performance for certain components, notably ASP.NET Core MVC controllers. See the discussions in [castleproject/Core#486](https://github.com/castleproject/Core/issues/486) and [abpframework/abp#3180](https://github.com/abpframework/abp/issues/3180). + +ABP uses interceptors for features like UOW, auditing, and authorization, which rely on dynamic proxy classes. For controllers, prefer implementing cross-cutting concerns with middleware or MVC/Page filters instead of dynamic proxies. + +To avoid generating dynamic proxies for specific types, use the static class `DynamicProxyIgnoreTypes` and add the base classes of the types to the list. Subclasses of any listed base class are also ignored. ABP framework already adds some base classes to the list (`ComponentBase, ControllerBase, PageModel, ViewComponent`); you can add more base classes if needed. + +> Always use interface-based proxies instead of class-based proxies for better performance. + +## See Also + +* [Video tutorial: Interceptors in ABP Framework](https://abp.io/video-courses/essentials/interception) +* [Castle DynamicProxy](https://www.castleproject.org/projects/dynamicproxy/) +* [Castle.Core.AsyncInterceptor](https://github.com/JSkimming/Castle.Core.AsyncInterceptor) +* [ASP.NET Core Filters](https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/filters) diff --git a/docs/en/framework/ui/angular/form-validation.md b/docs/en/framework/ui/angular/form-validation.md index 6a67018124..6e36945c96 100644 --- a/docs/en/framework/ui/angular/form-validation.md +++ b/docs/en/framework/ui/angular/form-validation.md @@ -170,3 +170,211 @@ export const appConfig: ApplicationConfig = { The error message will be bold and italic now: A required field is cleared and a bold and italic error message appears. + +## How to Validate Nested Form Groups + +There are multiple ways to validate nested form groups in ABP Angular UI. Below is the first and most common approach, using automatic validation and error messages with nested reactive forms. (A second method will be described in the next section.) + +### 1st Way: Automatic Validation and Error Message Using Nested Reactive Forms + +ABP Angular UI leverages Angular's reactive forms and the [ngx-validate](https://www.npmjs.com/package/@ngx-validate/core) library to provide a robust, flexible, and user-friendly form validation experience. Whether you build your forms manually or use ABP’s dynamic form generation features, validation and error messages are handled automatically. + +#### Key Features + +- **Automatic Validation:** + All validation rules defined in your DTOs (such as `[Required]`, `[StringLength]`, `[EmailAddress]`, etc.) are automatically reflected in the Angular form. Error messages are shown under each field without any extra markup. + +- **Nested Form Groups and Dynamic Fields:** + For complex data structures, you can group fields or manage dynamic lists using nested `FormGroup` and `FormArray` structures. Validation and error display work seamlessly for both parent and child controls. + +- **Dynamic and Extensible Forms:** + With ABP’s extensibility system, you can generate forms dynamically using helpers like `generateFormFromProps` and display them with the `abp-extensible-form` component. This ensures all entity properties (including extension properties) are included in the form and their validation rules are applied. + +- **No Extra Boilerplate:** + You do not need to add custom error components or directives for validation. The system works out of the box, including for nested and dynamically generated controls. + +#### Real-World Example: Nested Form Groups in the Users Form + +Below is a real example from the Users management form in ABP Angular UI, showing how nested form structures and validation are implemented. This example includes both dynamically generated fields (with `abp-extensible-form`) and a dynamic list of roles using `FormArray` and `FormGroup`. + +**TypeScript: Building the Form** + +```ts +buildForm() { + const data = new FormPropData(this.injector, this.selected); + this.form = generateFormFromProps(data); // Automatically creates form controls from entity and extension properties + + this.service.getAssignableRoles().subscribe(({ items }) => { + this.roles = items; + if (this.roles) { + // Dynamic roles list: nested FormArray and FormGroup + this.form.addControl( + 'roleNames', + this.fb.array( + this.roles.map(role => + this.fb.group({ + [role.name as string]: [ + this.selected?.id + ? !!this.selectedUserRoles?.find(userRole => userRole.id === role.id) + : role.isDefault, + ], + }), + ), + ), + ); + } + }); +} +``` + +**HTML: Displaying the Form** + +```html + + +

{{ (selected?.id ? 'AbpIdentity::Edit' : 'AbpIdentity::NewUser') | abpLocalization }}

+
+ + + @if (form) { +
+ +
+
+ } @else { +
+ } +
+
+``` + +**Explanation:** +- `abp-extensible-form` automatically generates and displays all entity fields and their validation. +- In the Roles tab, each role is represented by a checkbox, and these checkboxes are managed in a `FormArray`, with each as a `FormGroup`. This is a real-world example of a nested form structure. +- All validation and error messages are shown automatically for both the main form and nested groups. + + +### 2nd Way: Manual Nested Reactive Forms Without abp-extensible-form + +You can also build and validate nested form groups manually, without using `abp-extensible-form` or dynamic helpers. This approach gives you full control over the form structure and is useful for custom or non-entity-based forms. + +#### Example: Simple Manual Nested FormGroup + +Below is a simple, generic example of a nested reactive form. This form includes a nested `FormGroup` for profile information and demonstrates how to apply validation rules. + +**TypeScript: Building the Form** + +```ts +import { Component, OnInit, inject } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { NgxValidateCoreModule } from '@ngx-validate/core'; + +@Component({ + selector: 'app-nested-form', + templateUrl: './nested-form.component.html', + standalone: true, + imports: [NgxValidateCoreModule], +}) +export class NestedFormComponent implements OnInit { + form: FormGroup; + + private fb = inject(FormBuilder); + + ngOnInit() { + this.buildForm(); + } + + buildForm() { + this.form = this.fb.group({ + userName: ['', Validators.required], + email: ['', [Validators.required, Validators.email]], + profile: this.fb.group({ + firstName: ['', Validators.required], + lastName: ['', Validators.required], + }), + }); + } + + submit() { + if (this.form.invalid) { + return; + } + // handle submit + } +} +``` + +**HTML: Displaying the Form** + +```html +
+
+ + +
+ +
+ + +
+ +
+
+ Profile Details +
+
+
+ + +
+ +
+ + +
+
+
+ +
+ +
+ + Save + +
+
+``` + +**How it works:** +- The form contains main fields (`userName`, `email`) and a nested `FormGroup` (`profile`). +- The `profile` group includes `firstName` and `lastName` fields, each with their own validation rules. +- Validation rules are defined directly in the form builder. +- Error messages and validation feedback are handled automatically by ngx-validate and ABP Angular UI, just like with dynamic forms. +- This structure ensures that validation works automatically for both the main form and nested groups. + +> **Note:** This approach is ideal for custom forms or when you want full control over the form structure. It provides a user experience and validation behavior similar to ABP's dynamic forms, but with manual control over the form layout and logic. + +--- \ No newline at end of file diff --git a/docs/en/modules/docs.md b/docs/en/modules/docs.md index b564980ba3..b9c3209e3f 100644 --- a/docs/en/modules/docs.md +++ b/docs/en/modules/docs.md @@ -148,11 +148,6 @@ An ABP module must declare `[DependsOn]` attribute if it has a dependency upon a { options.DefinitionProviders.Add(); }); - - Configure(options => - { - options.AddProfile(); - }); } } ``` diff --git a/docs/en/others/why-abp-platform.md b/docs/en/others/why-abp-platform.md index c13631546b..61756d2654 100644 --- a/docs/en/others/why-abp-platform.md +++ b/docs/en/others/why-abp-platform.md @@ -169,7 +169,7 @@ The learning curve is much lower than not using the ABP. That may sound surprisi ABP creates a full stack, production-ready, working solution for you in seconds. Many of the real-life problems are already solved and many fine tune configurations are already applied for the ASP.NET Core and the other used libraries. If you start from scratch, you will experience and learn all these details yourself to truly implement your solution. -ABP uses the industry standard frameworks, libraries and systems you already know (or need to learn to build a real-world product) like Angular, Blazor, MAUI, EF Core, AutoMapper, OpenIddict, Bootstrap, Redis, SignalR... etc. So, all your knowledge is directly re-usable with the ABP. ABP even simplifies using these libraries and systems and solves the integration problems. If you don't know these tools now, learning them will be easier within the ABP. +ABP uses the industry standard frameworks, libraries and systems you already know (or need to learn to build a real-world product) like Angular, Blazor, MAUI, EF Core, AutoMapper (switched to Mapperly due to licensing concerns), OpenIddict, Bootstrap, Redis, SignalR... etc. So, all your knowledge is directly re-usable with the ABP. ABP even simplifies using these libraries and systems and solves the integration problems. If you don't know these tools now, learning them will be easier within the ABP. ABP provides an excellent infrastructure to apply DDD principles and other best practices. It provides a lot of sweet abstractions and automation to reduce the repeating code. However, it doesn't force you to use or apply all these. A common mistake is to see that ABP has a lot of features, and it is hard to learn all of them. Having a lot of features is an advantage when you come to the point that you need them. However, you don't need to know a feature until you need it, and you can continue with the development approach you are used to. You can still write code as you are used to as if ABP doesn't provide all these benefits. Learning the ABP infrastructure is progressive. You will love it whenever you learn a new feature but can continue developing without knowing its existence. diff --git a/docs/en/release-info/migration-guides/AutoMapper-To-Mapperly.md b/docs/en/release-info/migration-guides/AutoMapper-To-Mapperly.md index 11112e2bc6..7356a6930b 100644 --- a/docs/en/release-info/migration-guides/AutoMapper-To-Mapperly.md +++ b/docs/en/release-info/migration-guides/AutoMapper-To-Mapperly.md @@ -56,7 +56,7 @@ public class ExampleAutoMapper : Profile And the Mapperly mapping class: ```csharp -[Mapper] +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] [MapExtraProperties] public partial class IdentityUserToIdentityUserDtoMapper : MapperBase { @@ -71,7 +71,7 @@ public partial class IdentityUserToIdentityUserDtoMapper : MapperBase { public override partial IdentityUserClaimDto Map(IdentityUserClaim source); @@ -79,7 +79,7 @@ public partial class IdentityUserClaimToIdentityUserClaimDtoMapper : MapperBase< public override partial void Map(IdentityUserClaim source, IdentityUserClaimDto destination); } -[Mapper] +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] [MapExtraProperties] public partial class OrganizationUnitToOrganizationUnitDtoMapper : MapperBase { @@ -87,7 +87,7 @@ public partial class OrganizationUnitToOrganizationUnitDtoMapper : MapperBase { public override partial OrganizationUnitRoleDto Map(OrganizationUnitRole source); @@ -97,7 +97,7 @@ public partial class OrganizationUnitRoleToOrganizationUnitRoleDtoMapper : TwoWa public override partial void ReverseMap(OrganizationUnitRoleDto destination, OrganizationUnitRole source); } -[Mapper] +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] [MapExtraProperties] public partial class OrganizationUnitToOrganizationUnitWithDetailsDtoMapper : MapperBase { @@ -110,7 +110,7 @@ public partial class OrganizationUnitToOrganizationUnitWithDetailsDtoMapper : Ma public override partial void Map(OrganizationUnit source, OrganizationUnitWithDetailsDto destination); } -[Mapper] +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] public partial class IdentityRoleToOrganizationUnitRoleDtoMapper : MapperBase { [MapProperty(nameof(IdentityRole.Id), nameof(OrganizationUnitRoleDto.RoleId))] @@ -120,7 +120,7 @@ public partial class IdentityRoleToOrganizationUnitRoleDtoMapper : MapperBase { [MapperIgnoreTarget(nameof(IdentityUserExportDto.Roles))] @@ -143,7 +143,7 @@ public partial class IdentityUserToIdentityUserExportDtoMapper : MapperBase { public IdentityUserToIdentityUserDtoMapper(MyService myService) @@ -173,6 +174,170 @@ public partial class IdentityUserToIdentityUserDtoMapper : MapperBase AI may generate some code that is not correct. Please check the code carefully. + +``` +Please help me migrate AutoMapper Profile classes to Mapperly. I have AutoMapper Profile files in my current workspace/context that need to be converted. + +**Conversion Requirements:** + +1. **Convert AutoMapper Profile to Mapperly Mappers**: Transform each `CreateMap` into a separate Mapperly mapper class +2. **Rename the file**: Change from `XXXAutoMapperProfile.cs` to `XXXMappers.cs` +3. **Use proper Mapperly attributes**: + - `[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)]` for each mapper class + - `[MapExtraProperties]` for classes that need extra properties mapping + - `[MapperIgnoreTarget]` for ignored properties + - `[MapProperty]` for custom property mappings +4. **Inherit from appropriate base classes**: + - `MapperBase` for one-way mapping + - `TwoWayMapperBase` for reverse mapping +5. **Handle complex mappings**: Use `AfterMap` method for complex transformations + +**Note:** The code below contains two parts - both are reference examples for you to understand the conversion pattern: +1. **AutoMapper Profile example** - shows the original AutoMapper code structure +2. **Mapperly Mappers example** - shows the expected converted Mapperly code structure + +Please convert the actual AutoMapper Profile files that exist in your current context/workspace, following the same conversion pattern as shown in these examples. + +**Reference Examples:** + +**1. AutoMapper Profile (original code):** + +using System; +using AutoMapper; +using System.Linq; +using Volo.Abp.AutoMapper; + +namespace Volo.Abp.Identity; + +public class ExampleAutoMapperProfile : Profile +{ + public ExampleAutoMapperProfile() + { + CreateMap() + .MapExtraProperties() + .Ignore(x => x.IsLockedOut) + .Ignore(x => x.SupportTwoFactor) + .Ignore(x => x.RoleNames); + + CreateMap(); + + CreateMap() + .MapExtraProperties(); + + CreateMap() + .ReverseMap(); + + CreateMap() + .ForMember(dest => dest.RoleId, src => src.MapFrom(r => r.Id)); + + CreateMap() + .ForMember(dest => dest.Active, src => src.MapFrom(r => r.IsActive ? "Yes" : "No")) + .ForMember(dest => dest.EmailConfirmed, src => src.MapFrom(r => r.EmailConfirmed ? "Yes" : "No")) + .ForMember(dest => dest.TwoFactorEnabled, src => src.MapFrom(r => r.TwoFactorEnabled ? "Yes" : "No")) + .ForMember(dest => dest.AccountLookout, src => src.MapFrom(r => r.LockoutEnd != null && r.LockoutEnd > DateTime.UtcNow ? "Yes" : "No")) + .Ignore(x => x.Roles); + } +} + +--- + +**2. Mapperly Mappers (converted code):** + +using System; +using System.Linq; +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; + +namespace Volo.Abp.Identity; + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties] +public partial class IdentityUserToIdentityUserDtoMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(IdentityUserDto.IsLockedOut))] + [MapperIgnoreTarget(nameof(IdentityUserDto.SupportTwoFactor))] + [MapperIgnoreTarget(nameof(IdentityUserDto.RoleNames))] + public override partial IdentityUserDto Map(IdentityUser source); + + [MapperIgnoreTarget(nameof(IdentityUserDto.IsLockedOut))] + [MapperIgnoreTarget(nameof(IdentityUserDto.SupportTwoFactor))] + [MapperIgnoreTarget(nameof(IdentityUserDto.RoleNames))] + public override partial void Map(IdentityUser source, IdentityUserDto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +public partial class IdentityUserClaimToIdentityUserClaimDtoMapper : MapperBase +{ + public override partial IdentityUserClaimDto Map(IdentityUserClaim source); + + public override partial void Map(IdentityUserClaim source, IdentityUserClaimDto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties] +public partial class OrganizationUnitToOrganizationUnitDtoMapper : MapperBase +{ + public override partial OrganizationUnitDto Map(OrganizationUnit source); + public override partial void Map(OrganizationUnit source, OrganizationUnitDto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +public partial class OrganizationUnitRoleToOrganizationUnitRoleDtoMapper : TwoWayMapperBase +{ + public override partial OrganizationUnitRoleDto Map(OrganizationUnitRole source); + public override partial void Map(OrganizationUnitRole source, OrganizationUnitRoleDto destination); + + public override partial OrganizationUnitRole ReverseMap(OrganizationUnitRoleDto destination); + public override partial void ReverseMap(OrganizationUnitRoleDto destination, OrganizationUnitRole source); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties] +public partial class OrganizationUnitToOrganizationUnitWithDetailsDtoMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(OrganizationUnitWithDetailsDto.Roles))] + [MapperIgnoreTarget(nameof(OrganizationUnitWithDetailsDto.UserCount))] + public override partial OrganizationUnitWithDetailsDto Map(OrganizationUnit source); + + [MapperIgnoreTarget(nameof(OrganizationUnitWithDetailsDto.Roles))] + [MapperIgnoreTarget(nameof(OrganizationUnitWithDetailsDto.UserCount))] + public override partial void Map(OrganizationUnit source, OrganizationUnitWithDetailsDto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +public partial class IdentityRoleToOrganizationUnitRoleDtoMapper : MapperBase +{ + [MapProperty(nameof(IdentityRole.Id), nameof(OrganizationUnitRoleDto.RoleId))] + public override partial OrganizationUnitRoleDto Map(IdentityRole source); + + [MapProperty(nameof(IdentityRole.Id), nameof(OrganizationUnitRoleDto.RoleId))] + public override partial void Map(IdentityRole source, OrganizationUnitRoleDto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +public partial class IdentityUserToIdentityUserExportDtoMapper : MapperBase +{ + [MapperIgnoreTarget(nameof(IdentityUserExportDto.Roles))] + public override partial IdentityUserExportDto Map(IdentityUser source); + + [MapperIgnoreTarget(nameof(IdentityUserExportDto.Roles))] + public override partial void Map(IdentityUser source, IdentityUserExportDto destination); + + public override void AfterMap(IdentityUser source, IdentityUserExportDto destination) + { + destination.Active = source.IsActive ? "Yes" : "No"; + destination.EmailConfirmed = source.EmailConfirmed ? "Yes" : "No"; + destination.TwoFactorEnabled = source.TwoFactorEnabled ? "Yes" : "No"; + destination.AccountLookout = source.LockoutEnd != null && source.LockoutEnd > DateTime.UtcNow ? "Yes" : "No"; + } +} +``` + ## Mapperly Documentation Please refer to the [Mapperly documentation](https://mapperly.riok.app/docs/intro/) for more details. diff --git a/docs/en/release-info/migration-guides/pro/openiddict-microservice.md b/docs/en/release-info/migration-guides/pro/openiddict-microservice.md index 818a8c368a..33c319111b 100644 --- a/docs/en/release-info/migration-guides/pro/openiddict-microservice.md +++ b/docs/en/release-info/migration-guides/pro/openiddict-microservice.md @@ -472,17 +472,12 @@ In `appsettings.json` replace **IdentityServer** section with **OpenIddict** and typeof(AbpOpenIddictProWebModule), ``` -- In **IdentityServiceWebModule.cs** add object mapping configurations: +- In **IdentityServiceWebModule.cs** add object mapping configurations for [Mapperly](https://mapperly.riok.app/) (if you are using an another mapping providers, see the [Object to Object Mapping](../../../framework/infrastructure/object-to-object-mapping.md) documentation): ```csharp - context.Services.AddAutoMapperObjectMapper(); - Configure(options => - { - options.AddMaps(validate: true); - }); + context.Services.AddMapperlyObjectMapper(); ``` - ### Shared Hosting Module - In **MyApplicationSharedHostingModule** replace the **database configuration**: diff --git a/docs/en/solution-templates/guide.md b/docs/en/solution-templates/guide.md index cb14f57ef3..ded0c49f20 100644 --- a/docs/en/solution-templates/guide.md +++ b/docs/en/solution-templates/guide.md @@ -27,7 +27,7 @@ Besides the overall solution structure, the internals of each project in a solut ### Library Integrations & Configurations -When you use ABP startup solution templates to create a new solution, some **fundamental library installations** ([Serilog](https://serilog.net/), [Autofac](https://autofac.org/), [AutoMapper](https://automapper.org/), [Swagger](https://swagger.io/), [HealthCheck](https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks) and others..) and their fine-tuned configurations are already prepared for you. Also, required **[ABP packages](https://abp.io/packages)** are just installed based on your preferences and configured for **development and production environments**. +When you use ABP startup solution templates to create a new solution, some **fundamental library installations** ([Serilog](https://serilog.net/), [Autofac](https://autofac.org/), [Mapperly](https://mapperly.riok.app/), [Swagger](https://swagger.io/), [HealthCheck](https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks) and others..) and their fine-tuned configurations are already prepared for you. Also, required **[ABP packages](https://abp.io/packages)** are just installed based on your preferences and configured for **development and production environments**. ### Development Ready diff --git a/docs/en/tutorials/book-store/part-01.md b/docs/en/tutorials/book-store/part-01.md index 6b856d9687..4634a68c67 100644 --- a/docs/en/tutorials/book-store/part-01.md +++ b/docs/en/tutorials/book-store/part-01.md @@ -291,22 +291,17 @@ public class BookDto : AuditedEntityDto * The `BookDto` is used to transfer the book data to the presentation layer in order to show the book information on the UI. * The `BookDto` is derived from the `AuditedEntityDto` which has audit properties just like the `Book` entity defined above. -It will be needed to map the `Book` entities to the `BookDto` objects while returning books to the presentation layer. [AutoMapper](https://automapper.org) library can automate this conversion when you define the proper mapping. The startup template comes with AutoMapper pre-configured. So, you can just define the mapping in the `BookStoreApplicationAutoMapperProfile` class in the `Acme.BookStore.Application` project: +It will be needed to map the `Book` entities to the `BookDto` objects while returning books to the presentation layer. [Mapperly](https://mapperly.riok.app/) library can automate this conversion when you define the proper mapping. The startup template comes with Mapperly pre-configured. So, you can just define the mapping in the `BookStoreApplicationMappers` class in the `Acme.BookStore.Application` project: -````csharp -using Acme.BookStore.Books; -using AutoMapper; - -namespace Acme.BookStore; - -public class BookStoreApplicationAutoMapperProfile : Profile +```csharp +[Mapper] +public partial class BookToBookDtoMapper : MapperBase { - public BookStoreApplicationAutoMapperProfile() - { - CreateMap(); - } + public override partial BookDto Map(Book source); + + public override partial void Map(Book source, BookDto destination); } -```` +``` > See the [object to object mapping](../../framework/infrastructure/object-to-object-mapping.md) document for details. @@ -343,21 +338,23 @@ public class CreateUpdateBookDto As done to the `BookDto` above, we should define the mapping from the `CreateUpdateBookDto` object to the `Book` entity. The final class will be as shown below: -````csharp -using Acme.BookStore.Books; -using AutoMapper; +```csharp +[Mapper] +public partial class BookToBookDtoMapper : MapperBase +{ + public override partial BookDto Map(Book source); -namespace Acme.BookStore; + public override partial void Map(Book source, BookDto destination); +} -public class BookStoreApplicationAutoMapperProfile : Profile +[Mapper] +public partial class CreateUpdateBookDtoToBookMapper : MapperBase { - public BookStoreApplicationAutoMapperProfile() - { - CreateMap(); - CreateMap(); - } + public override partial Book Map(CreateUpdateBookDto source); + + public override partial void Map(CreateUpdateBookDto source, Book destination); } -```` +``` ### IBookAppService @@ -416,7 +413,7 @@ public class BookAppService : * `BookAppService` is derived from `CrudAppService<...>` which implements all the CRUD (create, read, update, delete) methods defined by the `ICrudAppService`. * `BookAppService` injects `IRepository` which is the default repository for the `Book` entity. ABP automatically creates default repositories for each aggregate root (or entity). See the [repository document](../../framework/architecture/domain-driven-design/repositories.md). -* `BookAppService` uses `IObjectMapper` service ([see](../../framework/infrastructure/object-to-object-mapping.md)) to map the `Book` objects to the `BookDto` objects and `CreateUpdateBookDto` objects to the `Book` objects. The Startup template uses the [AutoMapper](http://automapper.org/) library as the object mapping provider. We have defined the mappings before, so it will work as expected. +* `BookAppService` uses `IObjectMapper` service ([see](../../framework/infrastructure/object-to-object-mapping.md)) to map the `Book` objects to the `BookDto` objects and `CreateUpdateBookDto` objects to the `Book` objects. The Startup template uses the [Mapperly](https://mapperly.riok.app/) library as the object mapping provider. We have defined the mappings before, so it will work as expected. ## Auto API Controllers diff --git a/docs/en/tutorials/book-store/part-03.md b/docs/en/tutorials/book-store/part-03.md index 45444ee76f..e67353b1fa 100644 --- a/docs/en/tutorials/book-store/part-03.md +++ b/docs/en/tutorials/book-store/part-03.md @@ -298,23 +298,17 @@ public class EditModalModel : BookStorePageModel ### Mapping from BookDto to CreateUpdateBookDto -To be able to map the `BookDto` to `CreateUpdateBookDto`, configure a new mapping. To do this, open the `BookStoreWebAutoMapperProfile.cs` file in the `Acme.BookStore.Web` project and change it as shown below: +To be able to map the `BookDto` to `CreateUpdateBookDto`, configure a new mapping. To do this, open the `BookStoreWebMappers.cs` file in the `Acme.BookStore.Web` project and change it as shown below: -````csharp -using AutoMapper; - -namespace Acme.BookStore.Web; - -public class BookStoreWebAutoMapperProfile : Profile +```csharp +[Mapper] +public partial class BookDtoToCreateUpdateBookDtoMapper : MapperBase { - public BookStoreWebAutoMapperProfile() - { - CreateMap(); - } -} -```` + public override partial CreateUpdateBookDto Map(BookDto source); -* We have just added `CreateMap();` to define this mapping. + public override partial void Map(BookDto source, CreateUpdateBookDto destination); +} +``` > Notice that we do the mapping definition in the web layer as a best practice since it is only needed in this layer. @@ -1288,28 +1282,26 @@ We can now define a modal to edit the book. Add the following code to the end of ```` -### AutoMapper Configuration +### Mapperly Configuration The base `AbpCrudPageBase` uses the [object to object mapping](../../framework/infrastructure/object-to-object-mapping.md) system to convert an incoming `BookDto` object to a `CreateUpdateBookDto` object. So, we need to define the mapping. -Open the `BookStoreBlazorAutoMapperProfile` inside the {{ if UI == "BlazorServer" }}`Acme.BookStore.Blazor` {{ else if UI == "MAUIBlazor" }}`Acme.BookStore.MauiBlazor` {{ else }}`Acme.BookStore.Blazor.Client`{{ end }} project and change the content as the following: +Open the `BookStoreBlazorMappers` inside the {{ if UI == "BlazorServer" }}`Acme.BookStore.Blazor` {{ else if UI == "MAUIBlazor" }}`Acme.BookStore.MauiBlazor` {{ else }}`Acme.BookStore.Blazor.Client`{{ end }} project and change the content as the following: -````csharp -using Acme.BookStore.Books; -using AutoMapper; +```csharp +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; {{ if UI == "BlazorServer" }}namespace Acme.BookStore.Blazor; {{ else if UI == "MAUIBlazor" }}namespace Acme.BookStore.MauiBlazor; {{ else }}namespace Acme.BookStore.Blazor.Client;{{ end }} -public class BookStoreBlazorAutoMapperProfile : Profile +[Mapper] +public partial class BookDtoToCreateUpdateBookDtoMapper : MapperBase { - public BookStoreBlazorAutoMapperProfile() - { - CreateMap(); - } -} -```` + public override partial CreateUpdateBookDto Map(BookDto source); -* We've just added the `CreateMap();` line to define the mapping. + public override partial void Map(BookDto source, CreateUpdateBookDto destination); +} +``` ### Test the Editing Modal diff --git a/docs/en/tutorials/book-store/part-08.md b/docs/en/tutorials/book-store/part-08.md index a7d73f0209..ac49c6aee4 100644 --- a/docs/en/tutorials/book-store/part-08.md +++ b/docs/en/tutorials/book-store/part-08.md @@ -193,7 +193,7 @@ public async Task GetAsync(Guid id) } ```` -This method simply gets the `Author` entity by its `Id`, converts to the `AuthorDto` using the [object to object mapper](../../framework/infrastructure/object-to-object-mapping.md). This requires to configure the AutoMapper, which will be explained later. +This method simply gets the `Author` entity by its `Id`, converts to the `AuthorDto` using the [object to object mapper](../../framework/infrastructure/object-to-object-mapping.md). This requires to configure the Mapperly, which will be explained later. ### GetListAsync @@ -350,12 +350,18 @@ Finally, add the following entries to the `Localization/BookStore/en.json` insid ## Object to Object Mapping -`AuthorAppService` is using the `ObjectMapper` to convert the `Author` objects to `AuthorDto` objects. So, we need to define this mapping in the AutoMapper configuration. +`AuthorAppService` is using the `ObjectMapper` to convert the `Author` objects to `AuthorDto` objects. So, we need to define this mapping in the Mapperly configuration. -Open the `BookStoreApplicationAutoMapperProfile` class inside the `Acme.BookStore.Application` project and add the following line to the constructor: +Open the `BookStoreApplicationMappers` class inside the `Acme.BookStore.Application` project and define the following mapping class: ````csharp -CreateMap(); +[Mapper] +public partial class AuthorToAuthorDtoMapper : MapperBase +{ + public override partial AuthorDto Map(Author source); + + public override partial void Map(Author source, AuthorDto destination); +} ```` ## Data Seeder diff --git a/docs/en/tutorials/book-store/part-09.md b/docs/en/tutorials/book-store/part-09.md index 06db5f37d9..18ecd2726d 100644 --- a/docs/en/tutorials/book-store/part-09.md +++ b/docs/en/tutorials/book-store/part-09.md @@ -335,27 +335,16 @@ The main reason of this decision was to show you how to use a different model cl * Added `[DataType(DataType.Date)]` attribute to the `BirthDate` which shows a date picker on the UI for this property. * Added `[TextArea]` attribute to the `ShortBio` which shows a multi-line text area instead of a standard textbox. -In this way, you can specialize the view model class based on your UI requirements without touching to the DTO. As a result of this decision, we have used `ObjectMapper` to map `CreateAuthorViewModel` to `CreateAuthorDto`. To be able to do that, you need to add a new mapping code to the `BookStoreWebAutoMapperProfile` constructor: +In this way, you can specialize the view model class based on your UI requirements without touching to the DTO. As a result of this decision, we have used `ObjectMapper` to map `CreateAuthorViewModel` to `CreateAuthorDto`. To be able to do that, you need to define a new mapping configuration in the `BookStoreWebMappers` class: -````csharp -using Acme.BookStore.Authors; // ADDED NAMESPACE IMPORT -using Acme.BookStore.Books; -using AutoMapper; - -namespace Acme.BookStore.Web; - -public class BookStoreWebAutoMapperProfile : Profile +```csharp +[Mapper] +public partial class CreateAuthorViewModelToCreateAuthorDtoMapper : MapperBase { - public BookStoreWebAutoMapperProfile() - { - CreateMap(); - - // ADD a NEW MAPPING - CreateMap(); - } + public override partial CreateAuthorDto Map(Pages.Authors.CreateModalModel.CreateAuthorViewModel source); + public override partial void Map(Pages.Authors.CreateModalModel.CreateAuthorViewModel source, CreateAuthorDto destination); } -```` +``` "New author" button will work as expected and open a new model when you run the application again: @@ -456,29 +445,22 @@ This class is similar to the `CreateModal.cshtml.cs` while there are some main d * Uses the `IAuthorAppService.GetAsync(...)` method to get the editing author from the application layer. * `EditAuthorViewModel` has an additional `Id` property which is marked with the `[HiddenInput]` attribute that creates a hidden input for this property. -This class requires to add two object mapping declarations to the `BookStoreWebAutoMapperProfile` class: +This class requires to add two object mapping declarations, so open the `BookStoreWebMappers` class and add the following mappings: ```csharp -using Acme.BookStore.Authors; -using Acme.BookStore.Books; -using AutoMapper; - -namespace Acme.BookStore.Web; - -public class BookStoreWebAutoMapperProfile : Profile +[Mapper] +public partial class AuthorDtoToEditAuthorViewModelMapper : MapperBase { - public BookStoreWebAutoMapperProfile() - { - CreateMap(); + public override partial EditAuthorViewModel Map(AuthorDto source); - CreateMap(); + public override partial void Map(AuthorDto source, EditAuthorViewModel destination); +} - // ADD THESE NEW MAPPINGS - CreateMap(); - CreateMap(); - } +[Mapper] +public partial class EditAuthorViewModelToUpdateAuthorDtoMapper : MapperBase +{ + public override partial UpdateAuthorDto Map(Pages.Authors.EditModalModel.EditAuthorViewModel source); + public override partial void Map(Pages.Authors.EditModalModel.EditAuthorViewModel source, UpdateAuthorDto destination); } ``` @@ -1220,13 +1202,23 @@ This class typically defines the properties and methods used by the `Authors.raz `Authors` class uses the `IObjectMapper` in the `OpenEditAuthorModal` method. So, we need to define this mapping. -Open the `BookStoreBlazorAutoMapperProfile.cs` in the {{ if UI == "BlazorServer" }}`Acme.BookStore.Blazor`{{ else if UI == "MAUIBlazor" }}`Acme.BookStore.MauiBlazor`{{ else }}`Acme.BookStore.Blazor.Client`{{ end }} project and add the following mapping code in the constructor: +Open the `BookStoreBlazorMappers.cs` in the {{ if UI == "BlazorServer" }}`Acme.BookStore.Blazor`{{ else if UI == "MAUIBlazor" }}`Acme.BookStore.MauiBlazor`{{ else }}`Acme.BookStore.Blazor.Client`{{ end }} project and add the following mappings in the class: -````csharp -CreateMap(); -```` +```csharp +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; +using Acme.BookStore.Authors; + +//... + +[Mapper] +public partial class AuthorDtoToUpdateAuthorDtoMapper : MapperBase +{ + public override partial UpdateAuthorDto Map(AuthorDto source); -You will need to declare a `using Acme.BookStore.Authors;` statement to the beginning of the file. + public override partial void Map(AuthorDto source, UpdateAuthorDto destination); +} +``` ### Add to the Main Menu diff --git a/docs/en/tutorials/book-store/part-10.md b/docs/en/tutorials/book-store/part-10.md index d4137e3681..02d1f81aba 100644 --- a/docs/en/tutorials/book-store/part-10.md +++ b/docs/en/tutorials/book-store/part-10.md @@ -578,11 +578,17 @@ Let's see the changes we've done: ### Object to Object Mapping Configuration -Introduced the `AuthorLookupDto` class and used object mapping inside the `GetAuthorLookupAsync` method. So, we need to add a new mapping definition inside the `BookStoreApplicationAutoMapperProfile.cs` file of the `Acme.BookStore.Application` project: +Introduced the `AuthorLookupDto` class and used object mapping inside the `GetAuthorLookupAsync` method. So, we need to add a new mapping definition inside the `BookStoreApplicationMappers.cs` file of the `Acme.BookStore.Application` project: -````csharp -CreateMap(); -```` +```csharp +[Mapper] +public partial class AuthorToAuthorLookupDtoMapper : MapperBase +{ + public override partial AuthorLookupDto Map(Author source); + + public override partial void Map(Author source, AuthorLookupDto destination); +} +``` ## Unit Tests @@ -898,12 +904,37 @@ These changes require a small change in the `EditModal.cshtml`. Remove the `(); -CreateMap(); -CreateMap(); +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; + +//... + +[Mapper] +public partial class CreateBookViewModelToCreateUpdateBookDtoMapper : MapperBase +{ + public override partial CreateUpdateBookDto Map(Pages.Books.CreateModalModel.CreateBookViewModel source); + + public override partial void Map(Pages.Books.CreateModalModel.CreateBookViewModel source, CreateUpdateBookDto destination); +} + +[Mapper] +public partial class BookDtoToEditBookViewModelMapper : MapperBase +{ + public override partial Pages.Books.EditModalModel.EditBookViewModel Map(BookDto source); + + public override partial void Map(BookDto source, Pages.Books.EditModalModel.EditBookViewModel destination); +} + +[Mapper] +public partial class EditBookViewModelToCreateUpdateBookDtoMapper : MapperBase +{ + public override partial CreateUpdateBookDto Map(Pages.Books.EditModalModel.EditBookViewModel source); + + public override partial void Map(Pages.Books.EditModalModel.EditBookViewModel source, CreateUpdateBookDto destination); +} ``` You can run the application and try to create a new book or update an existing book. You will see a drop down list on the create/update form to select the author of the book: diff --git a/docs/en/tutorials/microservice/part-05.md b/docs/en/tutorials/microservice/part-05.md index 9c037617a1..e72e94fc66 100644 --- a/docs/en/tutorials/microservice/part-05.md +++ b/docs/en/tutorials/microservice/part-05.md @@ -255,21 +255,20 @@ public class OrderAppService : ApplicationService, IOrderAppService In this code snippet, we inject the `IRepository` into the `OrderAppService` class. We use this repository to interact with the `Order` entity. The `GetListAsync` method retrieves a list of orders from the database and maps them to the `OrderDto` class. The `CreateAsync` method creates a new order entity and inserts it into the database. -Afterward, we need to configure the *AutoMapper* object to map the `Order` entity to the `OrderDto` class. Open the `OrderingServiceApplicationAutoMapperProfile` class in the `CloudCrm.OrderingService` project, located in the `ObjectMapping` folder, and add the following code: +Afterward, we need to configure the *Mapperly* object to map the `Order` entity to the `OrderDto` class. Open the `OrderingServiceApplicationMappers` class in the `CloudCrm.OrderingService` project, located in the `ObjectMapping` folder, and add the following code: ```csharp -using AutoMapper; -using CloudCrm.OrderingService.Entities; -using CloudCrm.OrderingService.Services; +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; namespace CloudCrm.OrderingService.ObjectMapping; -public class OrderingServiceApplicationAutoMapperProfile : Profile +[Mapper] +public partial class OrderingServiceApplicationMappers : MapperBase { - public OrderingServiceApplicationAutoMapperProfile() - { - CreateMap(); - } + public override partial OrderDto Map(Order source); + + public override partial void Map(Order source, OrderDto destination); } ``` diff --git a/docs/en/tutorials/microservice/part-06.md b/docs/en/tutorials/microservice/part-06.md index e5a8f53fe5..f268ba6fff 100644 --- a/docs/en/tutorials/microservice/part-06.md +++ b/docs/en/tutorials/microservice/part-06.md @@ -216,25 +216,25 @@ public class OrderDto } ``` -Lastly, open the `OrderingServiceApplicationAutoMapperProfile` class (the `OrderingServiceApplicationAutoMapperProfile.cs` file under the `ObjectMapping` folder of the `CloudCrm.OrderingService` project of the `CloudCrm.OrderingService` .NET solution) and ignore the `ProductName` property in the mapping configuration: +Lastly, open the `OrderingServiceApplicationMappers` class (the `OrderingServiceApplicationMappers.cs` file under the `ObjectMapping` folder of the `CloudCrm.OrderingService` project of the `CloudCrm.OrderingService` .NET solution) and ignore the `ProductName` property in the mapping configuration: ```csharp -using AutoMapper; -using CloudCrm.OrderingService.Entities; -using CloudCrm.OrderingService.Services; -using Volo.Abp.AutoMapper; +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; namespace CloudCrm.OrderingService.ObjectMapping; -public class OrderingServiceApplicationAutoMapperProfile : Profile +[Mapper] +public partial class OrderingServiceApplicationMappers : MapperBase { - public OrderingServiceApplicationAutoMapperProfile() - { - CreateMap() - .Ignore(x => x.ProductName); // New line - } + [MapperIgnoreTarget(nameof(OrderDto.ProductName))] + public override partial OrderDto Map(Order source); + + [MapperIgnoreTarget(nameof(OrderDto.ProductName))] + public override partial void Map(Order source, OrderDto destination); } ``` + Let's explain the changes we made: - We added a new property named `ProductName` to the `OrderDto` class. This property will hold the product name. diff --git a/docs/en/tutorials/modular-crm/part-03.md b/docs/en/tutorials/modular-crm/part-03.md index fb19277895..bbb0339b50 100644 --- a/docs/en/tutorials/modular-crm/part-03.md +++ b/docs/en/tutorials/modular-crm/part-03.md @@ -323,23 +323,17 @@ Notice that `ProductAppService` class implements the `IProductAppService` and al #### Object Mapping -`ProductAppService.GetListAsync` method uses the `ObjectMapper` service to convert `Product` entities to `ProductDto` objects. The mapping should be configured. Open the `CatalogAutoMapperProfile` class in the `ModularCrm.Catalog` project and change it to the following code block: +`ProductAppService.GetListAsync` method uses the `ObjectMapper` service to convert `Product` entities to `ProductDto` objects. The mapping should be configured. So, create a new mapping class in the `ModularCrm.Catalog` project that implements the `MapperBase` class with the `[Mapper]` attribute as follows: -````csharp -using AutoMapper; - -namespace ModularCrm.Catalog; - -public class CatalogAutoMapperProfile : Profile +```csharp +[Mapper] +public partial class ProductToProductDtoMapper : MapperBase { - public CatalogAutoMapperProfile() - { - CreateMap(); - } -} -```` + public override partial ProductDto Map(Product source); -We've added the `CreateMap();` line to define the mapping. + public override partial void Map(Product source, ProductDto destination); +} +``` ### Exposing Application Services as HTTP API Controllers diff --git a/docs/en/tutorials/modular-crm/part-05.md b/docs/en/tutorials/modular-crm/part-05.md index d2082667aa..46a693a963 100644 --- a/docs/en/tutorials/modular-crm/part-05.md +++ b/docs/en/tutorials/modular-crm/part-05.md @@ -283,21 +283,17 @@ The new files under the `ModularCrm.Ordering.Contracts` project should be like t ### Implementing the Application Service -First we configure the *AutoMapper* to map the `Order` entity to the `OrderDto` object, because we will need it later. Open the `OrderingAutoMapperProfile` under the `ModularCrm.Ordering` project: +First, create a new mapping class (under the `ModularCrm.Ordering` project) that implements the `MapperBase` class with the `[Mapper]` attribute to map `Order` entities to `OrderDto` objects as follows, because we will need it later: -````csharp -using AutoMapper; - -namespace ModularCrm.Ordering; - -public class OrderingAutoMapperProfile : Profile +```csharp +[Mapper] +public partial class OrderToOrderDtoMapper : MapperBase { - public OrderingAutoMapperProfile() - { - CreateMap(); - } + public override partial OrderDto Map(Order source); + + public override partial void Map(Order source, OrderDto destination); } -```` +``` Now, you can implement the `IOrderAppService` interface. Create an `OrderAppService` class under the `ModularCrm.Ordering` project: diff --git a/docs/en/tutorials/modular-crm/part-06.md b/docs/en/tutorials/modular-crm/part-06.md index b685d72960..1c04cd56d1 100644 --- a/docs/en/tutorials/modular-crm/part-06.md +++ b/docs/en/tutorials/modular-crm/part-06.md @@ -217,21 +217,17 @@ public class OrderDto } ```` -Lastly, open the `OrderingAutoMapperProfile` class (the `OrderingAutoMapperProfile.cs` file under the `Services` folder of the `ModularCrm.Ordering` project of the `ModularCrm.Ordering` .NET solution) and ignore the `ProductName` property in the mapping configuration: +Lastly, open the `OrderingApplicationMappers` class (the `OrderingApplicationMappers.cs` file under the `Services` folder of the `ModularCrm.Ordering` project of the `ModularCrm.Ordering` .NET solution) and add the following mapping class: ````csharp -using AutoMapper; -using Volo.Abp.AutoMapper; - -namespace ModularCrm.Ordering; - -public class OrderingApplicationAutoMapperProfile : Profile +[Mapper] +public partial class OrderToOrderDtoMapper : MapperBase { - public OrderingApplicationAutoMapperProfile() - { - CreateMap() - .Ignore(x => x.ProductName); // New line - } + [MapperIgnoreTarget(nameof(OrderDto.ProductName))] + public override partial OrderDto Map(Order source); + + [MapperIgnoreTarget(nameof(OrderDto.ProductName))] + public override partial void Map(Order source, OrderDto destination); } ```` diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs index 803f208d8a..1791a5e928 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs @@ -69,6 +69,7 @@ public class AddModuleCommand : IConsoleCommand, ITransientDependency var newProTemplate = !string.IsNullOrEmpty(template) && template == ModuleProTemplate.TemplateName; var withSourceCode = newTemplate || newProTemplate || commandLineArgs.Options.ContainsKey(Options.SourceCode.Long); var addSourceCodeToSolutionFile = withSourceCode && commandLineArgs.Options.ContainsKey("add-to-solution-file"); + var skipOpeningDocumentation = commandLineArgs.Options.ContainsKey(Options.SkipOpeningDocumentation.Long); var skipDbMigrations = newTemplate || newProTemplate || commandLineArgs.Options.ContainsKey(Options.DbMigrations.Skip); var solutionFile = GetSolutionFile(commandLineArgs); @@ -98,7 +99,8 @@ public class AddModuleCommand : IConsoleCommand, ITransientDependency withSourceCode, addSourceCodeToSolutionFile, newTemplate, - newProTemplate + newProTemplate, + skipOpeningDocumentation ); _lastAddedModuleInfo = new AddModuleInfoOutput @@ -223,5 +225,10 @@ public class AddModuleCommand : IConsoleCommand, ITransientDependency public const string Short = "t"; public const string Long = "template"; } + + public class SkipOpeningDocumentation + { + public const string Long = "skip-opening-documentation"; + } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs index f996247217..aecc1ad222 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/AngularSourceCodeAdder.cs @@ -14,11 +14,11 @@ namespace Volo.Abp.Cli.ProjectModification; public class AngularSourceCodeAdder : ITransientDependency { - public ILogger Logger { get; set; } + public ILogger Logger { get; set; } public AngularSourceCodeAdder() { - Logger = NullLogger.Instance; + Logger = NullLogger.Instance; } public async Task AddFromModuleAsync(string solutionFilePath, string angularPath) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 1c6a2abd3f..8a703a8deb 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -98,7 +98,8 @@ public class SolutionModuleAdder : ITransientDependency bool withSourceCode = false, bool addSourceCodeToSolutionFile = false, bool newTemplate = false, - bool newProTemplate = false) + bool newProTemplate = false, + bool skipOpeningDocumentation = false) { Check.NotNull(solutionFile, nameof(solutionFile)); Check.NotNull(moduleName, nameof(moduleName)); @@ -159,10 +160,13 @@ public class SolutionModuleAdder : ITransientDependency await SetLeptonXAbpVersionsAsync(solutionFile, Path.Combine(modulesFolderInSolution, module.Name)); } - var documentationLink = module.GetFirstDocumentationLinkOrNull(); - if (documentationLink != null) + if (!skipOpeningDocumentation) { - CmdHelper.Open(documentationLink); + var documentationLink = module.GetFirstDocumentationLinkOrNull(); + if (documentationLink != null) + { + CmdHelper.Open(documentationLink); + } } return module; diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs index d9fae16e16..0f83fcced7 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ConventionalRegistrarBase.cs @@ -19,16 +19,15 @@ public abstract class ConventionalRegistrarBase : IConventionalRegistrar { types = AssemblyHelper .GetAllTypes(assembly) - .Where( - type => type != null && - type.IsClass && - !type.IsAbstract && - !type.IsGenericType - ).ToArray(); + .Where(type => type != null && type.IsClass && !type.IsAbstract && !type.IsGenericType) + .ToArray(); } catch (ReflectionTypeLoadException e) { - types = e.Types.Select(x => x!).ToArray(); + types = e.Types + .Where(type => type != null && type.IsClass && !type.IsAbstract && !type.IsGenericType) + .Select(x => x!) + .ToArray(); logger.LogException(e); } catch (Exception e) diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs index bf017d041e..85c47c738d 100644 --- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs +++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs @@ -26,6 +26,16 @@ public class ObjectToInferredTypesConverter : JsonConverter public override void Write( Utf8JsonWriter writer, object objectToWrite, - JsonSerializerOptions options) => - JsonSerializer.Serialize(writer, objectToWrite, objectToWrite.GetType(), options); + JsonSerializerOptions options) + { + var runtimeType = objectToWrite.GetType(); + if (runtimeType == typeof(object)) + { + writer.WriteStartObject(); + writer.WriteEndObject(); + return; + } + + JsonSerializer.Serialize(writer, objectToWrite, runtimeType, options); + } } diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs index e4b66148a5..f065f0e695 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Text.Json; using Microsoft.Extensions.Localization; @@ -47,12 +48,11 @@ public static class JsonLocalizationDictionaryBuilder { throw new AbpException("Can not parse json string. " + ex.Message); } - if (jsonFile == null) { return null; } - + var cultureCode = jsonFile.Culture; if (string.IsNullOrEmpty(cultureCode)) { @@ -61,18 +61,17 @@ public static class JsonLocalizationDictionaryBuilder var dictionary = new Dictionary(); var dublicateNames = new List(); - foreach (var item in jsonFile.Texts) + + foreach (var item in FlattenTexts(jsonFile.Texts)) { if (string.IsNullOrEmpty(item.Key)) { throw new AbpException("The key is empty in given json string."); } - if (dictionary.GetOrDefault(item.Key) != null) { dublicateNames.Add(item.Key); } - dictionary[item.Key] = new LocalizedString(item.Key, item.Value.NormalizeLineEndings()); } @@ -85,4 +84,67 @@ public static class JsonLocalizationDictionaryBuilder return new StaticLocalizationDictionary(cultureCode, dictionary); } + + private static Dictionary FlattenTexts(Dictionary texts, string prefix = "") + { + var result = new Dictionary(); + foreach (var text in texts) + { + var currentKey = string.IsNullOrEmpty(prefix) ? text.Key : $"{prefix}__{text.Key}"; + switch (text.Value) + { + case JsonElement jsonElement: + foreach (var item in FlattenJsonElement(jsonElement, currentKey)) + { + result[item.Key] = item.Value; + } + break; + case string str: + result[currentKey] = str; + break; + case null: + result[currentKey] = ""; + break; + default: + result[currentKey] = text.Value.ToString() ?? ""; + break; + } + } + return result; + } + + private static IEnumerable> FlattenJsonElement(JsonElement element, string prefix) + { + switch (element.ValueKind) + { + case JsonValueKind.String: + yield return new KeyValuePair(prefix, element.GetString() ?? ""); + break; + case JsonValueKind.Object: + foreach (var prop in element.EnumerateObject()) + { + var newKey = $"{prefix}__{prop.Name}"; + foreach (var item in FlattenJsonElement(prop.Value, newKey)) + { + yield return item; + } + } + break; + case JsonValueKind.Array: + var i = 0; + foreach (var prop in element.EnumerateArray()) + { + var newKey = $"{prefix}__{i}"; + foreach (var item in FlattenJsonElement(prop, newKey)) + { + yield return item; + } + i++; + } + break; + default: + yield return new KeyValuePair(prefix, element.ToString()); + break; + } + } } diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs index 8470e2696f..337a03a31e 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationFile.cs @@ -9,10 +9,5 @@ public class JsonLocalizationFile /// public string Culture { get; set; } = default!; - public Dictionary Texts { get; set; } - - public JsonLocalizationFile() - { - Texts = new Dictionary(); - } + public Dictionary Texts { get; set; } = []; } diff --git a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyModule.cs b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyModule.cs index f879354ed3..60381163eb 100644 --- a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyModule.cs +++ b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/AbpMapperlyModule.cs @@ -1,6 +1,4 @@ -using System; -using System.Linq; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Auditing; using Volo.Abp.Modularity; using Volo.Abp.ObjectExtending; @@ -22,23 +20,6 @@ public class AbpMapperlyModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { - // This is the temporary solution, We will remove it in when all apps are migrated to Mapperly. - var disableMapperlyAutoObjectMappingProvider = false; - - var modules = context.Services.GetSingletonInstance().Modules.ToList(); - var autoMapperModuleIndex = modules.FindIndex(x => x.Type.FullName!.Equals("Volo.Abp.AutoMapper.AbpAutoMapperModule", StringComparison.OrdinalIgnoreCase)); - if (autoMapperModuleIndex >= 0) - { - var mapperlyModuleIndex = modules.FindIndex(x => x.Type == typeof(AbpMapperlyModule)); - if (mapperlyModuleIndex > autoMapperModuleIndex) - { - disableMapperlyAutoObjectMappingProvider = true; - } - } - - if (!disableMapperlyAutoObjectMappingProvider) - { - context.Services.AddMapperlyObjectMapper(); - } + context.Services.AddMapperlyObjectMapper(); } } diff --git a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs index 80f959710d..3876ee09a1 100644 --- a/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs +++ b/framework/src/Volo.Abp.Mapperly/Volo/Abp/Mapperly/MapperlyAutoObjectMappingProvider.cs @@ -9,7 +9,6 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Data; using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectMapping; -using Volo.Abp.Reflection; namespace Volo.Abp.Mapperly; @@ -47,7 +46,7 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider { mapper.BeforeMap((TSource)source); var destination = mapper.Map((TSource)source); - TryMapExtraProperties(mapper.GetType().GetSingleAttributeOrNull(), (TSource)source, destination, new ExtraPropertyDictionary()); + TryMapExtraProperties(mapper.GetType().GetSingleAttributeOrNull(), (TSource)source, destination, GetExtraProperties(destination)); mapper.AfterMap((TSource)source, destination); return destination; } @@ -62,8 +61,7 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider return destination; } - throw new AbpException($"No {TypeHelper.GetFullNameHandlingNullableAndGenerics(typeof(IAbpMapperlyMapper))} or" + - $" {TypeHelper.GetFullNameHandlingNullableAndGenerics(typeof(IAbpReverseMapperlyMapper))} was found"); + throw GetNoMapperFoundException(); } public virtual TDestination Map(TSource source, TDestination destination) @@ -95,8 +93,34 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider return destination; } - throw new AbpException($"No {TypeHelper.GetFullNameHandlingNullableAndGenerics(typeof(IAbpMapperlyMapper))} or" + - $" {TypeHelper.GetFullNameHandlingNullableAndGenerics(typeof(IAbpReverseMapperlyMapper))} was found"); + throw GetNoMapperFoundException(); + } + + protected virtual AbpException GetNoMapperFoundException() + { + var newLine = Environment.NewLine; + var message = "No object mapping was found for the specified source and destination types." + + newLine + + newLine + + "Mapping attempted:" + + newLine + + $"{typeof(TSource).Name} -> {typeof(TDestination).Name}" + + newLine + + $"{typeof(TSource).FullName} -> {typeof(TDestination).FullName}" + + newLine + + newLine + + "How to fix:" + + newLine + + "Define a mapping class for these types:" + + newLine + + " - Use MapperBase for one-way mapping." + + newLine + + " - Use TwoWayMapperBase for two-way mapping." + + newLine + + newLine + + "For details, see the Mapperly integration document https://abp.io/docs/latest/framework/infrastructure/object-to-object-mapping#mapperly-integration"; + + return new AbpException(message); } protected virtual bool TryToMapCollection(TSource source, TDestination? destination, out TDestination collectionResult) @@ -212,13 +236,27 @@ public class MapperlyAutoObjectMappingProvider : IAutoObjectMappingProvider protected virtual void TryMapExtraProperties(MapExtraPropertiesAttribute? mapExtraPropertiesAttribute, TSource source, TDestination destination, ExtraPropertyDictionary destinationExtraProperty) { - if (mapExtraPropertiesAttribute != null && - typeof(IHasExtraProperties).IsAssignableFrom(typeof(TDestination)) && - typeof(IHasExtraProperties).IsAssignableFrom(typeof(TSource))) + if(source is not IHasExtraProperties sourceHasExtraProperties) + { + return; + } + + if (destination is not IHasExtraProperties destinationHasExtraProperties) + { + return; + } + + if (sourceHasExtraProperties.ExtraProperties != null && sourceHasExtraProperties.ExtraProperties == + destinationHasExtraProperties.ExtraProperties) + { + ObjectHelper.TrySetProperty(destinationHasExtraProperties, x => x.ExtraProperties, () => new ExtraPropertyDictionary(destinationHasExtraProperties.ExtraProperties));; + } + + if (mapExtraPropertiesAttribute != null) { MapExtraProperties( - source!.As(), - destination!.As(), + sourceHasExtraProperties, + destinationHasExtraProperties, destinationExtraProperty, mapExtraPropertiesAttribute.DefinitionChecks, mapExtraPropertiesAttribute.IgnoredProperties, diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs new file mode 100644 index 0000000000..59b24e6063 --- /dev/null +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Concurrent; + +using System.Reflection; +using MongoDB.Bson.Serialization; + +namespace Volo.Abp.MongoDB; + +public static class AbpBsonSerializer +{ + private static readonly ConcurrentDictionary Cache; + + static AbpBsonSerializer() + { + var registry = BsonSerializer.SerializerRegistry; + var type = typeof(BsonSerializerRegistry); + var cacheField = type.GetField("_cache", BindingFlags.NonPublic | BindingFlags.Instance) ?? + throw new AbpException($"Cannot find _cache field of {type.FullName}."); + Cache = (ConcurrentDictionary)cacheField.GetValue(registry)!; + } + + public static void RemoveSerializer() + { + Cache.TryRemove(typeof(T), out _); + } + + public static ConcurrentDictionary GetSerializerCache() + { + return Cache; + } +} 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 195491d989..fb9d6eaea1 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbModule.cs @@ -19,7 +19,8 @@ public class AbpMongoDbModule : AbpModule { static AbpMongoDbModule() { - BsonSerializer.TryRegisterSerializer(new GuidSerializer(GuidRepresentation.Standard)); + AbpBsonSerializer.RemoveSerializer(); + BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard)); BsonTypeMapper.RegisterCustomTypeMapper(typeof(Guid), new AbpGuidCustomBsonTypeMapper()); } diff --git a/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ObjectToInferredTypesConverter_Tests.cs b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ObjectToInferredTypesConverter_Tests.cs new file mode 100644 index 0000000000..b5d5c3b394 --- /dev/null +++ b/framework/test/Volo.Abp.Json.Tests/Volo/Abp/Json/ObjectToInferredTypesConverter_Tests.cs @@ -0,0 +1,54 @@ +using System.Text.Json; +using Shouldly; +using Xunit; + +namespace Volo.Abp.Json; + +public class ObjectToInferredTypesConverter_Tests : AbpJsonSystemTextJsonTestBase +{ + private readonly IJsonSerializer _jsonSerializer; + + public ObjectToInferredTypesConverter_Tests() + { + _jsonSerializer = GetRequiredService(); + } + + [Fact] + public void Test() + { + var objString = _jsonSerializer.Serialize(new object()); + objString.ShouldBe("{}"); + var obj = _jsonSerializer.Deserialize(objString); + obj.ShouldBeOfType(); + + var booleanString = _jsonSerializer.Serialize(true); + booleanString.ShouldBe("true"); + var boolean = _jsonSerializer.Deserialize(booleanString); + boolean.ShouldBe(true); + + var booleanString2 = _jsonSerializer.Serialize(false); + booleanString2.ShouldBe("false"); + var boolean2 = _jsonSerializer.Deserialize(booleanString2); + boolean2.ShouldBe(false); + + var numberString = _jsonSerializer.Serialize(1); + numberString.ShouldBe("1"); + var number = _jsonSerializer.Deserialize(numberString); + number.ShouldBe(1); + + var numberString2 = _jsonSerializer.Serialize(1.1); + numberString2.ShouldBe("1.1"); + var number2 = _jsonSerializer.Deserialize(numberString2); + number2.ShouldBe(1.1); + + var dateString = _jsonSerializer.Serialize(System.DateTime.Parse("2024-01-01")); + dateString.ShouldBe("\"2024-01-01T00:00:00\""); + var date = _jsonSerializer.Deserialize(dateString); + date.ShouldBe(System.DateTime.Parse("2024-01-01")); + + var textString = _jsonSerializer.Serialize("text"); + textString.ShouldBe("\"text\""); + var text = _jsonSerializer.Deserialize(textString); + text.ShouldBe("text"); + } +} diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs index e5262bc8a2..189c1b8614 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs @@ -196,7 +196,7 @@ public class AbpLocalization_Tests : AbpIntegratedTest(() =>_objectMapper.Map(new MyEntity())); - exception.Message.ShouldBe("No " + - "Volo.Abp.Mapperly.IAbpMapperlyMapper or " + - "Volo.Abp.Mapperly.IAbpReverseMapperlyMapper" + - " was found"); + exception.Message.ShouldBe("No object mapping was found for the specified source and destination types.\n\n" + + "Mapping attempted:\n" + + "MyEntity -> MyClassDto\n" + + "Volo.Abp.Mapperly.SampleClasses.MyEntity -> Volo.Abp.Mapperly.MyClassDto\n\n" + + "How to fix:\n" + + "Define a mapping class for these types:" + "\n" + + " - Use MapperBase for one-way mapping.\n" + + " - Use TwoWayMapperBase for two-way mapping.\n\n" + + "For details, see the Mapperly integration document https://abp.io/docs/latest/framework/infrastructure/object-to-object-mapping#mapperly-integration"); } } diff --git a/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/ExtraProperties_Dictionary_Reference_Tests.cs b/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/ExtraProperties_Dictionary_Reference_Tests.cs new file mode 100644 index 0000000000..e5453d09a3 --- /dev/null +++ b/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/ExtraProperties_Dictionary_Reference_Tests.cs @@ -0,0 +1,158 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Riok.Mapperly.Abstractions; +using Shouldly; +using Volo.Abp.Data; +using Volo.Abp.Mapperly.SampleClasses; +using Volo.Abp.ObjectExtending; +using Volo.Abp.ObjectMapping; +using Volo.Abp.Testing; +using Xunit; + +namespace Volo.Abp.Mapperly; + +public class ExtraProperties_Dictionary_Reference_Tests : AbpIntegratedTest +{ + private readonly IObjectMapper _objectMapper; + + public ExtraProperties_Dictionary_Reference_Tests() + { + _objectMapper = ServiceProvider.GetRequiredService(); + } + + [Fact] + public void Should_Create_New_ExtraProperties_Dictionary_When_Same_Reference() + { + // Arrange: Create a shared ExtraProperties dictionary + var sharedExtraProperties = new ExtraPropertyDictionary + { + {"TestProperty", "TestValue"}, + {"NumberProperty", 42} + }; + + var source = new TestEntityWithExtraProperties + { + Id = Guid.NewGuid(), + Name = "Source Entity" + }; + + var destination = new TestEntityDtoWithExtraProperties + { + Id = Guid.NewGuid(), + Name = "Destination DTO" + }; + + // Make both source and destination reference the same ExtraProperties dictionary + SetExtraPropertiesReference(source, sharedExtraProperties); + SetExtraPropertiesReference(destination, sharedExtraProperties); + + // Verify they have the same reference before mapping + ReferenceEquals(source.ExtraProperties, destination.ExtraProperties).ShouldBeTrue(); + source.ExtraProperties.Count.ShouldBe(2); + destination.ExtraProperties.Count.ShouldBe(2); + + // Act: Perform mapping + _objectMapper.Map(source, destination); + + // Assert: After mapping, they should have different references + // This is the key fix: when ExtraProperties references are the same, + // a new dictionary should be created for the destination + ReferenceEquals(source.ExtraProperties, destination.ExtraProperties).ShouldBeFalse(); + + // But content should be preserved + destination.ExtraProperties["TestProperty"].ShouldBe("TestValue"); + destination.ExtraProperties["NumberProperty"].ShouldBe(42); + destination.ExtraProperties.Count.ShouldBe(source.ExtraProperties.Count); + } + + [Fact] + public void Should_Not_Create_New_Dictionary_When_Different_References() + { + // Arrange: Create source and destination with different ExtraProperties references + var source = new TestEntityWithExtraProperties + { + Id = Guid.NewGuid(), + Name = "Source Entity" + }; + source.SetProperty("SourceProperty", "SourceValue"); + + var destination = new TestEntityDtoWithExtraProperties + { + Id = Guid.NewGuid(), + Name = "Destination DTO" + }; + destination.SetProperty("DestinationProperty", "DestinationValue"); + + var originalSourceReference = source.ExtraProperties; + + // Verify they have different references before mapping + ReferenceEquals(source.ExtraProperties, destination.ExtraProperties).ShouldBeFalse(); + + // Act: Perform mapping + _objectMapper.Map(source, destination); + + // Assert: Source reference should remain unchanged + ReferenceEquals(source.ExtraProperties, originalSourceReference).ShouldBeTrue(); + + // Destination reference may change due to normal mapping process, but should not be same as source + ReferenceEquals(source.ExtraProperties, destination.ExtraProperties).ShouldBeFalse(); + + destination.ExtraProperties["SourceProperty"].ShouldBe("SourceValue"); + destination.ExtraProperties["DestinationProperty"].ShouldBe("DestinationValue"); + } + + [Fact] + public void Should_Handle_Readonly_ExtraProperties_Gracefully() + { + // Arrange: Create entities with readonly ExtraProperties + var source = new TestEntityWithReadonlyExtraProperties + { + Id = Guid.NewGuid(), + Name = "Source Entity" + }; + source.ExtraProperties.Add("TestProperty", "TestValue"); + + var destination = new TestEntityWithReadonlyExtraProperties + { + Id = Guid.NewGuid(), + Name = "Destination Entity" + }; + + // Make them reference the same ExtraProperties + var sharedExtraProperties = new ExtraPropertyDictionary + { + {"SharedProperty", "SharedValue"} + }; + SetReadonlyExtraPropertiesReference(source, sharedExtraProperties); + SetReadonlyExtraPropertiesReference(destination, sharedExtraProperties); + + // Verify they have the same reference + ReferenceEquals(source.ExtraProperties, destination.ExtraProperties).ShouldBeTrue(); + + // Act & Assert: Should not throw exception even if setter is not available + Should.NotThrow(() => _objectMapper.Map(source, destination)); + } + + private static void SetExtraPropertiesReference(TestEntityWithExtraProperties entity, ExtraPropertyDictionary extraProperties) + { + // Use reflection to set the protected setter from ExtensibleObject + var propertyInfo = typeof(ExtensibleObject).GetProperty(nameof(ExtensibleObject.ExtraProperties)); + propertyInfo?.SetValue(entity, extraProperties); + } + + private static void SetExtraPropertiesReference(TestEntityDtoWithExtraProperties entity, ExtraPropertyDictionary extraProperties) + { + // Use reflection to set the protected setter from ExtensibleObject + var propertyInfo = typeof(ExtensibleObject).GetProperty(nameof(ExtensibleObject.ExtraProperties)); + propertyInfo?.SetValue(entity, extraProperties); + } + + private static void SetReadonlyExtraPropertiesReference(TestEntityWithReadonlyExtraProperties entity, ExtraPropertyDictionary extraProperties) + { + // Use reflection to set the private field + var fieldInfo = typeof(TestEntityWithReadonlyExtraProperties).GetField("_extraProperties", + System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); + fieldInfo?.SetValue(entity, extraProperties); + } +} + diff --git a/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/SampleClasses/MapperlyMappers.cs b/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/SampleClasses/MapperlyMappers.cs index 49be64b61a..eb11d16be1 100644 --- a/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/SampleClasses/MapperlyMappers.cs +++ b/framework/test/Volo.Abp.Mapperly.Tests/Volo/Abp/Mapperly/SampleClasses/MapperlyMappers.cs @@ -1,6 +1,9 @@ -using Riok.Mapperly.Abstractions; +using System; +using Riok.Mapperly.Abstractions; +using Volo.Abp.Data; using Volo.Abp.Mapperly; using Volo.Abp.Mapperly.SampleClasses; +using Volo.Abp.ObjectExtending; using Volo.Abp.ObjectExtending.TestObjects; [Mapper] @@ -42,3 +45,41 @@ public partial class ExtensibleTestPersonWithRegularPropertiesDtoMapper : Mapper public override partial void Map(ExtensibleTestPerson source, ExtensibleTestPersonWithRegularPropertiesDto destination); } + +// Test entities for ExtraProperties dictionary reference tests +public class TestEntityWithExtraProperties : ExtensibleObject +{ + public Guid Id { get; set; } + public string Name { get; set; } = string.Empty; +} + +public class TestEntityDtoWithExtraProperties : ExtensibleObject +{ + public Guid Id { get; set; } + public string Name { get; set; } = string.Empty; +} + +public class TestEntityWithReadonlyExtraProperties : IHasExtraProperties +{ + private readonly ExtraPropertyDictionary _extraProperties = new(); + + public Guid Id { get; set; } + public string Name { get; set; } = string.Empty; + public ExtraPropertyDictionary ExtraProperties => _extraProperties; +} + +[Mapper] +public partial class TestEntityWithExtraPropertiesMapper : MapperBase +{ + public override partial TestEntityDtoWithExtraProperties Map(TestEntityWithExtraProperties source); + + public override partial void Map(TestEntityWithExtraProperties source, TestEntityDtoWithExtraProperties destination); +} + +[Mapper] +public partial class TestEntityWithReadonlyExtraPropertiesMapper : MapperBase +{ + public override partial TestEntityWithReadonlyExtraProperties Map(TestEntityWithReadonlyExtraProperties source); + + public override partial void Map(TestEntityWithReadonlyExtraProperties source, TestEntityWithReadonlyExtraProperties destination); +} \ No newline at end of file diff --git a/latest-versions.json b/latest-versions.json index e1800b4312..c09373e176 100644 --- a/latest-versions.json +++ b/latest-versions.json @@ -1,4 +1,13 @@ [ + { + "version": "9.3.3", + "releaseDate": "", + "type": "stable", + "message": "", + "leptonx": { + "version": "4.3.3" + } + }, { "version": "9.3.2", "releaseDate": "", diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AbpAccountApplicationModule.cs b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AbpAccountApplicationModule.cs index 04f25d33d8..9291cae3fd 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AbpAccountApplicationModule.cs +++ b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AbpAccountApplicationModule.cs @@ -1,4 +1,5 @@ -using Volo.Abp.Mapperly; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Mapperly; using Volo.Abp.Emailing; using Volo.Abp.Identity; using Volo.Abp.Modularity; @@ -28,5 +29,7 @@ public class AbpAccountApplicationModule : AbpModule { options.Applications["MVC"].Urls[AccountUrlNames.PasswordReset] = "Account/ResetPassword"; }); + + context.Services.AddMapperlyObjectMapper(); } } diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs index cc7cdd8c83..09f78f2851 100644 --- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs +++ b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/AccountAppService.cs @@ -33,6 +33,7 @@ public class AccountAppService : ApplicationService, IAccountAppService IdentityOptions = identityOptions; LocalizationResource = typeof(AccountResource); + ObjectMapperContext = typeof(AbpAccountApplicationModule); } public virtual async Task RegisterAsync(RegisterDto input) diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj index 9a23652a5a..2a35994fe6 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.csproj @@ -10,7 +10,7 @@ - + diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/AbpBackgroundJobsDomainModule.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/AbpBackgroundJobsDomainModule.cs index 1a551ef7c4..3342deb794 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/AbpBackgroundJobsDomainModule.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/AbpBackgroundJobsDomainModule.cs @@ -1,5 +1,5 @@ using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.AutoMapper; +using Volo.Abp.Mapperly; using Volo.Abp.Modularity; namespace Volo.Abp.BackgroundJobs; @@ -7,16 +7,13 @@ namespace Volo.Abp.BackgroundJobs; [DependsOn( typeof(AbpBackgroundJobsDomainSharedModule), typeof(AbpBackgroundJobsModule), - typeof(AbpAutoMapperModule) + typeof(AbpMapperlyModule) )] public class AbpBackgroundJobsDomainModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - context.Services.AddAutoMapperObjectMapper(); - Configure(options => - { - options.AddProfile(validate: true); - }); + context.Services.AddMapperlyObjectMapper(); + } } diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainAutoMapperProfile.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainAutoMapperProfile.cs deleted file mode 100644 index 67891f4f91..0000000000 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainAutoMapperProfile.cs +++ /dev/null @@ -1,17 +0,0 @@ -using AutoMapper; -using Volo.Abp.AutoMapper; - -namespace Volo.Abp.BackgroundJobs; - -public class BackgroundJobsDomainAutoMapperProfile : Profile -{ - public BackgroundJobsDomainAutoMapperProfile() - { - CreateMap() - .ConstructUsing(x => new BackgroundJobRecord(x.Id)) - .Ignore(record => record.ConcurrencyStamp) - .Ignore(record => record.ExtraProperties); - - CreateMap(); - } -} diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainMapperlyMappers.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainMapperlyMappers.cs new file mode 100644 index 0000000000..9ac5cef9bf --- /dev/null +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDomainMapperlyMappers.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; + +namespace Volo.Abp.BackgroundJobs; + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +public partial class BackgroundJobInfoToBackgroundJobRecordMapper + : MapperBase +{ + [MapperIgnoreTarget(nameof(BackgroundJobRecord.ConcurrencyStamp))] + [MapperIgnoreTarget(nameof(BackgroundJobRecord.ExtraProperties))] + public override partial BackgroundJobRecord Map(BackgroundJobInfo source); + + [MapperIgnoreTarget(nameof(BackgroundJobRecord.ConcurrencyStamp))] + [MapperIgnoreTarget(nameof(BackgroundJobRecord.ExtraProperties))] + public override partial void Map(BackgroundJobInfo source, BackgroundJobRecord destination); + + [ObjectFactory] + protected BackgroundJobRecord CreateBackgroundJobRecord(BackgroundJobInfo source) + { + return new BackgroundJobRecord(source.Id); + } +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +public partial class BackgroundJobRecordToBackgroundJobInfoMapper + : MapperBase +{ + public override partial BackgroundJobInfo Map(BackgroundJobRecord source); + + public override partial void Map(BackgroundJobRecord source, BackgroundJobInfo destination); +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Bundling/BasicThemeGlobalStyleContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Bundling/BasicThemeGlobalStyleContributor.cs index ed5abd3796..022fd0b2e7 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Bundling/BasicThemeGlobalStyleContributor.cs +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Bundling/BasicThemeGlobalStyleContributor.cs @@ -6,6 +6,7 @@ public class BasicThemeGlobalStyleContributor : BundleContributor { public override void ConfigureBundle(BundleConfigurationContext context) { + context.Files.Add(new BundleFile("/themes/basic/googlefonts.css", true)); context.Files.Add("/themes/basic/layout.css"); } } diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/googlefonts.css b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/googlefonts.css new file mode 100644 index 0000000000..a76b545b70 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/googlefonts.css @@ -0,0 +1 @@ +@import url('https://fonts.googleapis.com/css2?family=Lexend:wght@100..900&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); \ No newline at end of file diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/layout.css b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/layout.css index 14aa3186c2..5d92291c1f 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/layout.css +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/wwwroot/themes/basic/layout.css @@ -1,60 +1,65 @@ - -@import url('https://fonts.googleapis.com/css2?family=Lexend:wght@100..900&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); - #main-navbar-tools a.dropdown-toggle { text-decoration: none; color: #fff; } - + .navbar .dropdown-submenu { position: relative; } + .navbar .dropdown-menu { margin: 0; padding: 0; } - .navbar .dropdown-menu a { - font-size: .9em; - padding: 10px 15px; - display: block; - min-width: 210px; - text-align: left; - border-radius: 0.25rem; - min-height: 44px; - } + +.navbar .dropdown-menu a { + font-size: .9em; + padding: 10px 15px; + display: block; + min-width: 210px; + text-align: left; + border-radius: 0.25rem; + min-height: 44px; +} + .navbar .dropdown-submenu a::after { transform: rotate(-90deg); position: absolute; right: 16px; top: 18px; -} +} + .navbar .dropdown-submenu .dropdown-menu { top: 0; - left: 100%; -} + left: 100%; +} .card-header .btn { padding: 2px 6px; -} +} + .card-header h5 { margin: 0; -} -.container > .card { +} + +.container>.card { box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; } -@media screen and (min-width: 768px) { - .navbar .dropdown:hover > .dropdown-menu { +@media screen and (min-width: 768px) { + .navbar .dropdown:hover>.dropdown-menu { display: block; } - .navbar .dropdown-submenu:hover > .dropdown-menu { + .navbar .dropdown-submenu:hover>.dropdown-menu { display: block; } } + .input-validation-error { border-color: #dc3545; } + .field-validation-error { font-size: 0.8em; } @@ -75,33 +80,40 @@ div.dataTables_wrapper div.dataTables_length label { .rtl .dropdown-menu-right { right: auto; - left: 0; + left: 0; } - .rtl .dropdown-menu-right a { - text-align: right; - } +.rtl .dropdown-menu-right a { + text-align: right; +} .rtl .navbar .dropdown-menu a { text-align: right; } + .rtl .navbar .dropdown-submenu .dropdown-menu { top: 0; left: auto; right: 100%; -} +} + .rtl div.dataTables_wrapper div.dataTables_filter input { margin-left: auto; margin-right: 0.5em; } + .rtl div.dataTables_wrapper div.dataTables_filter { text-align: left; } -.rtl table.dataTable thead th, table.dataTable thead td, table.dataTable tfoot th, table.dataTable tfoot td { + +.rtl table.dataTable thead th, +table.dataTable thead td, +table.dataTable tfoot th, +table.dataTable tfoot td { text-align: right; } -.brand-container{ +.brand-container { text-align: center; margin-top: 8rem; } @@ -111,7 +123,7 @@ div.dataTables_wrapper div.dataTables_length label { } .brand-text { - color: #292D33; + color: #292D33; font-family: Lexend; font-size: 30px; font-style: normal; @@ -119,4 +131,4 @@ div.dataTables_wrapper div.dataTables_length label { line-height: 34px; margin-top: 5px; margin-bottom: 15px; -} \ No newline at end of file +} 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 d6c0888f0a..a71ee3f64a 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.3.2", - "@abp/prismjs": "~9.3.2", - "@abp/highlight.js": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.shared": "~9.3.3", + "@abp/prismjs": "~9.3.3", + "@abp/highlight.js": "~9.3.3" } } 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 73d5ffbb8e..6d96ba495c 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.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== - dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/clipboard@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf" - integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA== +"@abp/clipboard@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed" + integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" clipboard "^2.0.11" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/highlight.js@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.2.tgz#add22b40f5b412d6c86629a4d6d449d426c9b141" - integrity sha512-EVUCK6Hm3J+sMCuGZDTEEyWxfvAK5mxLuYGRuRrmzZvxXKsnAwqZitMddAvkZVAwN1QiV3gyXgdrz1XUBWZ2kg== +"@abp/highlight.js@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.3.tgz#fe557c7e3a8d17f3c319d6af8d90de4979f28589" + integrity sha512-sqRynOCoBZAYqqQXU3LEmSupC7HrkmRg+8I8CJJZbfduZJvETbWZyXAISLkyTOzPa9CvOOBXYjnpCkjCWqOxcg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@highlightjs/cdn-assets" "~11.10.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/prismjs@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242" - integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg== +"@abp/prismjs@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904" + integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA== dependencies: - "@abp/clipboard" "~9.3.2" - "@abp/core" "~9.3.2" + "@abp/clipboard" "~9.3.3" + "@abp/core" "~9.3.3" prismjs "^1.29.0" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== 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 a81470c4a5..b0de7e4c4d 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.3.2", - "@abp/prismjs": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3", + "@abp/prismjs": "~9.3.3" }, "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 7018f52f8c..40c06cda11 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.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7" - integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== - dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7" + integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" + +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/clipboard@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf" - integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA== +"@abp/clipboard@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed" + integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" clipboard "^2.0.11" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/prismjs@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242" - integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg== +"@abp/prismjs@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904" + integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA== dependencies: - "@abp/clipboard" "~9.3.2" - "@abp/core" "~9.3.2" + "@abp/clipboard" "~9.3.3" + "@abp/core" "~9.3.3" prismjs "^1.29.0" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== 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 7f75fb85e5..1f2aad9269 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.3.2", - "@abp/blogging": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3", + "@abp/blogging": "~9.3.3" } } diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index 033458c351..9358aafd0a 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.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7" - integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== - dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7" + integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" + +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/blogging@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-9.3.2.tgz#52821170874f6d33da4f579abd3323c233abb1ba" - integrity sha512-P7oMpO1o/UEthlkDgYU7uZyFClNJEa5J2EcTFkLzGoQeVbZU/PF2GfVpm8wQb1Fl2EIzpHrslSkVPYiReog/Ww== +"@abp/blogging@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-9.3.3.tgz#16a4433b52f8ec08e8b4ed1d7fef8ee072fe47f7" + integrity sha512-hND79rJkapTEr4bwlh2Bzv2SdwOKXLMHtXv2nrtsmCb/GkPvkBNX07gewvJos/rIupxal0ZKH3aNcUzllH3ccA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" - "@abp/owl.carousel" "~9.3.2" - "@abp/prismjs" "~9.3.2" - "@abp/tui-editor" "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" + "@abp/owl.carousel" "~9.3.3" + "@abp/prismjs" "~9.3.3" + "@abp/tui-editor" "~9.3.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/clipboard@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf" - integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA== +"@abp/clipboard@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed" + integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" clipboard "^2.0.11" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/owl.carousel@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-9.3.2.tgz#79fbb5bb2dd8d18a7519b0cd7a8cd4e28814907b" - integrity sha512-ETDndGFbyTGWLWiuFChJP6T3rniJgka2hfK3uatg5YmneY9Oqz0X1mwXHHWgD4mBSAB2nCi+PnhSU5Oi3Fj4kQ== +"@abp/owl.carousel@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-9.3.3.tgz#fc94b12ff3c1df59a770a7a4519b9d765a1861ab" + integrity sha512-ZJnWMu9PPAgwMOxtrcE8PcMXOlhVcwfcBF1soIOCcY3eC3lGQ7t8voZr7Iu+WKC1CWeD0qxqHrlqXw+nHbc7Dw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" owl.carousel "^2.3.4" -"@abp/prismjs@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242" - integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg== +"@abp/prismjs@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904" + integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA== dependencies: - "@abp/clipboard" "~9.3.2" - "@abp/core" "~9.3.2" + "@abp/clipboard" "~9.3.3" + "@abp/core" "~9.3.3" prismjs "^1.29.0" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/tui-editor@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.2.tgz#7d18d8cf1d6dae3c5072c403dcc85af5ab9792ba" - integrity sha512-JnYCrr4UIZskB4zwNywdk76cXKUzMCXW5v4ec4ClbHC59FTKv34iIRonl1kYC/NkjDTGO8gvmyYG/3UeXrRWmQ== +"@abp/tui-editor@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.3.tgz#0a4651bb4babc625f4598ebddcb4049eedcff4cc" + integrity sha512-9iHqRRFS6EVqrKwZ75yVW2nkTkZxF5BcVOYnIMTApwrxsRTqzQ95tikt0UNUZ4qgmsgDy4LeOnJAVk1K6MsiQA== dependencies: - "@abp/jquery" "~9.3.2" - "@abp/prismjs" "~9.3.2" + "@abp/jquery" "~9.3.3" + "@abp/prismjs" "~9.3.3" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== 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 3f75e592bf..0fe6ca046f 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.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3" } } diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock index 13950786c8..06fb5e9906 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.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7" - integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA== +"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7" + integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index b5196a58c7..42dbd7ffc3 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.3.2", - "@abp/ng.identity": "~9.3.2", - "@abp/ng.setting-management": "~9.3.2", - "@abp/ng.tenant-management": "~9.3.2", - "@abp/ng.theme.basic": "~9.3.2", + "@abp/ng.account": "~9.3.3", + "@abp/ng.identity": "~9.3.3", + "@abp/ng.setting-management": "~9.3.3", + "@abp/ng.tenant-management": "~9.3.3", + "@abp/ng.theme.basic": "~9.3.3", "@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 2c37d6bf52..20786eec7b 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.3.2", - "@abp/ng.theme.shared": ">=9.3.2" + "@abp/ng.core": ">=9.3.3", + "@abp/ng.theme.shared": ">=9.3.3" }, "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 1f34c513a9..a476bc5de9 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.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock index 13950786c8..06fb5e9906 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.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7" - integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA== +"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7" + integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== 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 255027fa5f..8097db43a4 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.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3" } } 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 13950786c8..06fb5e9906 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.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7" - integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA== +"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7" + integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== 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 f103d3b08d..0dd231cc71 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.3.2", - "@abp/cms-kit": "9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3", + "@abp/cms-kit": "9.3.3" } } 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 c1a52914c8..98abe9cae6 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.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7" - integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== - dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7" + integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" + +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/clipboard@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf" - integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA== +"@abp/clipboard@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed" + integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" clipboard "^2.0.11" -"@abp/cms-kit.admin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-9.3.2.tgz#dd43e879bbfbdeae61fc001026bacc09279e5e7d" - integrity sha512-BsWb6vO+2n0s9aJ+ud1whxST7v/0cwk66CLGfUeWkdiahQGyOx3PsRHDD2k9yZA7H8okgYr+tpN/+hUPUjFw6w== +"@abp/cms-kit.admin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-9.3.3.tgz#f3ca6e4ecdda1a70ef8581ad1e302c4dd7b77316" + integrity sha512-cvHYgvtFuM5G2TkkeEIvRgpC7tZDGioVXLKNqovT4T1XzCtqZyuU3AOKBHCZqiqinJZ+9E/FsnKKjp3vlZpvZw== dependencies: - "@abp/codemirror" "~9.3.2" - "@abp/jstree" "~9.3.2" - "@abp/markdown-it" "~9.3.2" - "@abp/slugify" "~9.3.2" - "@abp/tui-editor" "~9.3.2" - "@abp/uppy" "~9.3.2" + "@abp/codemirror" "~9.3.3" + "@abp/jstree" "~9.3.3" + "@abp/markdown-it" "~9.3.3" + "@abp/slugify" "~9.3.3" + "@abp/tui-editor" "~9.3.3" + "@abp/uppy" "~9.3.3" -"@abp/cms-kit.public@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-9.3.2.tgz#6eeed0407fd70b86aee148c79193403133364213" - integrity sha512-h5Ul5opCApy1wlwp4bARKKMkW+Q43VnPc/4BsKsPpLAB10XU3+DBr8U1vJWNnh+0h0bpRJ44norKfQ/mApscEw== +"@abp/cms-kit.public@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-9.3.3.tgz#b2140e2edc4e78f55ff4d01416685bdc7109f663" + integrity sha512-5xh41EqEwxMdSUMb89XXmlO7c7vbe4XU3kzEMxN70V7jAUtww+bCHKqbw/mqvHhjuSCdXQ0K+IfTjWxZ/kFPVQ== dependencies: - "@abp/highlight.js" "~9.3.2" - "@abp/star-rating-svg" "~9.3.2" + "@abp/highlight.js" "~9.3.3" + "@abp/star-rating-svg" "~9.3.3" -"@abp/cms-kit@9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-9.3.2.tgz#02f135bb44165b0b687776c5d3b209810a541437" - integrity sha512-UHlFEJAeoKEl3KmuuHf3Hi8UQrUrciTYi4PRHInuS5JdpMT8ZOaTTPZtKxE9ZDuiN19lwc8vsrATbb43dgiX0g== +"@abp/cms-kit@9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-9.3.3.tgz#7b8e67a5391aefb5f563af8a9b0435c008612185" + integrity sha512-+G3SuChVU6apexSCqW7W0Zy4EO/hiKt5cXRWjjx5A8em+SgUOuDB2/nA1TNBe/IGixJJbei6qF4mLlabwnJDTw== dependencies: - "@abp/cms-kit.admin" "~9.3.2" - "@abp/cms-kit.public" "~9.3.2" + "@abp/cms-kit.admin" "~9.3.3" + "@abp/cms-kit.public" "~9.3.3" -"@abp/codemirror@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-9.3.2.tgz#09de9ce79e6ed542292d12e288f57a58b6a84c98" - integrity sha512-h7yHGeOQRThHAsN1U7Viu0ifafK6m0LpyJOSWvQqAWHQJ44+iXy+gLeZJhJwIpJuwxPwZqQkuRKKjHqHTllf/Q== +"@abp/codemirror@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-9.3.3.tgz#9bb164b214d1969a951f46ee997a69856c25bc26" + integrity sha512-XivrP8v9kztDFWTXkuoHLONFdBQ54dlVUsmwv8WBRVl4QKfVIDhSZs8EmqU8PSIqygS10rcjo6dDLvJYEL3mfg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" codemirror "^5.65.1" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/highlight.js@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.2.tgz#add22b40f5b412d6c86629a4d6d449d426c9b141" - integrity sha512-EVUCK6Hm3J+sMCuGZDTEEyWxfvAK5mxLuYGRuRrmzZvxXKsnAwqZitMddAvkZVAwN1QiV3gyXgdrz1XUBWZ2kg== +"@abp/highlight.js@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-9.3.3.tgz#fe557c7e3a8d17f3c319d6af8d90de4979f28589" + integrity sha512-sqRynOCoBZAYqqQXU3LEmSupC7HrkmRg+8I8CJJZbfduZJvETbWZyXAISLkyTOzPa9CvOOBXYjnpCkjCWqOxcg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@highlightjs/cdn-assets" "~11.10.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/jstree@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-9.3.2.tgz#2442e3465fe168e90ffe2d672c1dc6f086c81b4f" - integrity sha512-B0WeKkAmfcwuI7DmS7/V/4neWIK/2RNXnMWVYSQPOZQm89mmSe/blQra4KRMZzlQLPAV76oncIHju01Cn+MV0w== +"@abp/jstree@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-9.3.3.tgz#6c7ab0049dc033da23617ce9e192fb98b1a0a081" + integrity sha512-HVkL6DtiURnhBhqivBAnVpFSgrAJ5HCsieVBPdciWdrggQ0Y/rPZN6F+HrrI28Asymnj8ayrG/4735yAn2bNZA== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jstree "^3.3.17" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/markdown-it@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-9.3.2.tgz#1a673991c986eaec7cac5b035e4cbf2eed7c8d59" - integrity sha512-b/yTk312LZOWEF+f13zNHejdBf0dtdrjnd3LGFs9BDPyx2HMDAlDhZ9MiBM160W8ej1h3cIC06sbZBuyxns5Rg== +"@abp/markdown-it@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-9.3.3.tgz#4fc2b4934fe50999e6f20015b7f4e4bdbd185e38" + integrity sha512-6/IZ/2XQQzsnjYNBCcFxTroVenThiridD1oyRmtGK/+q7TGkgxU6x7b89losmvn8n1oGKBOOsqr/f3knEB/+RA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" markdown-it "^14.1.0" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/prismjs@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242" - integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg== +"@abp/prismjs@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904" + integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA== dependencies: - "@abp/clipboard" "~9.3.2" - "@abp/core" "~9.3.2" + "@abp/clipboard" "~9.3.3" + "@abp/core" "~9.3.3" prismjs "^1.29.0" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/slugify@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-9.3.2.tgz#dfca463f3750d264fd1ffcc5b14c7e15f3cf12ca" - integrity sha512-ux6j9ojt79g7D5AAODoBRwGeLkccynxEtQQQw+hk55YG5PZFImBL/BxRLEhkBBKBL7YrlHvnO58X2YoCUIG6Ug== +"@abp/slugify@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-9.3.3.tgz#9cf5b7d924f69a3e75e3cbfa87e0f7ee0e99ad3b" + integrity sha512-9cuT2CgCwcUumuTuMtVq108i65gAgz3SBWq7xy5CW5fS72OenRqi45N1m3yKQxhZ1JIkbvBGI5UlKHmWd9W7mQ== dependencies: slugify "^1.6.6" -"@abp/star-rating-svg@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-9.3.2.tgz#9d60ac8bc953e6dae544c2a9961c6905036253b7" - integrity sha512-97n81FqBxnBEQ9jUeXXOtuZ71VHW2mmbaOlroqLl+dE18PR/HIWBNUCEpKK7RCNRBUMMh1saIdv16ApBFVeBFQ== +"@abp/star-rating-svg@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-9.3.3.tgz#3330bcc4635aed05001404cbdf3cb84ef68f211e" + integrity sha512-rSpXtyhL7n21mp7O7GotbyJyBL+Yo/6+UAAXgPjpq0qia8OHB+aRPuZiyBBQwvPfR8nIzRK0wrdwOsaSaFU71Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" star-rating-svg "^3.5.0" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/tui-editor@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.2.tgz#7d18d8cf1d6dae3c5072c403dcc85af5ab9792ba" - integrity sha512-JnYCrr4UIZskB4zwNywdk76cXKUzMCXW5v4ec4ClbHC59FTKv34iIRonl1kYC/NkjDTGO8gvmyYG/3UeXrRWmQ== +"@abp/tui-editor@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-9.3.3.tgz#0a4651bb4babc625f4598ebddcb4049eedcff4cc" + integrity sha512-9iHqRRFS6EVqrKwZ75yVW2nkTkZxF5BcVOYnIMTApwrxsRTqzQ95tikt0UNUZ4qgmsgDy4LeOnJAVk1K6MsiQA== dependencies: - "@abp/jquery" "~9.3.2" - "@abp/prismjs" "~9.3.2" + "@abp/jquery" "~9.3.3" + "@abp/prismjs" "~9.3.3" -"@abp/uppy@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-9.3.2.tgz#9e8647bd79c92263f2e8744ec2aa5180db9923b3" - integrity sha512-JXK43liPBifJC/Byq4VA+xWRPyd6ScurbK9FJZQMoD7kWLg/iFVSyLn7D7U4khYmCnmz8nc96SfgE8+CEsCaBQ== +"@abp/uppy@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-9.3.3.tgz#cb7371e323340021f8de80295f53557df05aeab7" + integrity sha512-/3dBmqlxt/pJ5iQJN6zqoGyCmXN4MSqkKqR+ZVo+z5H807GQiYfZbQ8aqDzTpqIEEF+9NU5Czyelvm5zby6PlA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" uppy "^4.4.1" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs index 0847347ab6..eec3483a90 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs @@ -7,13 +7,14 @@ using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalResources; using Volo.CmsKit.Permissions; +using Volo.CmsKit.Admin; namespace Volo.CmsKit.Admin.GlobalResources; [RequiresFeature(CmsKitFeatures.GlobalResourceEnable)] [RequiresGlobalFeature(typeof(GlobalResourcesFeature))] [Authorize(CmsKitAdminPermissions.GlobalResources.Default)] -public class GlobalResourceAdminAppService : ApplicationService, IGlobalResourceAdminAppService +public class GlobalResourceAdminAppService : CmsKitAdminAppServiceBase, IGlobalResourceAdminAppService { public GlobalResourceManager GlobalResourceManager { get; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppServiceBase.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppServiceBase.cs index 99efcb92b8..dc3b79f2d0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppServiceBase.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/CmsKitAppServiceBase.cs @@ -8,5 +8,6 @@ public abstract class CmsKitAppServiceBase : ApplicationService protected CmsKitAppServiceBase() { LocalizationResource = typeof(CmsKitResource); + ObjectMapperContext = typeof(CmsKitCommonApplicationModule); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs index 3b432967db..a91e6bd0d4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs @@ -5,12 +5,13 @@ using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalResources; +using Volo.CmsKit.Public; namespace Volo.CmsKit.Public.GlobalResources; [RequiresFeature(CmsKitFeatures.GlobalResourceEnable)] [RequiresGlobalFeature(typeof(GlobalResourcesFeature))] -public class GlobalResourcePublicAppService : ApplicationService, IGlobalResourcePublicAppService +public class GlobalResourcePublicAppService : CmsKitPublicAppServiceBase, IGlobalResourcePublicAppService { public GlobalResourceManager GlobalResourceManager { get; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs index d16e271e4e..1b5089def9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs @@ -12,12 +12,12 @@ public class GlobalResourceEventHandler : ILocalEventHandler>, ITransientDependency { - public IObjectMapper ObjectMapper { get; } + public IObjectMapper ObjectMapper { get; } private readonly IDistributedCache _resourceCache; public GlobalResourceEventHandler( IDistributedCache resourceCache, - IObjectMapper objectMapper) + IObjectMapper objectMapper) { ObjectMapper = objectMapper; _resourceCache = resourceCache; @@ -29,4 +29,4 @@ public class GlobalResourceEventHandler : eventData.Entity.Name, ObjectMapper.Map(eventData.Entity)); } -} \ No newline at end of file +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicControllerBase.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicControllerBase.cs index f22444036d..8251397bdd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicControllerBase.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicControllerBase.cs @@ -8,5 +8,6 @@ public abstract class CmsKitPublicControllerBase : AbpController public CmsKitPublicControllerBase() { LocalizationResource = typeof(CmsKitResource); + ObjectMapperContext = typeof(CmsKitPublicWebModule); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs index 18eb184742..6eb5982030 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs @@ -20,6 +20,8 @@ public class IndexModel : CommonPageModel public IndexModel(IPagePublicAppService pagePublicAppService, ContentParser contentParser) { + ObjectMapperContext = typeof(CmsKitPublicWebModule); + PagePublicAppService = pagePublicAppService; ContentParser = contentParser; } diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index 11a654b87b..985c0f9988 100644 --- a/modules/docs/app/VoloDocs.Web/package.json +++ b/modules/docs/app/VoloDocs.Web/package.json @@ -3,7 +3,7 @@ "name": "volo.docstestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2", - "@abp/docs": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3", + "@abp/docs": "~9.3.3" } } diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index 8b283f6c5f..81fe908a9d 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2,229 +2,229 @@ # yarn lockfile v1 -"@abp/anchor-js@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-9.3.2.tgz#46a7cc1482e4064a15dedc2000f3c22accc57551" - integrity sha512-1cEpNPnKcpRoApYyo7fDNVQLLdjpZLIAt5VU5yHdssJgdeK99ebPkWFNQNl3T72XSzBvvnGmplz63p6loe1H4A== +"@abp/anchor-js@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-9.3.3.tgz#cc98c5eb55ba854f3e6d379401bdc8606c6ff69b" + integrity sha512-h+ifARYy3nRfe1hzO7hx3ELqdMf1nxjcWjBBSvRHRqsxpjZqhE7B4Pasw+Se2VmCCfvP2wYDYmed8Ejfksezyg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" anchor-js "^5.0.0" -"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7" - integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== - dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7" + integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" + +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== + dependencies: + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/clipboard@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.2.tgz#4e0d6456e142e552ca3b4ec10159276e096c56bf" - integrity sha512-jorX68Yw/9pWAmt8cOuVx3Cnp7VF9xuvCD/ecvL5eZyHhXt4tDcYIFO5LkF+CaIky79gdzdF3tmYeFSPUE/HzA== +"@abp/clipboard@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-9.3.3.tgz#e6fd477a9f6d6c7fb224ea018e8f23d8d303f3ed" + integrity sha512-iR9HUk1JPWHS3LQ5QmH40maCuwi6SFwxPYvqVjNLVTisHsUOGGZLvHJ46aA8Ei3Q4UlUCdISP9Kc4F88JrhRpA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" clipboard "^2.0.11" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/docs@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-9.3.2.tgz#f786e589af447d9b55c1192c6f07ed494e1465ba" - integrity sha512-Aa8xtZMj18m23XMGWbcddzeT2R6lkp66BAlF5pshj8yKi/5SFlh+5YtIigy0UItqw6tQD2oQJAUWpuTd7jgNng== +"@abp/docs@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-9.3.3.tgz#52aabdca61bc5a6479a7d2a64c59204a789d051b" + integrity sha512-lb0zaYstUN2lzbDRwnrrbHHViVboJi2uyLEqxeM11Ds+8Yrt93u+42Aol9P14wYlgvYcvXUN5erffYawFSkPDg== dependencies: - "@abp/anchor-js" "~9.3.2" - "@abp/clipboard" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/popper.js" "~9.3.2" - "@abp/prismjs" "~9.3.2" + "@abp/anchor-js" "~9.3.3" + "@abp/clipboard" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/popper.js" "~9.3.3" + "@abp/prismjs" "~9.3.3" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/popper.js@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-9.3.2.tgz#9abfa7f635fca499836a757dca5918a85322069e" - integrity sha512-VkePozQx871bMpyYP3qJAXbTc5iA5feLU66zH+WBo2doqes+gq3RvQCrkJzNKT8uvb5vgHXSYMMpL5HwTxvtOQ== +"@abp/popper.js@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-9.3.3.tgz#23c729cbadec27a2452f81a32a88c7357963281d" + integrity sha512-vo5RQBQV9R0sF34283vGDdDAjlGHB/dukNae04RvhN4N/0hUYssRIyEQENRHCn86sWtrd8YKSUoOSPW2LPH6Cg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@popperjs/core" "^2.11.8" -"@abp/prismjs@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.2.tgz#2ea48bfa5ebcfd98962029eebeab374d63a4e242" - integrity sha512-q8bdUjk+IuP+nWzN8phgFjvKtOHR94OT5Sth7Rp64L68pVCJopihyth8f4mLZl7hMtwrro/5GFxjpR+KRNRpbg== +"@abp/prismjs@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-9.3.3.tgz#e34972d2943403fcfe4f41ec6771405afc553904" + integrity sha512-4LUIMa2elN9wpKJB3ndZz2XrntB4kCCeKZHvqpnwTwALsVsR+K5mVjR5jrsniJu4kJ0H51M+s/EMpgT6b1LQUA== dependencies: - "@abp/clipboard" "~9.3.2" - "@abp/core" "~9.3.2" + "@abp/clipboard" "~9.3.3" + "@abp/core" "~9.3.3" prismjs "^1.29.0" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== dependencies: just-compare "^2.3.0" diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs index a6359c2c9b..36edcb12d4 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs @@ -46,6 +46,7 @@ namespace Volo.Docs.Admin.Documents _elasticSearchService = elasticSearchService; LocalizationResource = typeof(DocsResource); + ObjectMapperContext = typeof(DocsAdminApplicationModule); } public virtual async Task ClearCacheAsync(ClearCacheInput input) diff --git a/modules/docs/src/Volo.Docs.Common.Application/Volo/Docs/Common/Projects/ProjectAppService.cs b/modules/docs/src/Volo.Docs.Common.Application/Volo/Docs/Common/Projects/ProjectAppService.cs index 96634a300e..eb5c9bc7db 100644 --- a/modules/docs/src/Volo.Docs.Common.Application/Volo/Docs/Common/Projects/ProjectAppService.cs +++ b/modules/docs/src/Volo.Docs.Common.Application/Volo/Docs/Common/Projects/ProjectAppService.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Caching.Distributed; using Volo.Abp.Application.Dtos; using Volo.Abp.Caching; using Volo.Abp.Data; +using Volo.Abp.Threading; using Volo.Docs.Caching; using Volo.Docs.Documents; using Volo.Docs.Projects; @@ -19,6 +21,8 @@ namespace Volo.Docs.Common.Projects private readonly IDocumentSourceFactory _documentSource; protected IDistributedCache LanguageCache { get; } + private readonly SemaphoreSlim _syncSemaphore = new SemaphoreSlim(1, 1); + public ProjectAppService( IProjectRepository projectRepository, IDistributedCache> versionCache, @@ -56,21 +60,31 @@ namespace Volo.Docs.Common.Projects public virtual async Task> GetVersionsAsync(string shortName) { var project = await _projectRepository.GetByShortNameAsync(shortName); - - var versions = await _versionCache.GetOrAddAsync( - CacheKeyGenerator.GenerateProjectVersionsCacheKey(project), - () => GetVersionsAsync(project), - () => new DistributedCacheEntryOptions + using (await _syncSemaphore.LockAsync()) + { + var versions = await _versionCache.GetAsync(CacheKeyGenerator.GenerateProjectVersionsCacheKey(project)); + if (versions.IsNullOrEmpty()) { - //TODO: Configurable? - AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(12), - SlidingExpiration = TimeSpan.FromMinutes(60) + versions = await GetVersionsAsync(project); + if (!versions.IsNullOrEmpty()) + { + await _versionCache.SetAsync( + CacheKeyGenerator.GenerateProjectVersionsCacheKey(project), + versions, + new DistributedCacheEntryOptions + { + //TODO: Configurable? + AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(12), + SlidingExpiration = TimeSpan.FromMinutes(60) + } + ); + } } - ); - return new ListResultDto( - ObjectMapper.Map, List>(versions) - ); + return new ListResultDto( + ObjectMapper.Map, List>(versions) + ); + } } protected virtual async Task> GetVersionsAsync(Project project) diff --git a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanWebDocumentSectionRenderer.cs b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanWebDocumentSectionRenderer.cs index e4a26b2df6..48379765ec 100644 --- a/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanWebDocumentSectionRenderer.cs +++ b/modules/docs/src/Volo.Docs.Web/HtmlConverting/ScribanWebDocumentSectionRenderer.cs @@ -1,22 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System.Collections.Generic; using System.Threading.Tasks; -using Scriban; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Volo.Abp; -using Volo.Abp.ObjectMapping; using Volo.Docs.Documents.Rendering; -using Volo.Extensions; namespace Volo.Docs.HtmlConverting { public class ScribanWebDocumentSectionRenderer : ScribanDocumentSectionRenderer, IWebDocumentSectionRenderer { - private IObjectMapper ObjectMapper { get; set; } - public Task GetDocumentNavigationsAsync(string documentContent) { return GetSectionAsync(documentContent, DocsNav); @@ -35,4 +24,4 @@ namespace Volo.Docs.HtmlConverting return templates; } } -} \ No newline at end of file +} diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/package.json b/modules/openiddict/app/OpenIddict.Demo.Server/package.json index 255027fa5f..8097db43a4 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/package.json +++ b/modules/openiddict/app/OpenIddict.Demo.Server/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3" } } diff --git a/modules/openiddict/app/angular/package.json b/modules/openiddict/app/angular/package.json index 815442652f..e64b663083 100644 --- a/modules/openiddict/app/angular/package.json +++ b/modules/openiddict/app/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~9.3.2", - "@abp/ng.components": "~9.3.2", - "@abp/ng.core": "~9.3.2", - "@abp/ng.oauth": "~9.3.2", - "@abp/ng.identity": "~9.3.2", - "@abp/ng.setting-management": "~9.3.2", - "@abp/ng.tenant-management": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2", - "@abp/ng.theme.lepton-x": "~4.3.2", + "@abp/ng.account": "~9.3.3", + "@abp/ng.components": "~9.3.3", + "@abp/ng.core": "~9.3.3", + "@abp/ng.oauth": "~9.3.3", + "@abp/ng.identity": "~9.3.3", + "@abp/ng.setting-management": "~9.3.3", + "@abp/ng.tenant-management": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3", + "@abp/ng.theme.lepton-x": "~4.3.3", "@angular/animations": "^15.0.1", "@angular/common": "^15.0.1", "@angular/compiler": "^15.0.1", @@ -36,7 +36,7 @@ "zone.js": "~0.11.4" }, "devDependencies": { - "@abp/ng.schematics": "~9.3.2", + "@abp/ng.schematics": "~9.3.3", "@angular-devkit/build-angular": "^15.0.1", "@angular-eslint/builder": "~15.1.0", "@angular-eslint/eslint-plugin": "~15.1.0", diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs index 28abc4d75b..e628c39644 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs @@ -9,6 +9,7 @@ using Volo.Abp.Authorization.Permissions; using Volo.Abp.Localization; using Volo.Abp.MultiTenancy; using Volo.Abp.SimpleStateChecking; +using Volo.Abp.PermissionManagement.Localization; namespace Volo.Abp.PermissionManagement; @@ -26,6 +27,9 @@ public class PermissionAppService : ApplicationService, IPermissionAppService IOptions options, ISimpleStateCheckerManager simpleStateCheckerManager) { + LocalizationResource = typeof(AbpPermissionManagementResource); + ObjectMapperContext = typeof(AbpPermissionManagementApplicationModule); + Options = options.Value; PermissionManager = permissionManager; PermissionDefinitionManager = permissionDefinitionManager; diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index cd3be870a1..fcacf10ab3 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -31,11 +31,8 @@ public partial class PermissionManagementModal protected string _selectedTabName; - protected int _grantedPermissionCount = 0; - protected int _notGrantedPermissionCount = 0; - protected bool _selectAllDisabled; - + protected string _permissionGroupSearchText; protected bool GrantAll { get; set; } @@ -62,8 +59,8 @@ public partial class PermissionManagementModal _groups = _allGroups.ToList(); NormalizePermissionGroup(); - - GrantAll = _notGrantedPermissionCount == 0; + + GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted); await InvokeAsync(_modal.Show); } @@ -76,17 +73,14 @@ public partial class PermissionManagementModal protected virtual async Task GrantAllAsync(bool grantAll) { GrantAll = grantAll; - + if (_allGroups == null) { return; } - - _grantedPermissionCount = 0; - _notGrantedPermissionCount = 0; await OnPermissionGroupSearchTextChangedAsync(string.Empty); - + foreach (var permission in _allGroups.SelectMany(x => x.Permissions)) { if (IsDisabledPermission(permission)) @@ -95,49 +89,28 @@ public partial class PermissionManagementModal } permission.IsGranted = grantAll; - - if (grantAll) - { - _grantedPermissionCount++; - } - else - { - _notGrantedPermissionCount++; - } } - + await InvokeAsync(StateHasChanged); } - + protected virtual void NormalizePermissionGroup(bool checkDisabledPermissions = true) { _selectAllDisabled = _groups.All(IsPermissionGroupDisabled); - _grantedPermissionCount = 0; - _notGrantedPermissionCount = 0; if (checkDisabledPermissions) { _disabledPermissions.Clear(); } - + foreach (var permission in _groups.SelectMany(x => x.Permissions)) { if (checkDisabledPermissions && permission.IsGranted && permission.GrantedProviders.All(x => x.ProviderName != _providerName)) { _disabledPermissions.Add(permission); - continue; - } - - if (permission.IsGranted) - { - _grantedPermissionCount++; - } - else - { - _notGrantedPermissionCount++; } } - + foreach (var group in _groups) { SetPermissionDepths(group.Permissions, null, 0); @@ -210,7 +183,7 @@ public partial class PermissionManagementModal return _permissionDepths.GetValueOrDefault(name, 0); } - protected virtual void GroupGrantAllChanged(bool value, PermissionGroupDto permissionGroup) + protected virtual async Task GroupGrantAllChanged(bool value, PermissionGroupDto permissionGroup) { foreach (var permission in permissionGroup.Permissions) { @@ -219,9 +192,12 @@ public partial class PermissionManagementModal SetPermissionGrant(permission, value); } } + + GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + await InvokeAsync(StateHasChanged); } - protected virtual void PermissionChanged(bool value, PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) + protected virtual async Task PermissionChanged(bool value, PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) { SetPermissionGrant(permission, value); @@ -238,6 +214,9 @@ public partial class PermissionManagementModal SetPermissionGrant(childPermission, false); } } + + GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + await InvokeAsync(StateHasChanged); } private void SetParentPermissionGrant(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) @@ -261,17 +240,6 @@ public partial class PermissionManagementModal return; } - if (value) - { - _grantedPermissionCount++; - _notGrantedPermissionCount--; - } - else - { - _grantedPermissionCount--; - _notGrantedPermissionCount++; - } - permission.IsGranted = value; } @@ -338,22 +306,22 @@ public partial class PermissionManagementModal return permissions.All(x => x.IsGranted) && grantedProviders.Any(p => p.ProviderName != _providerName); } - + protected virtual async Task OnPermissionGroupSearchTextChangedAsync(string value) { if (value == _permissionGroupSearchText) { return; } - + _permissionGroupSearchText = value; _groups = _permissionGroupSearchText.IsNullOrWhiteSpace() ? _allGroups.ToList() : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase) || x.Permissions.Any(permission => permission.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase))).ToList(); - + NormalizePermissionGroup(false); await InvokeAsync(StateHasChanged); } - + protected virtual Task OnSelectedTabChangedAsync(string name) { _selectedTabName = name; diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json index 4da72f48d3..37101210a7 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/package.json @@ -3,6 +3,6 @@ "name": "demo-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3" } } diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock index 13950786c8..06fb5e9906 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock @@ -2,185 +2,185 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.2.tgz#92907ca78607515c8fd5696e00ad3b65b42881a7" - integrity sha512-wmXGPoKkbR2sCErFdAT37HxYbCbfN0IAd0CGo8aMaQkFzzenq1b9omnN6l9+xd91Q3WcjUcWhpCJLYurcdbgOA== +"@abp/aspnetcore.mvc.ui.theme.basic@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-9.3.3.tgz#71c2003dbc5ccd6d9f78740c28bb52d57452f4d7" + integrity sha512-YqFGHIw/jAQ02jU4FGUay/pQQGWAA/815YoQskFNxc4R0hlGRS6YrR+kSAzRjmMkeRn9gM/KtndLWiygv1fbEQ== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~9.3.3" -"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.2.tgz#94089c3dcac4571c5fcb9bdb754e5df28a24e966" - integrity sha512-eRSvhLimwf65KKI1P/DZgQK+l300EwX4r2S4XYL0gJjjXI9aeIDQuPEqGZs2a6P5/zfejFvefqCIcG5EfEH9ew== +"@abp/aspnetcore.mvc.ui.theme.shared@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-9.3.3.tgz#6886575725904f7b8f08234e0057ee851a68735d" + integrity sha512-zv1BL054q3VnqZXjd4fa2E7es/Gs8HsFfp3jWljRwEOytdG1PyHo5++ChM3FlB4+mIXq1On4leST3sDVxa75Sw== dependencies: - "@abp/aspnetcore.mvc.ui" "~9.3.2" - "@abp/bootstrap" "~9.3.2" - "@abp/bootstrap-datepicker" "~9.3.2" - "@abp/bootstrap-daterangepicker" "~9.3.2" - "@abp/datatables.net-bs5" "~9.3.2" - "@abp/font-awesome" "~9.3.2" - "@abp/jquery-form" "~9.3.2" - "@abp/jquery-validation-unobtrusive" "~9.3.2" - "@abp/lodash" "~9.3.2" - "@abp/luxon" "~9.3.2" - "@abp/malihu-custom-scrollbar-plugin" "~9.3.2" - "@abp/moment" "~9.3.2" - "@abp/select2" "~9.3.2" - "@abp/sweetalert2" "~9.3.2" - "@abp/timeago" "~9.3.2" - -"@abp/aspnetcore.mvc.ui@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.2.tgz#5cab40d0f17eea2ae97a0d25fa238e52b5e8ef91" - integrity sha512-C73MB6abc531CmYyRctZXtKUY/0t+hhBQg5fIbzdJaR8SCSHEh2v9j2ZAhKFU0kectdrpKrLroOihOWYMfuWdQ== + "@abp/aspnetcore.mvc.ui" "~9.3.3" + "@abp/bootstrap" "~9.3.3" + "@abp/bootstrap-datepicker" "~9.3.3" + "@abp/bootstrap-daterangepicker" "~9.3.3" + "@abp/datatables.net-bs5" "~9.3.3" + "@abp/font-awesome" "~9.3.3" + "@abp/jquery-form" "~9.3.3" + "@abp/jquery-validation-unobtrusive" "~9.3.3" + "@abp/lodash" "~9.3.3" + "@abp/luxon" "~9.3.3" + "@abp/malihu-custom-scrollbar-plugin" "~9.3.3" + "@abp/moment" "~9.3.3" + "@abp/select2" "~9.3.3" + "@abp/sweetalert2" "~9.3.3" + "@abp/timeago" "~9.3.3" + +"@abp/aspnetcore.mvc.ui@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-9.3.3.tgz#16aca3844bccb24317f65f3a419cad34f9aa6387" + integrity sha512-bp1syI3exn3YBSoDertHxF1CVmEUIRHLCPr/+K1DLuBxW6KUPnDIpnJVVhXsO7EmwwzzukJF99utPXNGgQXnIg== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.2.tgz#e156b0715b87a182e2cf3132436559e7c47f8987" - integrity sha512-8tDHiFvppm5YlIaLL0IfRd9r/YtyV4+bIp8zuIDeVW6eUvFd1ueuifCzf89vZXRf18PLR8JAiYFdBOx9+8CjZw== +"@abp/bootstrap-datepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-9.3.3.tgz#7c2e9f153d4bac45858e0d3dcfe6a382302d9c7f" + integrity sha512-kBjnpD0w2BCzEX3gw1ua+dlioAZ6xQigN4aQNpHumrDamAZ+ULhDiUTMJ8ofwlyM9nEryK9NP2+3Bm42iTSWPw== dependencies: bootstrap-datepicker "^1.10.0" -"@abp/bootstrap-daterangepicker@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.2.tgz#19c2f5088ef8cf1cdc4483376f28faa2ca172f18" - integrity sha512-ygyUkiffq5Dry5yuyAzCKnlymbGZZ5f8es9d+dXLjp5lzk8K88LI4jTaIhm/Gc7wzKhFmHMpOIFYIRMzwvMmRQ== +"@abp/bootstrap-daterangepicker@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-9.3.3.tgz#6420b359ac440d9d76b1cf47ea28f6ad345a2607" + integrity sha512-l5A2NaBDt5o5mePDoLvrWcDX1wj50o+q3OmFVm6x7lHfjOw+1iCxqv2A2GEye1TZeQ8yxCQOn+aUd7OdLUwE7Q== dependencies: bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.2.tgz#53dc0d68d15c60d36200d711b4f5a0acef15096b" - integrity sha512-vrUux40RDPx7hBXp2u5evRpm2LHRwHmRhmtTXx6ltQ8Aq7BwD9BvqBZEgg5GB5L9MGy5oy5Wm57t9ooQ8qmLgg== +"@abp/bootstrap@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-9.3.3.tgz#7fafbe0a6fb6cf051c63943361bcc3ee7159d506" + integrity sha512-O1Nv4cXkChcmlcDmszKGDqDZs1ofcmftkMSSGKYCpdJYEHBuGPhC8v29NDLCE3BLgoZjs8BJd3YpPh/cnJoJrA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" bootstrap "^5.3.3" -"@abp/core@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.2.tgz#10f0a485affb15d51c319bbdf88c1bfa24b5b778" - integrity sha512-y3kkP9+PBG1xxiHDXPk+kYs1BzbAytVRg611vKhCejHntMSD3cD4vCg4NW5oNEtCktNRBYcnQICdgLElAX/koQ== +"@abp/core@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-9.3.3.tgz#f87e8de30d0e496eebc6ba4db8ffb2a33ef5b591" + integrity sha512-P/B81S+8jkcRv+QsqczWJq9pk0hQk42mg8bpCnlUif9zyUSq2wsWNwulwC5HJAauLf3UvIcOrarpK8T1X/4cVw== dependencies: - "@abp/utils" "~9.3.2" + "@abp/utils" "~9.3.3" -"@abp/datatables.net-bs5@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.2.tgz#89a3664c2ee0e98b16a41894f04f12edcf7b7780" - integrity sha512-llju5jfVIppot59cQ4cBGJdl9VA156mDI5V+h5ZHGBmVvwG79R/mUd3D49XmqQGBke95K1Z49R7V/JxYqa6F+Q== +"@abp/datatables.net-bs5@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-9.3.3.tgz#12e4011edb151bd8ce8e38f4f83b84062087dbe6" + integrity sha512-+Dn0njWJXdr0g/gMS89njzEHvP4oScUdROZaT40CvFxssN3lIkD3+AYi4QPv+onPGKZQ6D9+K+T1yk9/mrwzDA== dependencies: - "@abp/datatables.net" "~9.3.2" + "@abp/datatables.net" "~9.3.3" datatables.net-bs5 "^2.1.8" -"@abp/datatables.net@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.2.tgz#ee5cd8cb286211404d50593b33ea532f1b7cb9f1" - integrity sha512-JK6XgZeP2diBOnC9jSml0kYc1uvbU09yz4GOyPmh/QZiGdS4vonRKfjIXdFd0YbxK0qAPZO+MzZuwqvZSA6nyA== +"@abp/datatables.net@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-9.3.3.tgz#ac5281b921e152ae07d73a0061856f4598d33acf" + integrity sha512-4q4gKK3W3x6xXgvj+BYuXMZjSOgU4yecbLvQZkYGvoXk2KJ8PvQUz1ay5W2mJJmX0cvYvIX7ni5uhnEFdKxmZQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" datatables.net "^2.1.8" -"@abp/font-awesome@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.2.tgz#b0659aeec243a4fe3c851a98a79673292c2687b1" - integrity sha512-7esRWpT7PFMPSVhGPKb3DGq1h5n/R2xmusurbGDGhTHckiOfna8tQerZ6A9YdRsM2kIIDisWbuSzBkoM8hqfCQ== +"@abp/font-awesome@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-9.3.3.tgz#d9727d6652f419ca0f876a02932d226fa7a39370" + integrity sha512-n8XvR9Xr2u6yH2QEQpiu2RU3Br3hNx+ItSQ0ncp81wjYhR007NbOJvjDoQJFiuzgPKZdPNDbPbiiBv9L0oIgAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" "@fortawesome/fontawesome-free" "^6.6.0" -"@abp/jquery-form@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.2.tgz#17d0fe0a81d61e2e96131379e82872e5e45a2d5b" - integrity sha512-IwXWBRbtLhdB6/pJwQsWJHqLDHpZfJoA6x48A/GbTQLgWhpt0/OainDZsEUH3o0TWMhgJU+tp274uPENlG3DzQ== +"@abp/jquery-form@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-9.3.3.tgz#37d7e1c16b932e439e2127844991496b6557c094" + integrity sha512-B8uDWM13O+fB/TAN7xfMskLC0Qq8327waqpuctiulALz7uM4Ri1txANMp4+ftf25dxMeii/J4k6BSGer8K520Q== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.2.tgz#f13183ed7108cdea1500f18b1f80aff3037132ce" - integrity sha512-0v0Rhj3bir91cqwhlxDuD0PqwEYceyqLYf6K5eFF1/nE+1wN1VIST/oLN1Xis9x4NswbnnKai+OST0fqagpuhg== +"@abp/jquery-validation-unobtrusive@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-9.3.3.tgz#3882d15076fcf4ef6a197648c84b9edd91435235" + integrity sha512-csWL1+h/aRkU71uoxsKCuGZU9zloPdY6WB1uSBCFDTJ4aBy6gkdtAZGwsXHsJZ4AiHwL+d22P9XVSF1MhKB+MQ== dependencies: - "@abp/jquery-validation" "~9.3.2" + "@abp/jquery-validation" "~9.3.3" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.2.tgz#8ec072e2babb5d75aa1088a3754b837b7387df76" - integrity sha512-JCquJcN0FAF+8TQOYgbqeDZqPIwy2mWVDtHKCts2lVj8ol+sQgWCOhZDx11sl1oqVZjkvdOmKMgWHDztdoUojA== +"@abp/jquery-validation@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-9.3.3.tgz#daea2a288e8c440051af21ebf519f7e40b4d27d3" + integrity sha512-nU6a04fiaZuHXRnV+J++AwcyZOxEvW6i4yqm2PzFT9OCbDk1E3X5S1ntO7sGlCcppxj0pSp3uL2Jxq5d4gq+qg== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" jquery-validation "^1.21.0" -"@abp/jquery@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.2.tgz#edb3d65bdbd3885af72759ce0cd9d813ab41aade" - integrity sha512-i4scUZt6q09jhl8YTtQrPg+GV5Vd1QW57hHesYmgor8pLD87JU7cc5sCEJlmmtzVZsXjDkVuiyD2sOUXSItxMw== +"@abp/jquery@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-9.3.3.tgz#5c3ab4dfa820d9f2eb19fecc65194f0211d5bf37" + integrity sha512-5Nfw287+JugPCnm/KK8fjT4e5zHiwnL8w9OSAHVmf9UBcuJ2yBc+b8mklqy5pLt+jObouE5wJUOtENxgkgSkAw== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" jquery "~3.7.1" -"@abp/lodash@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.2.tgz#d3ca624dd8927d33cf8728403ef591977b9e11f4" - integrity sha512-4XOhLKa/reKB85DyHtz1obC96j2VJs9+xqlO8Pn58hXP396cMEMuC1MfjHMwhPuMVHwgffg0UCfukKKf/UGJ/w== +"@abp/lodash@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-9.3.3.tgz#a60a41088288da41fa61b09cd747f1fde3c3ec40" + integrity sha512-GsAJPMGNHZcVHQWJMCEQ7oWSeRwmHx0n2oWLQOQoyFQu1itZeJy2dFE+nSIb2jAQ7sfKZVNw7OrEqN/VqgEoUg== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" lodash "^4.17.21" -"@abp/luxon@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.2.tgz#806464e828adf6b99a9620f3c39a16f8621ecd84" - integrity sha512-oP74Q9/FJ8QpB7yVOycFlfsGhPKFUk6NTnoT+cVRNg0wpUkRRjg5WTkZeKLoVxKNk9RwA/9fa6MnBiiNs2z/Pg== +"@abp/luxon@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-9.3.3.tgz#5742a90953bf0b24fa129f5a6a4c32dbdc134553" + integrity sha512-+AqTiMhN8Z8Khmv/9aBPwasNVcboJa9BV3WdJ5Nccwo2OEN7Wycw6TkRnb42fbUpzXAvxvwv9cSDHjRBib299A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" luxon "^3.5.0" -"@abp/malihu-custom-scrollbar-plugin@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.2.tgz#71069a6abd8a9456f0fc6227ee17b93300ad6030" - integrity sha512-6pFO68hvtbGiGTaxkzTPnzJA2NZkzE+acWlTfBvSVyMvZM1jER5wYJmDpflZO+WPtTTu9CUflTwvYw2TiNKlUg== +"@abp/malihu-custom-scrollbar-plugin@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-9.3.3.tgz#93a649bb621a47fb50b9b776fb864a07ccdff287" + integrity sha512-w83FD8mqGkhvoAEu0DwzcrmX1wwyKwVRkvfYmxjhokD7+Hq1FyuFDMO51F8hh590I2wzWCX8NvAVUP24viOY+A== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.2.tgz#150548dd2b817d586f87113abb40c85f9b1ab406" - integrity sha512-TdHeqPPEPk00/5vKbGHY6D74XlzfRM2Kb4WVvykVx2gjzScp5Sfunpus/A9UCOYls/bWp1MVMT7V0ExBXYPyNg== +"@abp/moment@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-9.3.3.tgz#622c424350620e0215a0a04059dfd3e18022fd69" + integrity sha512-m/xV11aWOZKTVVyGsX2mZl9ondcP8pWSmjmUKVNLrFSul4pRNgfM2ZeaKiaOLApkyOSZDzCEMUYbEf+dM2/rcg== dependencies: moment "^2.30.1" -"@abp/select2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.2.tgz#5c069ff7a9fcb9e78bd4a8591d1e5eac6d66f03f" - integrity sha512-/N5bJjyLQnN8zPovRrmrcYhiUxG/RTI6kNaH0QW/QEsryfuX24wdDWrRXacsJ1QKlMxig++IHRnpMBrHhxAKUw== +"@abp/select2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-9.3.3.tgz#8ef9bc3d3674d515d7b7f9060d77831246d03b6a" + integrity sha512-2g8LkLBu1Ooaxj6utYne1gPMYG9888l/mEFMJU5iHOPXS0vz4lANw+VjtawapFtP6yRSiD2/qJtOt0C5rQq1yA== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" select2 "^4.0.13" -"@abp/sweetalert2@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.2.tgz#1ada87b720faef1289aa5fdcf42c0f5c74ff4493" - integrity sha512-PUNbt7O6reTqDelUBGryullFDD5XeZkgQFn/FXbZVp6y0owHUyIlX+Jr7PIesWEB/RHuLa+uZoSywtVPH7fsEw== +"@abp/sweetalert2@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-9.3.3.tgz#b9d6075d9ede12509f27576f88d54f21598f37df" + integrity sha512-CeX5IWwxAu9M4jqNZBK6o59sVoDuFgxnffhHTMEP7pt8WzH+2uucxGe/21gXT/PW1c3EjSwP3Ri2MhtKOFZuyQ== dependencies: - "@abp/core" "~9.3.2" + "@abp/core" "~9.3.3" sweetalert2 "^11.14.1" -"@abp/timeago@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.2.tgz#fe4d184aed92dd265e3c9531c53bdc684abb3b52" - integrity sha512-GLimaRixGtZ5oiH3JLEmeUe54gePdSfVZtyJOvGcc0wQjQVOa5JgyTqktszb+pF4QVdeJr+ijz6RZlavwIY0EA== +"@abp/timeago@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-9.3.3.tgz#b116a7112c1d53588129587d5572dc0ae55567a5" + integrity sha512-L0X0yc8oS36eDx+8jvzreW4Cr4TnWESMceXihfOfuWbuOm4R58W4Cvx2/74XFiX/0if1WEg31P4Aj3LhpjgEaQ== dependencies: - "@abp/jquery" "~9.3.2" + "@abp/jquery" "~9.3.3" timeago "^1.6.7" -"@abp/utils@~9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.2.tgz#f2158e9858c8efcbd3f17bf6e79c41116ac66795" - integrity sha512-DtD07VHsDS5KPfn3jnL6f9WsfXEJVv7xUF+NcgW+HBTHnJTxunnE/OYGf/clTM4xeDb+RWl3AoGYP+kF4H/Snw== +"@abp/utils@~9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-9.3.3.tgz#e8cda12eb1f7432787072c2d5fe9905b7613e2ec" + integrity sha512-X1q9hod+Z6x/QypixI8BVvnMOqncQXM/Vs2Kq2p0jJJsNoerOFqGr+qLqZ5x3e5CoSz0H/38VjaG1yxIoq2exA== dependencies: just-compare "^2.3.0" diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor index e6accb0918..ad571fb448 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor @@ -13,20 +13,19 @@ - - - -
+ + @if (!string.IsNullOrEmpty(SelectedGroup)) + { + + @foreach (var group in SettingComponentCreationContext.Groups) { @group.DisplayName } -
-
- -
+ + @foreach (var group in SettingComponentCreationContext.Groups) { @@ -41,8 +40,8 @@ @SettingItemRenders.Last() } -
-
-
+ + + }
diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs index 123ff940c5..1b443fc827 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs @@ -43,23 +43,12 @@ public partial class SettingManagement SettingComponentCreationContext.Normalize(); SettingItemRenders.Clear(); - if (SettingComponentCreationContext.Groups.Any()) + if(SelectedGroup.IsNullOrEmpty() && SettingComponentCreationContext.Groups.Any()) { SelectedGroup = GetNormalizedString(SettingComponentCreationContext.Groups.First().Id); } } - protected override async Task OnAfterRenderAsync(bool firstRender) - { - if (firstRender) - { - await Task.Yield(); - await InvokeAsync(StateHasChanged); - } - - await base.OnAfterRenderAsync(firstRender); - } - protected virtual string GetNormalizedString(string value) { return value.Replace('.', '_'); diff --git a/modules/virtual-file-explorer/app/DemoApp.csproj b/modules/virtual-file-explorer/app/DemoApp.csproj index 938e3f03b1..50aa357f96 100644 --- a/modules/virtual-file-explorer/app/DemoApp.csproj +++ b/modules/virtual-file-explorer/app/DemoApp.csproj @@ -13,7 +13,7 @@ - + diff --git a/modules/virtual-file-explorer/app/DemoAppModule.cs b/modules/virtual-file-explorer/app/DemoAppModule.cs index ae03d3f2ed..4ffbc6c5d5 100644 --- a/modules/virtual-file-explorer/app/DemoAppModule.cs +++ b/modules/virtual-file-explorer/app/DemoAppModule.cs @@ -1,4 +1,4 @@ -using DemoApp.Data; +using DemoApp.Data; using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Account; @@ -8,7 +8,7 @@ using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; -using Volo.Abp.AutoMapper; +using Volo.Abp.Mapperly; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; @@ -32,7 +32,7 @@ namespace DemoApp; // ABP Framework packages typeof(AbpAspNetCoreMvcModule), typeof(AbpAutofacModule), - typeof(AbpAutoMapperModule), + typeof(AbpMapperlyModule), typeof(AbpSwashbuckleModule), typeof(AbpAspNetCoreSerilogModule), diff --git a/modules/virtual-file-explorer/app/package.json b/modules/virtual-file-explorer/app/package.json index 248bf04f9e..e51345e5da 100644 --- a/modules/virtual-file-explorer/app/package.json +++ b/modules/virtual-file-explorer/app/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2", - "@abp/virtual-file-explorer": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3", + "@abp/virtual-file-explorer": "~9.3.3" } } diff --git a/npm/lerna.json b/npm/lerna.json index eda8f7144c..1537cb6afb 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 8006f374a3..5c7c2d6cc2 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -42,8 +42,8 @@ }, "private": true, "devDependencies": { - "@abp/ng.theme.lepton-x": "~4.3.2", - "@abp/utils": "~9.3.2", + "@abp/ng.theme.lepton-x": "~4.3.3", + "@abp/utils": "~9.3.3", "@angular-devkit/build-angular": "~20.0.0", "@angular-devkit/core": "~20.0.0", "@angular-devkit/schematics": "~20.0.0", diff --git a/npm/ng-packs/packages/account-core/package.json b/npm/ng-packs/packages/account-core/package.json index 533ca334ac..a24af65e9e 100644 --- a/npm/ng-packs/packages/account-core/package.json +++ b/npm/ng-packs/packages/account-core/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account.core", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.core": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 830539bbd7..be91100f77 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.account", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.account.core": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html index 9555c58f4b..366398e444 100644 --- a/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html +++ b/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-table/extensible-table.component.html @@ -7,6 +7,11 @@ (activate)="tableActivate.emit($event)" (select)="onSelect($event)" [selected]="selected" + (scroll)="onScroll($event)" + [scrollbarV]="infiniteScroll" + [style.height]="getTableHeight()" + [loadingIndicator]="infiniteScroll && isLoading" + [footerHeight]="infiniteScroll ? false : 50" > @if(selectable) { @@ -40,8 +45,9 @@ @if (actionsTemplate || (actionList.length && hasAtLeastOnePermittedAction)) { @@ -59,7 +65,8 @@ @for (prop of propList; track prop.name; let i = $index) { implements OnChanges, AfterViewInit { +export class ExtensibleTableComponent implements OnChanges, AfterViewInit, OnDestroy { readonly #injector = inject(Injector); readonly getInjected = this.#injector.get.bind(this.#injector); protected readonly cdr = inject(ChangeDetectorRef); @@ -97,7 +100,7 @@ export class ExtensibleTableComponent implements OnChanges, AfterViewIn @Input() recordsTotal!: number; @Input() set actionsColumnWidth(width: number) { - this.setColumnWidths(width ? Number(width) : undefined); + this._actionsColumnWidth.set(width ? Number(width) : undefined); } @Input() actionsTemplate?: TemplateRef; @@ -110,14 +113,18 @@ export class ExtensibleTableComponent implements OnChanges, AfterViewIn this._selectionType = typeof value === 'string' ? SelectionType[value] : value; } _selectionType: SelectionType = SelectionType.multiClick; - - + @Input() selected: any[] = []; @Output() selectionChange = new EventEmitter(); - hasAtLeastOnePermittedAction: boolean; + // Infinite scroll configuration + @Input() infiniteScroll = false; + @Input() isLoading = false; + @Input() scrollThreshold = 10; + @Output() loadMore = new EventEmitter(); + @Input() tableHeight: number; - readonly columnWidths!: number[]; + hasAtLeastOnePermittedAction: boolean; readonly propList: EntityPropList; @@ -125,6 +132,24 @@ export class ExtensibleTableComponent implements OnChanges, AfterViewIn readonly trackByFn: TrackByFunction> = (_, item) => item.name; + // Signal for actions column width + private readonly _actionsColumnWidth = signal(DEFAULT_ACTIONS_COLUMN_WIDTH); + + // Infinite scroll: debounced load more subject + private readonly loadMoreSubject = new Subject(); + private readonly loadMoreSubscription = this.loadMoreSubject + .pipe(debounceTime(100), distinctUntilChanged()) + .subscribe(() => this.triggerLoadMore()); + + readonly columnWidths = computed(() => { + const actionsColumn = this._actionsColumnWidth(); + const widths = [actionsColumn]; + this.propList.forEach(({ value: prop }) => { + widths.push(prop.columnWidth); + }); + return widths; + }); + constructor() { const extensions = this.#injector.get(ExtensionsService); const name = this.#injector.get(EXTENSIONS_IDENTIFIER); @@ -136,15 +161,6 @@ export class ExtensibleTableComponent implements OnChanges, AfterViewIn this.permissionService.filterItemsByPolicy( this.actionList.toArray().map(action => ({ requiredPolicy: action.permission })), ).length > 0; - this.setColumnWidths(DEFAULT_ACTIONS_COLUMN_WIDTH); - } - - private setColumnWidths(actionsColumn: number | undefined) { - const widths = [actionsColumn]; - this.propList.forEach(({ value: prop }) => { - widths.push(prop.columnWidth); - }); - (this.columnWidths as any) = widths; } private getIcon(value: boolean) { @@ -242,10 +258,50 @@ export class ExtensibleTableComponent implements OnChanges, AfterViewIn this.selectionChange.emit(selected); } + onScroll(scrollEvent: Event): void { + if (!this.shouldHandleScroll()) { + return; + } + + const target = scrollEvent.target as HTMLElement; + if (!target) { + return; + } + + if (this.isNearScrollBottom(target)) { + this.loadMoreSubject.next(); + } + } + + private shouldHandleScroll(): boolean { + return this.infiniteScroll && !this.isLoading; + } + + private isNearScrollBottom(element: HTMLElement): boolean { + const { offsetHeight, scrollTop, scrollHeight } = element; + return offsetHeight + scrollTop >= scrollHeight - this.scrollThreshold; + } + + private triggerLoadMore(): void { + this.loadMore.emit(); + } + + getTableHeight() { + if (!this.infiniteScroll) return 'auto'; + + return this.tableHeight ? `${this.tableHeight}px` : 'auto'; + } + ngAfterViewInit(): void { - this.list?.requestStatus$?.pipe(filter(status => status === 'loading')).subscribe(() => { + if (!this.infiniteScroll) { + this.list?.requestStatus$?.pipe(filter(status => status === 'loading')).subscribe(() => { this.data = []; this.cdr.markForCheck(); }); + } + } + + ngOnDestroy(): void { + this.loadMoreSubscription.unsubscribe(); } } diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index b52f7830c7..d93d558aef 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.components", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=9.3.2", - "@abp/ng.theme.shared": ">=9.3.2" + "@abp/ng.core": ">=9.3.3", + "@abp/ng.theme.shared": ">=9.3.3" }, "dependencies": { "chart.js": "^3.5.1", diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index fd3db6eafa..ca0c74fee4 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.core", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "~9.3.2", + "@abp/utils": "~9.3.3", "just-clone": "^6.0.0", "just-compare": "^2.0.0", "ts-toolbelt": "^9.0.0", diff --git a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts index c53817264b..7dca0cd388 100644 --- a/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/dynamic-layout.component.ts @@ -1,4 +1,4 @@ -import { Component, inject, isDevMode, OnInit, Type } from '@angular/core'; +import { Component, inject, isDevMode, Type } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { eLayoutType } from '../enums/common'; import { ABP } from '../models'; @@ -13,6 +13,7 @@ import { TreeNode } from '../utils/tree-utils'; import { DYNAMIC_LAYOUTS_TOKEN } from '../tokens/dynamic-layout.token'; import { EnvironmentService } from '../services'; import { NgComponentOutlet } from '@angular/common'; +import { filter, take } from 'rxjs'; @Component({ selector: 'abp-dynamic-layout', @@ -24,7 +25,7 @@ import { NgComponentOutlet } from '@angular/common'; providers: [SubscriptionService], imports: [NgComponentOutlet], }) -export class DynamicLayoutComponent implements OnInit { +export class DynamicLayoutComponent { layout?: Type; layoutKey?: eLayoutType; readonly layouts = inject(DYNAMIC_LAYOUTS_TOKEN); @@ -40,7 +41,7 @@ export class DynamicLayoutComponent implements OnInit { protected readonly environment = inject(EnvironmentService); constructor() { - const dynamicLayoutComponent = inject(DynamicLayoutComponent, { optional: true, skipSelf: true })!; + const dynamicLayoutComponent = inject(DynamicLayoutComponent, { optional: true, skipSelf: true }); if (dynamicLayoutComponent) { if (isDevMode()) console.warn('DynamicLayoutComponent must be used only in AppComponent.'); @@ -48,17 +49,7 @@ export class DynamicLayoutComponent implements OnInit { } this.checkLayoutOnNavigationEnd(); this.listenToLanguageChange(); - } - - ngOnInit(): void { - if (this.layout) { - return; - } - - const { oAuthConfig } = this.environment.getEnvironment(); - if (oAuthConfig.responseType === 'code') { - this.getLayout(); - } + this.listenToEnvironmentChange(); } private checkLayoutOnNavigationEnd() { @@ -120,4 +111,19 @@ export class DynamicLayoutComponent implements OnInit { private getComponent(key: string): ReplaceableComponents.ReplaceableComponent | undefined { return this.replaceableComponents.get(key); } + + private listenToEnvironmentChange() { + this.environment + .createOnUpdateStream(x => x.oAuthConfig) + .pipe( + take(1), + filter(config => config.responseType === 'code'), + ) + .subscribe(() => { + if (this.layout) { + return; + } + this.getLayout(); + }); + } } diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index cb7d451359..70d4587a72 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.theme.shared": "~9.3.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/generators/package.json b/npm/ng-packs/packages/generators/package.json index 62a254f0b7..aa6c822161 100644 --- a/npm/ng-packs/packages/generators/package.json +++ b/npm/ng-packs/packages/generators/package.json @@ -1,6 +1,6 @@ { "name": "@abp/nx.generators", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "generators": "./generators.json", "type": "commonjs", diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index ad0ec9610d..87562d6dc5 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.identity", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~9.3.2", - "@abp/ng.permission-management": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.components": "~9.3.3", + "@abp/ng.permission-management": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/oauth/package.json b/npm/ng-packs/packages/oauth/package.json index 7a8a2dae8b..1cabe81905 100644 --- a/npm/ng-packs/packages/oauth/package.json +++ b/npm/ng-packs/packages/oauth/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.oauth", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~9.3.2", - "@abp/utils": "~9.3.2", + "@abp/ng.core": "~9.3.3", + "@abp/utils": "~9.3.3", "angular-oauth2-oidc": "^20.0.0", "just-clone": "^6.0.0", "just-compare": "^2.0.0", diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index 368c1d10bf..f46fefaceb 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.theme.shared": "~9.3.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index 3593ddbaca..1cc6932f3c 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.schematics", - "version": "9.3.2", + "version": "9.3.3", "author": "", "schematics": "./collection.json", "dependencies": { diff --git a/npm/ng-packs/packages/schematics/src/utils/service.ts b/npm/ng-packs/packages/schematics/src/utils/service.ts index 1280aa3aef..53eaa1d501 100644 --- a/npm/ng-packs/packages/schematics/src/utils/service.ts +++ b/npm/ng-packs/packages/schematics/src/utils/service.ts @@ -124,7 +124,7 @@ export function createActionToSignatureMapper() { } let type = adaptType(p.typeSimple); - if (p.typeSimple === 'enum' || p.typeSimple === '[enum]') { + if (p.typeSimple === 'enum' || p.typeSimple === '[enum]' || p.typeSimple === 'enum?' || p.typeSimple === '[enum]?') { type = adaptType(p.type); } diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 3123b24bc2..8245bc940c 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.setting-management", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.components": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index 185e677a0e..755948f49d 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.tenant-management", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.feature-management": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 132d7916be..0b222f3278 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.theme.basic", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.account.core": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 5015810221..c2e8f3b5c5 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "9.3.2", + "version": "9.3.3", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~9.3.2", + "@abp/ng.core": "~9.3.3", "@fortawesome/fontawesome-free": "^6.0.0", "@ng-bootstrap/ng-bootstrap": "~19.0.0", "@ngx-validate/core": "^0.2.0", diff --git a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts index 87ac4b9ce1..0754300b0f 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/directives/ngx-datatable-list.directive.ts @@ -111,10 +111,13 @@ export class NgxDatatableListDirective implements OnChanges, OnInit, DoCheck { const spinnerRef = this.viewContainerRef.createComponent(SpinnerComponent); const spinnerElement = spinnerRef.location.nativeElement; - if (placeholder?.parentNode === parent) { - this.renderer.insertBefore(parent, spinnerElement, placeholder); + + this.renderer.insertBefore(parent, spinnerElement, parent.firstChild); + + const placeholderParent = placeholder?.parentNode as Element | null; + if (placeholderParent) { + this.renderer.removeChild(placeholderParent, placeholder); } - this.renderer.removeChild(parent, placeholder); } protected setInitialValues() { @@ -185,4 +188,4 @@ export class NgxDatatableListDirective implements OnChanges, OnInit, DoCheck { this.setTablePage(maxPage); } } -} +} \ No newline at end of file diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index 5a91e33085..95c53b9256 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "anchor-js": "^5.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/aspnetcore.components.server.basictheme/package.json b/npm/packs/aspnetcore.components.server.basictheme/package.json index 45459bfd87..4669a13ab9 100644 --- a/npm/packs/aspnetcore.components.server.basictheme/package.json +++ b/npm/packs/aspnetcore.components.server.basictheme/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/aspnetcore.components.server.basictheme", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.components.server.theming": "~9.3.2" + "@abp/aspnetcore.components.server.theming": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.components.server.theming/package.json b/npm/packs/aspnetcore.components.server.theming/package.json index c628f7c02c..6ef0c3a3fd 100644 --- a/npm/packs/aspnetcore.components.server.theming/package.json +++ b/npm/packs/aspnetcore.components.server.theming/package.json @@ -1,12 +1,12 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/aspnetcore.components.server.theming", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/bootstrap": "~9.3.2", - "@abp/font-awesome": "~9.3.2" + "@abp/bootstrap": "~9.3.3", + "@abp/font-awesome": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index f195d02502..b5d1571142 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.shared": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 05adc9b35c..5741f908d3 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "repository": { "type": "git", @@ -10,21 +10,21 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~9.3.2", - "@abp/bootstrap": "~9.3.2", - "@abp/bootstrap-datepicker": "~9.3.2", - "@abp/bootstrap-daterangepicker": "~9.3.2", - "@abp/datatables.net-bs5": "~9.3.2", - "@abp/font-awesome": "~9.3.2", - "@abp/jquery-form": "~9.3.2", - "@abp/jquery-validation-unobtrusive": "~9.3.2", - "@abp/lodash": "~9.3.2", - "@abp/luxon": "~9.3.2", - "@abp/malihu-custom-scrollbar-plugin": "~9.3.2", - "@abp/moment": "~9.3.2", - "@abp/select2": "~9.3.2", - "@abp/sweetalert2": "~9.3.2", - "@abp/timeago": "~9.3.2" + "@abp/aspnetcore.mvc.ui": "~9.3.3", + "@abp/bootstrap": "~9.3.3", + "@abp/bootstrap-datepicker": "~9.3.3", + "@abp/bootstrap-daterangepicker": "~9.3.3", + "@abp/datatables.net-bs5": "~9.3.3", + "@abp/font-awesome": "~9.3.3", + "@abp/jquery-form": "~9.3.3", + "@abp/jquery-validation-unobtrusive": "~9.3.3", + "@abp/lodash": "~9.3.3", + "@abp/luxon": "~9.3.3", + "@abp/malihu-custom-scrollbar-plugin": "~9.3.3", + "@abp/moment": "~9.3.3", + "@abp/select2": "~9.3.3", + "@abp/sweetalert2": "~9.3.3", + "@abp/timeago": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/aspnetcore.mvc.ui/package-lock.json b/npm/packs/aspnetcore.mvc.ui/package-lock.json index b60f37d05c..db6b98090c 100644 --- a/npm/packs/aspnetcore.mvc.ui/package-lock.json +++ b/npm/packs/aspnetcore.mvc.ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "@abp/aspnetcore.mvc.ui", - "version": "9.3.2", + "version": "9.3.3", "lockfileVersion": 1, "requires": true, "packages": { diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 66bba515cb..6056aefe1a 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/aspnetcore.mvc.ui", "repository": { "type": "git", diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index b434c79bc8..16988d0c8f 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~9.3.2", - "@abp/owl.carousel": "~9.3.2", - "@abp/prismjs": "~9.3.2", - "@abp/tui-editor": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.shared": "~9.3.3", + "@abp/owl.carousel": "~9.3.3", + "@abp/prismjs": "~9.3.3", + "@abp/tui-editor": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 45ac16193f..c1bb75cdb3 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/bootstrap-datepicker", "repository": { "type": "git", diff --git a/npm/packs/bootstrap-daterangepicker/package.json b/npm/packs/bootstrap-daterangepicker/package.json index 3fc34e5e8b..20da35308d 100644 --- a/npm/packs/bootstrap-daterangepicker/package.json +++ b/npm/packs/bootstrap-daterangepicker/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/bootstrap-daterangepicker", "repository": { "type": "git", diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 3ecbb3b611..2a98a31bc2 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/bootstrap", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "bootstrap": "^5.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index e21459ffa2..df47f12bbd 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index a17e0d3281..3fbdc8b14c 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "clipboard": "^2.0.11" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/cms-kit.admin/package.json b/npm/packs/cms-kit.admin/package.json index 67bd67d435..b3ed120343 100644 --- a/npm/packs/cms-kit.admin/package.json +++ b/npm/packs/cms-kit.admin/package.json @@ -1,16 +1,16 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/cms-kit.admin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~9.3.2", - "@abp/jstree": "~9.3.2", - "@abp/markdown-it": "~9.3.2", - "@abp/slugify": "~9.3.2", - "@abp/tui-editor": "~9.3.2", - "@abp/uppy": "~9.3.2" + "@abp/codemirror": "~9.3.3", + "@abp/jstree": "~9.3.3", + "@abp/markdown-it": "~9.3.3", + "@abp/slugify": "~9.3.3", + "@abp/tui-editor": "~9.3.3", + "@abp/uppy": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cms-kit.public/package.json b/npm/packs/cms-kit.public/package.json index d807de4ed2..6ea991b582 100644 --- a/npm/packs/cms-kit.public/package.json +++ b/npm/packs/cms-kit.public/package.json @@ -1,12 +1,12 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/cms-kit.public", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/highlight.js": "~9.3.2", - "@abp/star-rating-svg": "~9.3.2" + "@abp/highlight.js": "~9.3.3", + "@abp/star-rating-svg": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cms-kit/package.json b/npm/packs/cms-kit/package.json index 2a22618cba..766e7afa2b 100644 --- a/npm/packs/cms-kit/package.json +++ b/npm/packs/cms-kit/package.json @@ -1,12 +1,12 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/cms-kit", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/cms-kit.admin": "~9.3.2", - "@abp/cms-kit.public": "~9.3.2" + "@abp/cms-kit.admin": "~9.3.3", + "@abp/cms-kit.public": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index dfb0551d7d..227cde9615 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "codemirror": "^5.65.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index c8cf08d756..feda9396ee 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/core", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/utils": "~9.3.2" + "@abp/utils": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index 2dfc9268a2..ff0f875055 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "cropperjs": "^1.6.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index f353c4a4ec..8c9f9b6e76 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/datatables.net-bs4", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/datatables.net": "~9.3.2", + "@abp/datatables.net": "~9.3.3", "datatables.net-bs4": "^2.1.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net-bs5/package.json b/npm/packs/datatables.net-bs5/package.json index a71fc10553..d37dffacf8 100644 --- a/npm/packs/datatables.net-bs5/package.json +++ b/npm/packs/datatables.net-bs5/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/datatables.net-bs5", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~9.3.2", + "@abp/datatables.net": "~9.3.3", "datatables.net-bs5": "^2.1.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index 1621a86211..fa27d3228d 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/datatables.net", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~9.3.2", + "@abp/jquery": "~9.3.3", "datatables.net": "^2.1.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index de27b7c930..9a39238556 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~9.3.2", - "@abp/clipboard": "~9.3.2", - "@abp/malihu-custom-scrollbar-plugin": "~9.3.2", - "@abp/popper.js": "~9.3.2", - "@abp/prismjs": "~9.3.2" + "@abp/anchor-js": "~9.3.3", + "@abp/clipboard": "~9.3.3", + "@abp/malihu-custom-scrollbar-plugin": "~9.3.3", + "@abp/popper.js": "~9.3.3", + "@abp/prismjs": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index 10448865d5..fe843d1004 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" diff --git a/npm/packs/flag-icons/package.json b/npm/packs/flag-icons/package.json index 8db3c72fb0..b4ae06d57c 100644 --- a/npm/packs/flag-icons/package.json +++ b/npm/packs/flag-icons/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/flag-icons", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index d971d3fe01..2e355ad6b1 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/font-awesome", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "@fortawesome/fontawesome-free": "^6.6.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index d0d4373bb0..488a57f18b 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "@highlightjs/cdn-assets": "~11.10.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 68226e8402..fbcddee1f0 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/jquery-form", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~9.3.2", + "@abp/jquery": "~9.3.3", "jquery-form": "^4.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index 9cd157d675..c8769e2ed4 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/jquery-validation-unobtrusive", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~9.3.2", + "@abp/jquery-validation": "~9.3.3", "jquery-validation-unobtrusive": "^4.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index a677076474..3cf1c1c80d 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/jquery-validation", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~9.3.2", + "@abp/jquery": "~9.3.3", "jquery-validation": "^1.21.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 0691c57328..97bd3a15db 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/jquery", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "jquery": "~3.7.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index 983a961dc7..1f0421e6b8 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~9.3.2", + "@abp/jquery": "~9.3.3", "jstree": "^3.3.17" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 4e120d39ec..1192329661 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/lodash", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "lodash": "^4.17.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 0a4612a22f..9e2cd8cb9a 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/luxon", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "luxon": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index 92ed45f52e..e986b62d87 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/malihu-custom-scrollbar-plugin", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "malihu-custom-scrollbar-plugin": "^3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index 0af3d20772..31c1a6dc4f 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "markdown-it": "^14.1.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/moment/package.json b/npm/packs/moment/package.json index 0522b8fd26..c64cc53597 100644 --- a/npm/packs/moment/package.json +++ b/npm/packs/moment/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/moment", "repository": { "type": "git", diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index 1e38a47e9b..aeaafc293c 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index ac4530894a..bd4d6eb93d 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "@popperjs/core": "^2.11.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index fcff391c9a..84317300d5 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~9.3.2", - "@abp/core": "~9.3.2", + "@abp/clipboard": "~9.3.3", + "@abp/core": "~9.3.3", "prismjs": "^1.29.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/qrcode/package.json b/npm/packs/qrcode/package.json index 36d5c76a4d..472a0d6e98 100644 --- a/npm/packs/qrcode/package.json +++ b/npm/packs/qrcode/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/qrcode", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2" + "@abp/core": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index 7b7d4d5c6b..9a7de01e79 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/select2", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index 7d3ac14e21..0374fa4590 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "@microsoft/signalr": "~8.0.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/slugify/package.json b/npm/packs/slugify/package.json index 455a1b17f6..57af3403c5 100644 --- a/npm/packs/slugify/package.json +++ b/npm/packs/slugify/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/slugify", "publishConfig": { "access": "public" diff --git a/npm/packs/star-rating-svg/package.json b/npm/packs/star-rating-svg/package.json index 54c8080eec..a51ae9d7ae 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~9.3.2", + "@abp/jquery": "~9.3.3", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/sweetalert2/package.json b/npm/packs/sweetalert2/package.json index cbc8dfedca..e2b58a9c8b 100644 --- a/npm/packs/sweetalert2/package.json +++ b/npm/packs/sweetalert2/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/sweetalert2", "publishConfig": { "access": "public" @@ -10,7 +10,7 @@ "directory": "npm/packs/sweetalert2" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "sweetalert2": "^11.14.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index 4f53d0215e..21da270f14 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/timeago", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~9.3.2", + "@abp/jquery": "~9.3.3", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index 8e259f0c43..bd4a5ab5d9 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/toastr", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~9.3.2", + "@abp/jquery": "~9.3.3", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 410cb5417e..e847522d25 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,12 +1,12 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~9.3.2", - "@abp/prismjs": "~9.3.2" + "@abp/jquery": "~9.3.3", + "@abp/prismjs": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index dc075f11d4..5c7dafb7d8 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "uppy": "^4.4.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 477ed01ac7..d778726f3a 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "9.3.2", + "version": "9.3.3", "scripts": { "prepublishOnly": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/vee-validate/package.json b/npm/packs/vee-validate/package.json index 5898cee23a..b19edfcbe7 100644 --- a/npm/packs/vee-validate/package.json +++ b/npm/packs/vee-validate/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/vee-validate", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/vue": "~9.3.2", + "@abp/vue": "~9.3.3", "vee-validate": "~3.4.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index 99062f62f1..b69308f4b8 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~9.3.2", - "@abp/prismjs": "~9.3.2" + "@abp/clipboard": "~9.3.3", + "@abp/prismjs": "~9.3.3" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/vue/package.json b/npm/packs/vue/package.json index f1de15800a..909084bdea 100644 --- a/npm/packs/vue/package.json +++ b/npm/packs/vue/package.json @@ -1,5 +1,5 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/vue", "publishConfig": { "access": "public" diff --git a/npm/packs/zxcvbn/package.json b/npm/packs/zxcvbn/package.json index 2d3e243581..b424c68465 100644 --- a/npm/packs/zxcvbn/package.json +++ b/npm/packs/zxcvbn/package.json @@ -1,11 +1,11 @@ { - "version": "9.3.2", + "version": "9.3.3", "name": "@abp/zxcvbn", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~9.3.2", + "@abp/core": "~9.3.3", "zxcvbn": "^4.4.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip b/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip index 2c01030c5a..8186ddf883 100644 Binary files a/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip and b/source-code/Volo.Abp.Account.SourceCode/Volo.Abp.Account.SourceCode.zip differ diff --git a/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip b/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip index 152fc2cba8..afa61234f9 100644 Binary files a/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip and b/source-code/Volo.Abp.AuditLogging.SourceCode/Volo.Abp.AuditLogging.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip b/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip index 5790f57495..5c53690422 100644 Binary files a/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip and b/source-code/Volo.Abp.BackgroundJobs.SourceCode/Volo.Abp.BackgroundJobs.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip b/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip index 69b8359590..7306e7beb1 100644 Binary files a/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip and b/source-code/Volo.Abp.BasicTheme.SourceCode/Volo.Abp.BasicTheme.SourceCode.zip differ diff --git a/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip b/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip index ff96d1411d..62eb9bf769 100644 Binary files a/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip and b/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip differ diff --git a/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip b/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip index 6d02b51aa0..5aae287a26 100644 Binary files a/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip and b/source-code/Volo.Abp.FeatureManagement.SourceCode/Volo.Abp.FeatureManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip b/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip index c426ce7027..cd490a332c 100644 Binary files a/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip and b/source-code/Volo.Abp.Identity.SourceCode/Volo.Abp.Identity.SourceCode.zip differ diff --git a/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip b/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip index 66ccbab949..d7dadf1d9f 100644 Binary files a/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip and b/source-code/Volo.Abp.IdentityServer.SourceCode/Volo.Abp.IdentityServer.SourceCode.zip differ diff --git a/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip b/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip index f8b215f0cd..4f7cdfdcaa 100644 Binary files a/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip and b/source-code/Volo.Abp.OpenIddict.SourceCode/Volo.Abp.OpenIddict.SourceCode.zip differ diff --git a/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip b/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip index 92d7ff2a4f..fc027a2ea7 100644 Binary files a/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip and b/source-code/Volo.Abp.PermissionManagement.SourceCode/Volo.Abp.PermissionManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip b/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip index f653b6c552..ae5ec98acc 100644 Binary files a/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip and b/source-code/Volo.Abp.SettingManagement.SourceCode/Volo.Abp.SettingManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip b/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip index d2ab8518f4..31369ea3dc 100644 Binary files a/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip and b/source-code/Volo.Abp.TenantManagement.SourceCode/Volo.Abp.TenantManagement.SourceCode.zip differ diff --git a/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip b/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip index 41fe56182f..fd9b5c7292 100644 Binary files a/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip and b/source-code/Volo.Abp.Users.SourceCode/Volo.Abp.Users.SourceCode.zip differ diff --git a/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip b/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip index b6ffd5f6d9..2b5a6e9dfb 100644 Binary files a/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip and b/source-code/Volo.Abp.VirtualFileExplorer.SourceCode/Volo.Abp.VirtualFileExplorer.SourceCode.zip differ diff --git a/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip b/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip index 5cdd4def50..34448d02f9 100644 Binary files a/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip and b/source-code/Volo.Blogging.SourceCode/Volo.Blogging.SourceCode.zip differ diff --git a/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip b/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip index 02242f8cd4..23e2cfcfed 100644 Binary files a/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip and b/source-code/Volo.ClientSimulation.SourceCode/Volo.ClientSimulation.SourceCode.zip differ diff --git a/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip b/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip index 7c79d675e5..e64408486f 100644 Binary files a/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip and b/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip differ diff --git a/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip b/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip index d523b41a8c..af66298e20 100644 Binary files a/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip and b/source-code/Volo.Docs.SourceCode/Volo.Docs.SourceCode.zip differ diff --git a/templates/app-nolayers/angular/package.json b/templates/app-nolayers/angular/package.json index 44f22e7cba..5aab4db6f8 100644 --- a/templates/app-nolayers/angular/package.json +++ b/templates/app-nolayers/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~9.3.2", - "@abp/ng.components": "~9.3.2", - "@abp/ng.core": "~9.3.2", - "@abp/ng.identity": "~9.3.2", - "@abp/ng.oauth": "~9.3.2", - "@abp/ng.setting-management": "~9.3.2", - "@abp/ng.tenant-management": "~9.3.2", - "@abp/ng.theme.lepton-x": "~4.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.account": "~9.3.3", + "@abp/ng.components": "~9.3.3", + "@abp/ng.core": "~9.3.3", + "@abp/ng.identity": "~9.3.3", + "@abp/ng.oauth": "~9.3.3", + "@abp/ng.setting-management": "~9.3.3", + "@abp/ng.tenant-management": "~9.3.3", + "@abp/ng.theme.lepton-x": "~4.3.3", + "@abp/ng.theme.shared": "~9.3.3", "@angular/animations": "~20.0.0", "@angular/common": "~20.0.0", "@angular/compiler": "~20.0.0", @@ -36,7 +36,7 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@abp/ng.schematics": "~9.3.2", + "@abp/ng.schematics": "~9.3.3", "@angular-devkit/build-angular": "~20.0.0", "@angular-eslint/builder": "~20.0.0", "@angular-eslint/eslint-plugin": "~20.0.0", diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json index 394cd8bd5a..5af503a552 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.2", - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.3", + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json index bef97c0d2e..6f60f47e0f 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.3" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 44f22e7cba..5aab4db6f8 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~9.3.2", - "@abp/ng.components": "~9.3.2", - "@abp/ng.core": "~9.3.2", - "@abp/ng.identity": "~9.3.2", - "@abp/ng.oauth": "~9.3.2", - "@abp/ng.setting-management": "~9.3.2", - "@abp/ng.tenant-management": "~9.3.2", - "@abp/ng.theme.lepton-x": "~4.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.account": "~9.3.3", + "@abp/ng.components": "~9.3.3", + "@abp/ng.core": "~9.3.3", + "@abp/ng.identity": "~9.3.3", + "@abp/ng.oauth": "~9.3.3", + "@abp/ng.setting-management": "~9.3.3", + "@abp/ng.tenant-management": "~9.3.3", + "@abp/ng.theme.lepton-x": "~4.3.3", + "@abp/ng.theme.shared": "~9.3.3", "@angular/animations": "~20.0.0", "@angular/common": "~20.0.0", "@angular/compiler": "~20.0.0", @@ -36,7 +36,7 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@abp/ng.schematics": "~9.3.2", + "@abp/ng.schematics": "~9.3.3", "@angular-devkit/build-angular": "~20.0.0", "@angular-eslint/builder": "~20.0.0", "@angular-eslint/eslint-plugin": "~20.0.0", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json index 1c7c3d09c5..3edcfba045 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-authserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json index bef97c0d2e..6f60f47e0f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.3" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json index bef97c0d2e..6f60f47e0f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.3" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/package.json index bef97c0d2e..6f60f47e0f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.3" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/package.json index bef97c0d2e..6f60f47e0f 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~4.3.3" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index efa37fe2fe..9a966b5c41 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.2" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~4.3.3" } } diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 9f2dd09d82..4243f05089 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -13,15 +13,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~9.3.2", - "@abp/ng.components": "~9.3.2", - "@abp/ng.core": "~9.3.2", - "@abp/ng.identity": "~9.3.2", - "@abp/ng.oauth": "~9.3.2", - "@abp/ng.setting-management": "~9.3.2", - "@abp/ng.tenant-management": "~9.3.2", - "@abp/ng.theme.basic": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2", + "@abp/ng.account": "~9.3.3", + "@abp/ng.components": "~9.3.3", + "@abp/ng.core": "~9.3.3", + "@abp/ng.identity": "~9.3.3", + "@abp/ng.oauth": "~9.3.3", + "@abp/ng.setting-management": "~9.3.3", + "@abp/ng.tenant-management": "~9.3.3", + "@abp/ng.theme.basic": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3", "@angular/animations": "~20.0.0", "@angular/common": "~20.0.0", "@angular/compiler": "~20.0.0", @@ -36,7 +36,7 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@abp/ng.schematics": "~9.3.2", + "@abp/ng.schematics": "~9.3.3", "@angular-devkit/build-angular": "~20.0.0", "@angular-eslint/builder": "~20.0.0", "@angular-eslint/eslint-plugin": "~20.0.0", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index cd427aa2d2..3dbeba073e 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "~19.1.0", "@angular/core": "~19.1.0", - "@abp/ng.core": "~9.3.2", - "@abp/ng.theme.shared": "~9.3.2" + "@abp/ng.core": "~9.3.3", + "@abp/ng.theme.shared": "~9.3.3" }, "dependencies": { "tslib": "^2.1.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json index 2e82b80925..1fe91dec0a 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.AuthServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-authserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json index 35d240f9b5..ffbf3861ba 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/package.json @@ -3,7 +3,7 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2", - "@abp/aspnetcore.components.server.basictheme": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3", + "@abp/aspnetcore.components.server.basictheme": "~9.3.3" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 255027fa5f..8097db43a4 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 255027fa5f..8097db43a4 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "~9.3.3" } }