diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index bb6c1aeef4..dfe9e530de 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -348,15 +348,39 @@ "CompanySize": "Company size", "DetailTrialLicense": "Details", "Requested": "Requested", + "Pending": "Pending", + "Running": "Running", "Activated": "Activated", "PurchasedToNormalLicense": "Purchased", "Expired": "Expired", "TrialLicenseDeletionWarningMessage": "Are you sure you want to delete the trial license? Trial license, organization, support accounts will be deleted!", "LicenseCategoryFilter": "License category", "Permission:SendWelcomeEmail": "Send Welcome Email", + "Permission:ProvisionExistingOrganizationsAi": "Provision Existing Organizations AI", "SendWelcomeEmail": "Send Welcome Email", "SendWelcomeEmailWarningMessage": "Are you sure you want to send welcome email to the organization members?", "SendWelcomeEmailSuccessMessage": "Welcome email sent successfully!", + "ProvisionExistingOrganizationsAi": "Provision Existing Organizations AI", + "ProvisionExistingOrganizationsAiConfirmation": "This will enable AI assisted development for all active organizations, grant included AI credits, and provision provider keys in the background. Do you want to continue?", + "DeleteExistingOrganizationsAiCredentials": "Delete Existing Organizations AI Keys", + "DeleteExistingOrganizationsAiCredentialsConfirmation": "This will revoke existing OpenRouter keys referenced by organizations and remove stored AI credentials from the database so provisioning can be retried. Do you want to continue?", + "ExistingOrganizationsAiOperationAlreadyRunning": "Another existing organizations AI operation is already running.", + "ExistingOrganizationsAiBackfillAlreadyRunning": "An existing organizations AI provisioning job is already running.", + "ExistingOrganizationsAiBackfillMissingManagementApiKey": "OpenRouter management API key is not configured for the admin application. Configure AiAssistedDevelopment:Providers:OpenRouter:ManagementApiKey before starting this operation.", + "NoActiveOrganizationsFoundForAiBackfill": "No active organizations were found for AI provisioning.", + "NoOrganizationsFoundForAiCredentialCleanup": "No organizations with AI credentials were found for cleanup.", + "ExistingOrganizationsAiBackfillNotFound": "The existing organizations AI provisioning operation was not found.", + "ExistingOrganizationsAiBackfillCompleted": "Existing organizations AI provisioning completed successfully.", + "ExistingOrganizationsAiBackfillFailed": "Existing organizations AI provisioning failed.", + "ExistingOrganizationsAiCredentialCleanupCompleted": "Existing organizations AI credential cleanup completed successfully.", + "ExistingOrganizationsAiCredentialCleanupFailed": "Existing organizations AI credential cleanup failed.", + "CurrentOrganization": "Current organization", + "Processed": "Processed", + "Succeeded": "Succeeded", + "Failed": "Failed", + "Cancelled": "Cancelled", + "CompletedAt": "Completed at", + "LastError": "Last error", "Activate": "Activate", "ActivateTrialLicenseWarningMessage": " When you activate a trial license, a welcome e-mail will be sent to the user. Do you want to activate it?", "ActivateTrialLicenseSuccessMessage": "Activated successfully and the welcome e-mail sent to the organization members.", diff --git a/common.props b/common.props index 5e509c5b37..368b7f88a8 100644 --- a/common.props +++ b/common.props @@ -1,8 +1,8 @@ latest - 10.4.0-rc.1 - 5.4.0-rc.1 + 10.5.0-preview + 5.5.0-preview $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ diff --git a/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-react-app-screenshot.png b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-react-app-screenshot.png new file mode 100644 index 0000000000..18dc768de9 Binary files /dev/null and b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-react-app-screenshot.png differ diff --git a/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-react-ui-modern-template-demo.gif b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-react-ui-modern-template-demo.gif new file mode 100644 index 0000000000..e0b67ca604 Binary files /dev/null and b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-react-ui-modern-template-demo.gif differ diff --git a/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-studio-project-creation-react.png b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-studio-project-creation-react.png new file mode 100644 index 0000000000..77ca1eac3f Binary files /dev/null and b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/abp-studio-project-creation-react.png differ diff --git a/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/cover.png b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/cover.png new file mode 100644 index 0000000000..d2af96722d Binary files /dev/null and b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/cover.png differ diff --git a/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/react-ui-and-admin-console.png b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/react-ui-and-admin-console.png new file mode 100644 index 0000000000..3ea11871ba Binary files /dev/null and b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/images/react-ui-and-admin-console.png differ diff --git a/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/post.md b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/post.md new file mode 100644 index 0000000000..2c6e7ede87 --- /dev/null +++ b/docs/en/Community-Articles/2026-03-12-official-react-ui-for-abp-framework/post.md @@ -0,0 +1,116 @@ +# React UI for ABP Framework Is Finally Here + +If you have followed ABP for a while, you probably know that React support has been one of the most requested topics in the community. + +With **ABP 10.4.0-rc.1**, that wait ends. React in ABP is no longer just something people ask about, hope for, or imagine as the next step. You can now create it, run it, and explore it today as a beta/preview experience in the modern template system. + +As part of the ABP Framework team, and as one of the developers working on this React effort, I am genuinely happy to finally share it. This RC gives the community an early chance to try it, share feedback, and help us polish the final details before **ABP 10.4 stable**, where we plan to make the React UI generally available. + +![abp-studio-project-creation-react](images/abp-studio-project-creation-react.png) + +## Why this matters + +ABP Framework has always been about helping teams build modern, maintainable, production-ready applications faster. With the new React UI, we are extending that same vision to teams who want ABP on the backend and React on the frontend without losing the built-in application features that make ABP productive from day one. + +This is not another empty starter. The goal is a **first-class UI option** that fits into the ABP application startup experience and works naturally with familiar ABP concepts such as authentication, authorization, localization, multi-tenancy, modularity, runtime configuration, and deployment. + +There is one important detail: the React UI belongs to ABP's **modern template system**. You create it with the `--modern` flag in the ABP CLI or by selecting the modern template flow in ABP Studio. You can find the technical documentation here: [React UI documentation](https://abp.io/docs/10.4/framework/ui/react). + +## A quick look at the architecture + +The final shape is clearer now: a modern React solution gives you a real React application in the solution, plus the ABP administration experience. + +First, there is **your React application**. In the modern templates, this lives directly in the solution as a real app under `react/` or `apps/react/`. It contains the frontend code you work with every day, including pages, components, routing, API integration, runtime configuration, and authentication setup. + +Second, there is the **ABP Admin Console**. The Admin Console is a pre-built React application that provides the standard ABP module management pages. It is delivered through the `Volo.Abp.AdminConsole` NuGet package, so it can evolve with ABP package updates while your own React application stays focused on your product's business features. + +For layered and single-layer modern applications, the Admin Console is hosted by the backend and served under `/admin-console/*`. For microservice solutions, it runs as a separate React app under `apps/react-admin-console/`, with its own runtime configuration and the same `/admin-console/` base path. In both cases, the main React app can link users into the Admin Console when they need full administrative screens. + +This split is a practical design choice. Your business UI stays yours, while administration capabilities remain available, consistent, and upgradeable. +![react-ui-and-admin-console](images/react-ui-and-admin-console.png) + +## A different frontend philosophy + +One of the most important things to understand is that this React UI is **not** being shaped with exactly the same architecture as some previous UI options. + +We are not trying to ship the whole frontend experience as a closed set of page implementations coming from npm packages. Instead, the generated solution includes the actual page code inside the app itself. You can open it, understand it, refactor it, redesign it, and adapt it without fighting against a packaged black box. + +The Admin Console covers ABP's standard module administration pages. Your own React application remains intentionally open and direct. That gives teams a good balance: built-in administrative power from ABP, and full ownership of the product-facing frontend. + +## Built for AI-driven development + +The new React UI is also shaped for the era of **AI-assisted development**. + +React, TypeScript, Vite, TanStack Router, TanStack Query, Axios, Zod, React Hook Form, and shadcn/ui are technologies that modern coding assistants understand very well. Just as importantly, the generated application contains real frontend code in the solution. That gives AI tools and coding agents concrete project context to read, extend, and refactor. + +This direction also fits the broader ABP AI story. ABP Studio already includes an AI assistant experience, and the new **ABP AI Agent** is being introduced to bring code generation, project understanding, issue fixing, and natural-language application evolution directly into the ABP workflow. You can follow that work here: [The Future of ABP Studio: AI Agent + Code Generation](https://abp.io/community/events/community-talks/the-future-of-abp-studio-ai-agent-code-generation-live-fekeoyjr). For the wider toolset, see the [ABP AI Toolkit](https://abp.io/ai/toolkit). + +## What the React experience looks like + +The current template already points to the kind of experience React developers expect from a modern application: + +- A Vite-powered React + TypeScript frontend +- TanStack Router for client-side routing +- TanStack Query for server state and data fetching +- OIDC authentication against the ABP Auth Server +- Axios-based HTTP client integration +- Runtime configuration through `dynamic-env.json` +- Localization and permission-aware behavior integrated with ABP application configuration +- Tailwind CSS and shadcn/ui components that live in your project and can be customized directly +- Zod and React Hook Form for form handling and validation +- Vitest for frontend tests +- A dedicated Admin Console for ABP module administration + +Even in its current form, the React UI already feels like a real ABP solution experience, not just a login page plus a few demo screens. + +![abp-react-app-screenshot.png](images/abp-react-app-screenshot.png) + +## More than a hello world + +The generated React app is intentionally small enough to understand, but it is not empty. + +Out of the box, you already get the kind of foundation most teams expect: login, registration, forgot-password and reset-password flows, runtime configuration, localization, permission-aware routing, API proxy generation, and a simple users page that can deep-link into the Admin Console when full user management is needed. + +Depending on the selected options, it can also include a sample Books CRUD page that demonstrates how to build a full create/read/update/delete flow against an ABP backend. + +The Admin Console provides the standard management experience for ABP modules, including identity management, roles, organization units, settings, audit logs, OpenIddict administration, language management, text templates, GDPR, SaaS and tenant management, and other module pages depending on your solution configuration. + +That is the core value: developers get a clean React application to build their product, while ABP continues to provide the administrative capabilities expected from a production-ready application platform. + +## Try it with ABP 10.4 RC + +During the RC period, you can create a modern React solution with ABP 10.4.0-rc.1: + +```bash +abp new Acme.BookStore --template app --modern +``` + +The React UI is the default UI option when `--modern` is used, but you can also pass it explicitly: + +```bash +abp new Acme.BookStore --template app --modern --ui-framework react +``` + +For a single-layer application: + +```bash +abp new Acme.BookStore --template app-nolayers --modern +``` + +For a microservice solution: + +```bash +abp new Acme.BookStore --template microservice --modern +``` + +Once ABP 10.4 stable is released, the same modern React experience is planned to become generally available without needing to target the RC version explicitly. + +![ABP Framework React UI Modern Template Demo](images/abp-react-ui-modern-template-demo.gif) + +## What's next + +The React UI is now real in ABP 10.4 RC, and the final polishing work continues toward the stable release. If you have been waiting for a real React path in ABP, this is the point where it stops being a wish and starts becoming something you can actually build with. + +For me, one of the nicest parts of this RC is that we can finally stop talking about React support in ABP as a future idea and start improving something real together. + +Try it, explore it, and share feedback with us while we keep polishing it for **ABP 10.4 stable**. diff --git a/docs/en/cli/differences-between-old-and-new-cli.md b/docs/en/cli/differences-between-old-and-new-cli.md index 440b785797..2d1cef6f3b 100644 --- a/docs/en/cli/differences-between-old-and-new-cli.md +++ b/docs/en/cli/differences-between-old-and-new-cli.md @@ -7,9 +7,9 @@ # Old ABP CLI vs New ABP CLI -ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions or ABP Studio features. With **v8.2+**, the old/legacy ABP CLI has been replaced with a new [CLI](index.md) system to align with the new templating system and [ABP Studio](../studio/index.md). Also, some superior features/commands have been introduced with the new CLI, such as `kube-connect` and `kube-intercept` commands. +ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions or ABP Studio features. With **v8.2+**, the old/classic ABP CLI has been replaced with a new [CLI](index.md) system to align with the new templating system and [ABP Studio](../studio/index.md). Also, some superior features/commands have been introduced with the new CLI, such as `kube-connect` and `kube-intercept` commands. -In this guide, you will learn the motivation behind this change, some questions that you may have, how to use the old/legacy CLI, its features, and more... +In this guide, you will learn the motivation behind this change, some questions that you may have, how to use the old/classic CLI, its features, and more... ## Reason For The Change diff --git a/docs/en/cli/index.md b/docs/en/cli/index.md index e7909fe510..a848320549 100644 --- a/docs/en/cli/index.md +++ b/docs/en/cli/index.md @@ -9,73 +9,75 @@ ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions or [ABP Studio](../studio/index.md) features. +This document describes `Volo.Abp.Studio.Cli`, the ABP CLI package that works with the ABP Studio template system. Modern templates, including React UI support, are available through this package. If you need to run the classic `Volo.Abp.Cli`, pass `--old` at the end of the command. + ## Installation ABP CLI is a [dotnet global tool](https://docs.microsoft.com/en-us/dotnet/core/tools/global-tools). Install it using a command line window: -````bash +```bash dotnet tool install -g Volo.Abp.Studio.Cli -```` +``` To update an existing installation: -````bash +```bash dotnet tool update -g Volo.Abp.Studio.Cli -```` +``` ## Global Options While each command may have a set of options, there are some global options that can be used with any command: -* `--skip-cli-version-check` or `-scvc`: Skips checking the latest version of the ABP CLI. If you don't specify, it will check the latest version and shows a warning message if there is a newer version of the ABP CLI. +- `--skip-cli-version-check` or `-scvc`: Skips checking the latest version of the ABP CLI. If you don't specify, it will check the latest version and shows a warning message if there is a newer version of the ABP CLI. - `--skip-extension-version-check` or `-sevc`: Skips checking the latest version of the ABP CLI extensions. If you don't specify, it will check the latest version and download the latest version if there is a newer version of the ABP CLI extensions. -* `--old`: ABP CLI has two variations: `Volo.Abp.Studio.Cli` and `Volo.Abp.Cli`. New features/templates are added to the `Volo.Abp.Studio.Cli`. But if you want to use the old version, you can use this option **at the end of your commands**. For example, `abp new Acme.BookStore --old`. -* `--help` or `-h`: Shows help for the specified command. +- `--old`: ABP CLI has two variations: `Volo.Abp.Studio.Cli` and `Volo.Abp.Cli`. New features and templates are added to `Volo.Abp.Studio.Cli`. If you want to use the old version, use this option **at the end of your commands**. For example, `abp new Acme.BookStore --old`. +- `--help` or `-h`: Shows help for the specified command. ## Commands Here is the list of all available commands before explaining their details: -* **[`help`](../cli#help)**: Shows help on the usage of the ABP CLI. -* **[`cli`](../cli#cli)**: Update or remove ABP CLI. -* **[`new`](../cli#new)**: Generates a new solution based on the ABP [startup templates](../solution-templates/index.md). -* **[`new-module`](../cli#new-module)**: Generates a new module based on the given template. -* **[`new-package`](../cli#new-package)**: Generates a new package based on the given template. -* **[`update`](../cli#update)**: Automatically updates all ABP related NuGet and NPM packages in a solution. -* **[`clean`](../cli#clean)**: Deletes all `BIN` and `OBJ` folders in the current folder. -* **[`add-package`](../cli#add-package)**: Adds an ABP package to a project. -* **[`add-package-ref`](../cli#add-package-ref)**: Adds package to given project. -* **[`install-module`](../cli#install-module)**: Adds a [multi-package application module](../modules/index.md) to a given module. -* **[`install-local-module`](../cli#install-local-module)**: Installs a local module to given module. -* **[`list-modules`](../cli#list-modules)**: Lists names of application modules. -* **[`list-templates`](../cli#list-templates)**: Lists the names of available templates to create a solution. -* **[`get-source`](../cli#get-source)**: Downloads the source code of a module. -* **[`add-source-code`](../cli#add-source-code)**: Downloads the source code and replaces package references with project references. -* **[`init-solution`](../cli#init-solution)**: Creates ABP Studio configuration files for a given solution. -* **[`kube-connect`](../cli#kube-connect)**: Connects to kubernetes environment. (*Available for* ***Business*** *or higher licenses*) -* **[`kube-intercept`](../cli#kube-intercept)**: Intercepts a service running in Kubernetes environment. (*Available for* ***Business*** *or higher licenses*) -* **[`list-module-sources`](../cli#list-module-sources)**: Lists the remote module sources. -* **[`add-module-source`](../cli#add-module-source)**: Adds a remote module source. -* **[`delete-module-source`](../cli#delete-module-source)**: Deletes a remote module source. -* **[`generate-proxy`](../cli#generate-proxy)**: Generates client side proxies to use HTTP API endpoints. -* **[`remove-proxy`](../cli#remove-proxy)**: Removes previously generated client side proxies. -* **[`switch-to-preview`](../cli#switch-to-preview)**: Switches to the latest preview version of the ABP. -* **[`switch-to-nightly`](../cli#switch-to-nightly)**: Switches to the latest [nightly builds](../release-info/nightly-builds.md) of the ABP related packages on a solution. -* **[`switch-to-stable`](../cli#switch-to-stable)**: Switches to the latest stable versions of the ABP related packages on a solution. -* **[`switch-to-local`](../cli#switch-to-local)**: Changes NuGet package references on a solution to local project references. -* **[`upgrade`](../cli#upgrade)**: It converts the application to use pro modules. -* **[`translate`](../cli#translate)**: Simplifies to translate localization files when you have multiple JSON [localization](../framework/fundamentals/localization.md) files in a source control repository. -* **[`login`](../cli#login)**: Authenticates on your computer with your [abp.io](https://abp.io/) username and password. -* **[`login-info`](../cli#login-info)**: Shows the current user's login information. -* **[`logout`](../cli#logout)**: Logouts from your computer if you've authenticated before. -* **[`bundle`](../cli#bundle)**: Generates script and style references for ABP Blazor and MAUI Blazor project. -* **[`install-libs`](../cli#install-libs)**: Install NPM Packages for MVC / Razor Pages and Blazor Server UI types. -* **[`clear-download-cache`](../cli#clear-download-cache)**: Clears the templates download cache. -* **[`check-extensions`](../cli#check-extensions)**: Checks the latest version of the ABP CLI extensions. -* **[`install-old-cli`](../cli#install-old-cli)**: Installs old ABP CLI. -* **[`mcp-studio`](../cli#mcp-studio)**: Starts ABP Studio MCP bridge for AI tools (requires ABP Studio running). -* **[`generate-razor-page`](../cli#generate-razor-page)**: Generates a page class that you can use it in the ASP NET Core pipeline to return an HTML page. -* **[`generate-jwks`](../cli#generate-jwks)**: Generates an RSA key pair (JWKS public key + PEM private key) for OpenIddict `private_key_jwt` client authentication. +- [help](../cli#help): Shows help on the usage of the ABP CLI. +- [cli](../cli#cli): Update or remove ABP CLI. +- [new](../cli#new): Generates a new solution based on the ABP [startup templates](../solution-templates/index.md). Use `--modern` to create solutions with the modern template system and React UI. +- [new-module](../cli#new-module): Generates a new module based on the given template. Use `--modern` to use modern module templates. +- [new-package](../cli#new-package): Generates a new package based on the given template. +- [update](../cli#update): Automatically updates all ABP related NuGet and NPM packages in a solution. +- [clean](../cli#clean): Deletes all `BIN` and `OBJ` folders in the current folder. +- [add-package](../cli#add-package): Adds an ABP package to a project. +- [add-package-ref](../cli#add-package-ref): Adds package to given project. +- [install-module](../cli#install-module): Adds a [multi-package application module](../modules/index.md) to a given module. +- [install-local-module](../cli#install-local-module): Installs a local module to given module. +- [list-modules](../cli#list-modules): Lists names of application modules. +- [list-templates](../cli#list-templates): Lists the names of available templates to create a solution. +- [get-source](../cli#get-source): Downloads the source code of a module. +- [add-source-code](../cli#add-source-code): Downloads the source code and replaces package references with project references. +- [init-solution](../cli#init-solution): Creates ABP Studio configuration files for a given solution. +- [kube-connect](../cli#kube-connect): Connects to Kubernetes environment. (*Available for* ***Business*** *or higher licenses*) +- [kube-intercept](../cli#kube-intercept): Intercepts a service running in Kubernetes environment. (*Available for* ***Business*** *or higher licenses*) +- [list-module-sources](../cli#list-module-sources): Lists the remote module sources. +- [add-module-source](../cli#add-module-source): Adds a remote module source. +- [delete-module-source](../cli#delete-module-source): Deletes a remote module source. +- [generate-proxy](../cli#generate-proxy): Generates client side proxies to use HTTP API endpoints. +- [remove-proxy](../cli#remove-proxy): Removes previously generated client side proxies. +- [switch-to-preview](../cli#switch-to-preview): Switches to the latest preview version of the ABP. +- [switch-to-nightly](../cli#switch-to-nightly): Switches to the latest [nightly builds](../release-info/nightly-builds.md) of the ABP related packages on a solution. +- [switch-to-stable](../cli#switch-to-stable): Switches to the latest stable versions of the ABP related packages on a solution. +- [switch-to-local](../cli#switch-to-local): Changes NuGet package references on a solution to local project references. +- [upgrade](../cli#upgrade): It converts the application to use pro modules. +- [translate](../cli#translate): Simplifies to translate localization files when you have multiple JSON [localization](../framework/fundamentals/localization.md) files in a source control repository. +- [login](../cli#login): Authenticates on your computer with your [abp.io](https://abp.io/) username and password. +- [login-info](../cli#login-info): Shows the current user's login information. +- [logout](../cli#logout): Logouts from your computer if you've authenticated before. +- [bundle](../cli#bundle): Generates script and style references for ABP Blazor and MAUI Blazor project. +- [install-libs](../cli#install-libs): Install NPM Packages for MVC / Razor Pages and Blazor Server UI types. +- [clear-download-cache](../cli#clear-download-cache): Clears the templates download cache. +- [check-extensions](../cli#check-extensions): Checks the latest version of the ABP CLI extensions. +- [install-old-cli](../cli#install-old-cli): Installs old ABP CLI. +- [mcp-studio](../cli#mcp-studio): Starts ABP Studio MCP bridge for AI tools (requires ABP Studio running). +- [generate-razor-page](../cli#generate-razor-page): Generates a page class that you can use it in the ASP NET Core pipeline to return an HTML page. +- [generate-jwks](../cli#generate-jwks): Generates an RSA key pair (JWKS public key + PEM private key) for OpenIddict `private_key_jwt` client authentication. ### help @@ -83,16 +85,16 @@ Shows basic usages of the ABP CLI. Usage: -````bash +```bash abp help [command-name] -```` +``` Examples: -````bash +```bash abp help # Shows a general help. abp help new # Shows help about the "new" command. -```` +``` ### cli @@ -100,239 +102,344 @@ Update or remove ABP CLI. Usage: -````bash +```bash abp cli [command-name] -```` +``` Examples: -````bash +```bash abp cli update abp cli update --preview abp cli update --version 1.0.0 abp cli remove abp cli check-version abp cli clear-cache -```` +``` ### new -Generates a new solution based on the ABP [startup templates](../solution-templates). See [new solution create sample commands](new-command-samples.md) +Generates a new solution based on the ABP [startup templates](../solution-templates). See [new solution create sample commands](new-command-samples.md). + +The `new` command uses the ABP Studio template system by default. Add `--modern` to create a solution from the modern template system. Modern templates are React-first and are not available through the classic CLI (`--old`). Usage: -````bash +```bash abp new [options] -```` +``` Examples: -````bash -abp new Acme.BookStore -```` +```bash +abp new Acme.BookStore --template app +``` -* `Acme.BookStore` is the solution name here. -* Common convention is to name a solution is like *YourCompany.YourProject*. However, you can use different naming like *YourProject* (single level namespacing) or *YourCompany.YourProduct.YourModule* (three levels namespacing). +- `Acme.BookStore` is the solution name here. +- Common convention is to name a solution is like *YourCompany.YourProject*. However, you can use different naming like *YourProject* (single level namespacing) or *YourCompany.YourProduct.YourModule* (three levels namespacing). For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md) #### Options -* `--template` or `-t`: Specifies the template name. Default template name is `app`, which generates a application solution. Available templates: - * **`empty`**: Empty solution template. - * **`app`**: Application template. Additional options: - * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: - * `mvc`: ASP.NET Core MVC. There are some additional options for this template: - * `--tiered`: Creates a tiered solution where Web and Http API layers are physically separated. If not specified, it creates a layered solution which is less complex and suitable for most scenarios. (*Available for* ***Team*** *or higher licenses*) - * `angular`: Angular UI. There are some additional options for this template: - * `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) - * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. - * `blazor-webapp`: Blazor Web App UI. There are some additional options for this template: - * `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. - * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. - * `blazor`: Blazor UI. There are some additional options for this template: - * `--tiered`The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) - * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. - * `blazor-server`: Blazor Server UI. There are some additional options for this template: - * `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. (*Available for* ***Team*** *or higher licenses*) - * `maui-blazor`: Blazor Maui UI (*Available for* ***Team*** *or higher licenses*). There are some additional options for this template: - * `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. - * `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template: - * `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) - * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `none`. Available frameworks: - * `none`: Without any mobile application. - * `react-native`: React Native. This mobile option is only available for active **license owners**. - * `maui`: MAUI. This mobile option is only available for ABP. (*Available for* ***Team*** *or higher licenses*) - * `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: - * `ef`: Entity Framework Core. - * `mongodb`: MongoDB. - * `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution). **Note:** When specifying the connection string, make sure to enclose it in double quotes, for example: `--connection-string "Server=localhost;Database=MyProjectName;Trusted_Connection=True"`. - * `--skip-migrations` or `-sm`: Skips the creating initial database migration step. - * `--skip-migrator` or `-smr`: Skips the run database migrator step. - * `--public-website`: Public Website is a front-facing website for describing your project, listing your products and doing SEO for marketing purposes. Users can login and register on your website with this website. This option is only included in PRO templates. - * `--without-cms-kit`: When you add a public website to your solution, it automatically includes the [CmsKit](./../modules/cms-kit-pro/index.md) module. If you don't want to include *CmsKit*, you can use this parameter. - * `--separate-tenant-schema`: Creates a different DbContext for tenant schema. If not specified, the tenant schema is shared with the host schema. This option is only included in PRO templates. - * `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution. - * `--theme` or `-th`: Specifes the theme. Default theme is `leptonx`. Available themes: - * `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*) - * `leptonx-lite`: LeptonX-Lite Theme. - * `basic`: Basic Theme. - * `--use-open-source-template`or `-uost`: Uses the open-source template. (*Available for* ***Team*** *or higher licenses*) - * **`app-nolayers`**: Single-layer application template. Additional options: - * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: - * `mvc`: ASP.NET Core MVC. There are some additional options for this template: - * `angular`: Angular UI. There are some additional options for this template: - * `blazor`: Blazor UI. There are some additional options for this template: - * `blazor-server`: Blazor Server UI. There are some additional options for this template: - * `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template: - * `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: - * `ef`: Entity Framework Core. - * `mongodb`: MongoDB. - * `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution). **Note:** When specifying the connection string, make sure to enclose it in double quotes, for example: `--connection-string "Server=localhost;Database=MyProjectName;Trusted_Connection=True"`. - * `--skip-migrations` or `-sm`: Skips the creating initial database migration step. - * `--skip-migrator` or `-smr`: Skips the run database migrator step. - * `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution. - * `--theme`: Specifes the theme. Default theme is `leptonx`. Available themes: - * `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*) - * `leptonx-lite`: LeptonX-Lite Theme. - * `basic`: Basic Theme. - * `--use-open-source-template`or `-uost`: Uses the open-source template. (*Available for* ***Team*** *or higher licenses*) - * **`microservice`**: Microservice solution template (*Available for* ***Business*** *or higher licenses*). Additional options: - * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: - * `mvc`: ASP.NET Core MVC. There are some additional options for this template: - * `angular`: Angular UI. There are some additional options for this template: - * `blazor`: Blazor UI. There are some additional options for this template: - * `blazor-server`: Blazor Server UI. There are some additional options for this template: - * `maui-blazor`: Blazor Maui UI. There are some additional options for this template: - * `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template: - * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `none`. Available frameworks: - * `none`: Without any mobile application. - * `react-native`: React Native. - * `maui`: MAUI. - * `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: - * `ef`: Entity Framework Core. - * `mongodb`: MongoDB. - * `--theme`: Specifes the theme. Default theme is `leptonx`. Available themes: - * `leptonx`: LeptonX Theme. - * `basic`: Basic Theme. - * `--public-website`: Public Website is a front-facing website for describing your project, listing your products and doing SEO for marketing purposes. Users can login and register on your website with this website. This option is only included in PRO templates. - * `--no-grafana-dashboard` or `-ngd`: Does not add example Grafana Dashboard to the solution. -* `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory. -* `--local-framework-ref` or `-lfr`: Uses local projects references to the ABP framework instead of using the NuGet packages. It tries to find the paths from `ide-state.json`. The file is located at `%UserProfile%\.abp\studio\ui\ide-state.json` (for Windows) and `~/.abp/studio/ui/ide-state.json` (for MAC). -* `--create-solution-folder` or `-csf`: Specifies if the project will be in a new folder in the output folder or directly the output folder. -* `--database-management-system` or `-dbms`: Sets the database management system. Default is **SQL Server**. Supported DBMS's: - * `SqlServer` - * `MySQL` - * `PostgreSQL` - * `SQLite` (`app` & `app-nolayers`) - * `Oracle` (`app` & `app-nolayers`) - * `Oracle-Devart` (`app` & `app-nolayers`) -* `--dont-run-install-libs`: Skip installing client side packages. -* `--dont-run-bundling`: Skip bundling for Blazor packages. -* `--no-kubernetes-configuration` or `-nkc`: Skips the Kubernetes configuration files. -* `--no-social-logins` or `-nsl`: Skipts the social login configuration. -* `--no-tests` or `-ntp`: Does not add test projects. -* *Module Options*: You can skip some modules if you don't want to add them to your solution, or include if you want them (*Available for* ***Team*** *or higher licenses*). Available commands: - * `-no-saas`: Skips the Saas module. - * `-no-gdpr`: Skips the GDPR module. - * `-no-openiddict-admin-ui`: Skips the OpenIddict Admin UI module. - * `-no-audit-logging`: Skips the Audit Logging module. - * `-no-language-management`: Skips the Language Management module. - * `-no-text-template-management`: Skips the Text Template Management module. - * `-file-management`: Includes the File Management module. - * `-chat`: Includes the Chat module. - * `-ai-management`: Includes the [AI Management](./../modules/ai-management/index.md) module. - * `-ai-providers `: AI providers (comma-separated). Valid values: `Ollama`, `OpenAI`. (Requires `-ai-management`) -* `--legacy`: Generates a legacy solution. - * `trust-version`: Trusts the user's version and does not check if the version exists or not. If the template with the given version is found in the cache, it will be used, otherwise throws an exception. +- `--template` or `-t`: Specifies the template name. Default template name is `app`, which generates an application solution. Available templates: + - **`empty`**: Empty solution template. + - **`app`**: Application template. Additional options: + - `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: + - `mvc`: ASP.NET Core MVC. There are some additional options for this template: + - `--tiered`: Creates a tiered solution where Web and Http API layers are physically separated. If not specified, it creates a layered solution which is less complex and suitable for most scenarios. (*Available for* ***Team*** *or higher licenses*) + - `angular`: Angular UI. There are some additional options for this template: + - `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) + - `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. + - `blazor-webapp`: Blazor Web App UI. There are some additional options for this template: + - `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. + - `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. + - `blazor`: Blazor UI. There are some additional options for this template: + - `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) + - `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. + - `blazor-server`: Blazor Server UI. There are some additional options for this template: + - `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. (*Available for* ***Team*** *or higher licenses*) + - `maui-blazor`: Blazor Maui UI (*Available for* ***Team*** *or higher licenses*). There are some additional options for this template: + - `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. + - `react`: React SPA UI. Only available when `--modern` flag is used. See [Modern Templates](#modern-templates) below. + - `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template: + - `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) + - `--mobile` or `-m`: Specifies the mobile application framework. Default value is `none`. Available frameworks: + - `none`: Without any mobile application. + - `react-native`: React Native. This mobile option is only available for active **license owners**. + - `maui`: MAUI. This mobile option is only available for ABP. (*Available for* ***Team*** *or higher licenses*). Not supported with `--modern`. + - `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: + - `ef`: Entity Framework Core. + - `mongodb`: MongoDB. + - `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution). **Note:** When specifying the connection string, make sure to enclose it in double quotes, for example: `--connection-string "Server=localhost;Database=MyProjectName;Trusted_Connection=True"`. + - `--skip-migrations` or `-sm`: Skips the creating initial database migration step. + - `--skip-migrator` or `-smr`: Skips the run database migrator step. + - `--public-website`: Public Website is a front-facing website for describing your project, listing your products and doing SEO for marketing purposes. Users can login and register on your website with this website. This option is only included in PRO templates. + - `--without-cms-kit`: When you add a public website to your solution, it automatically includes the [CmsKit](./../modules/cms-kit-pro/index.md) module. If you don't want to include *CmsKit*, you can use this parameter. + - `--separate-tenant-schema`: Creates a different DbContext for tenant schema. If not specified, the tenant schema is shared with the host schema. This option is only included in PRO templates. + - `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution. + - `--theme` or `-th`: Specifies the theme. Default theme is `leptonx`. Available themes: + - `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*) + - `leptonx-lite`: LeptonX-Lite Theme. + - `basic`: Basic Theme. + - `--use-open-source-template` or `-uost`: Uses the open-source template. (*Available for* ***Team*** *or higher licenses*) + - **`app-nolayers`**: Single-layer application template. Additional options: + - `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: + - `mvc`: ASP.NET Core MVC. There are some additional options for this template: + - `angular`: Angular UI. There are some additional options for this template: + - `blazor`: Blazor UI. There are some additional options for this template: + - `blazor-server`: Blazor Server UI. There are some additional options for this template: + - `react`: React SPA UI. Only available when `--modern` flag is used. See [Modern Templates](#modern-templates) below. + - `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template: + - `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: + - `ef`: Entity Framework Core. + - `mongodb`: MongoDB. + - `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution). **Note:** When specifying the connection string, make sure to enclose it in double quotes, for example: `--connection-string "Server=localhost;Database=MyProjectName;Trusted_Connection=True"`. + - `--skip-migrations` or `-sm`: Skips the creating initial database migration step. + - `--skip-migrator` or `-smr`: Skips the run database migrator step. + - `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution. + - `--theme`: Specifies the theme. Default theme is `leptonx`. Available themes: + - `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*) + - `leptonx-lite`: LeptonX-Lite Theme. + - `basic`: Basic Theme. + - `--use-open-source-template` or `-uost`: Uses the open-source template. (*Available for* ***Team*** *or higher licenses*) + - **`microservice`**: Microservice solution template (*Available for* ***Business*** *or higher licenses*). Additional options: + - `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks: + - `mvc`: ASP.NET Core MVC. There are some additional options for this template: + - `angular`: Angular UI. There are some additional options for this template: + - `blazor`: Blazor UI. There are some additional options for this template: + - `blazor-server`: Blazor Server UI. There are some additional options for this template: + - `maui-blazor`: Blazor Maui UI. There are some additional options for this template: + - `react`: React SPA + React Admin Console. Only available when `--modern` flag is used. See [Modern Templates](#modern-templates) below. + - `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template: + - `--mobile` or `-m`: Specifies the mobile application framework. Default value is `none`. Available frameworks: + - `none`: Without any mobile application. + - `react-native`: React Native. + - `maui`: MAUI. Not supported with `--modern`. + - `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. Available providers: + - `ef`: Entity Framework Core. + - `mongodb`: MongoDB. + - `--theme`: Specifies the theme. Default theme is `leptonx`. Available themes: + - `leptonx`: LeptonX Theme. + - `basic`: Basic Theme. + - `--public-website`: Public Website is a front-facing website for describing your project, listing your products and doing SEO for marketing purposes. Users can login and register on your website with this website. This option is only included in PRO templates. + - `--no-grafana-dashboard` or `-ngd`: Does not add example Grafana Dashboard to the solution. +- `--modern`: Uses the modern variant of the selected template. Modern templates are React-first and use a different template source shipped with ABP Studio, instead of NuGet extension packages. See [Modern Templates](#modern-templates) below. +- `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory. +- `--local-framework-ref` or `-lfr`: Uses local projects references to the ABP framework instead of using the NuGet packages. It tries to find the paths from `ide-state.json`. The file is located at `%UserProfile%\.abp\studio\ui\ide-state.json` (for Windows) and `~/.abp/studio/ui/ide-state.json` (for MAC). +- `--create-solution-folder` or `-csf`: Specifies if the project will be in a new folder in the output folder or directly the output folder. +- `--database-management-system` or `-dbms`: Sets the database management system. Default is **SQL Server**. Supported DBMS's: + - `SqlServer` + - `MySQL` + - `PostgreSQL` + - `SQLite` (`app` & `app-nolayers`) + - `Oracle` (`app` & `app-nolayers`) + - `Oracle-Devart` (`app` & `app-nolayers`) +- `--dont-run-install-libs`: Skip installing client side packages. +- `--dont-run-bundling`: Skip bundling for Blazor packages. +- `--no-kubernetes-configuration` or `-nkc`: Skips the Kubernetes configuration files. +- `--no-social-logins` or `-nsl`: Skips the social login configuration. +- `--no-multi-tenancy`: Disables multi-tenancy support in the generated solution. +- `--no-tests` or `-ntp`: Does not add test projects. +- *Module Options*: You can skip some modules if you don't want to add them to your solution, or include if you want them (*Available for* ***Team*** *or higher licenses*). Available commands: + - `-no-saas`: Skips the Saas module. + - `-no-gdpr`: Skips the GDPR module. + - `-no-openiddict-admin-ui`: Skips the OpenIddict Admin UI module. + - `-no-audit-logging`: Skips the Audit Logging module. + - `-no-language-management`: Skips the Language Management module. + - `-no-text-template-management`: Skips the Text Template Management module. + - `-file-management`: Includes the File Management module. + - `-chat`: Includes the Chat module. + - `--ai-management`: Includes the AI Management module. + - `--ai-providers`: Specifies AI providers (comma-separated). Available values: `Ollama`, `OpenAI`. Requires `--ai-management`. +- `--legacy`: Generates a classic solution. + - `trust-version`: Trusts the user's version and does not check if the version exists or not. If the template with the given version is found in the cache, it will be used, otherwise throws an exception. + +##### Modern Template Options + +The following options apply only when `--modern` is used: + +| Option | Description | Templates | +| --- | --- | --- | +| `--shadcn-theme ` | Sets the shadcn/ui color theme for the generated React apps. See [Shadcn Theme Values](#shadcn-theme-values). | all `--modern` templates | +| `--admin-password ` | Sets the initial admin user password. | all `--modern` templates | +| `--modular` | Generates a modular monolith variant. | `app-nolayers --modern` | +| `--services ` | Adds extra microservice names as a comma-separated list (for example, `Ordering,Shipping`). | `microservice --modern` | + +#### Modern Templates + +Add `--modern` to a supported template to use its modern variant. Modern templates use a different template source, shipped with ABP Studio, compared to classic templates that use NuGet extension packages. They are **React-first** and have a narrower set of supported options. + +```bash +abp new Acme.BookStore --template app --modern +abp new Acme.BookStore --template app-nolayers --modern +abp new Acme.BookStore --template microservice --modern +``` + +| Template + `--modern` | UI Framework | Mobile | +| ----------------------- | ---------------------------------------------------------- | ------------------------ | +| `app --modern` | `react` (default) or `no-ui` | `none` or `react-native` | +| `app-nolayers --modern` | `react` (default) or `no-ui` | `none` or `react-native` | +| `microservice --modern` | `react` (default, includes React Admin Console) or `no-ui` | `none` or `react-native` | + +> Blazor, Angular, MVC, and MAUI Blazor UI frameworks are **not** supported with `--modern`. The `maui` mobile option is also not supported with `--modern`. +> +> Options that are not supported by a modern template are ignored with a warning in the CLI output. +> +> `--modern` can also be used with `--ready-config-path` (`-rcp`) and `--solution-history-id` (`-shi`). In these cases, the template in the JSON configuration or solution history record is mapped to its modern variant. See [Using Existing Configuration](new-command-samples.md#using-existing-configuration) for configuration-file and solution-history examples. + +For `app --modern` and `app-nolayers --modern`, the generated solution includes a `react/` folder for your application. The ABP Admin Console is hosted by the backend through the `Volo.Abp.AdminConsole` package and is served from `/admin-console/`; there is no separate `apps/react-admin-console/` folder. + +When using `--template microservice --modern`, the generated solution includes: + +- `apps/react/` — React SPA (main user-facing application) +- `apps/react-admin-console/` — React Admin Console (administration interface) +- `apps/auth-server/` — OpenIddict authentication server +- `gateways/web/` — YARP reverse proxy for the React apps +- `gateways/mobile/` — Gateway for mobile apps (only when `--mobile` is set) + +Two OpenIddict clients are automatically seeded: `MyProjectName_App` (React SPA) and `MyProjectName_AdminConsole` (React Admin Console). + +Examples: + +```bash +# Modern layered app with React UI +abp new Acme.BookStore --template app --modern + +# Modern single-layer app with React UI +abp new Acme.BookStore --template app-nolayers --modern + +# Modern microservice (React + React Admin Console) +abp new Acme.BookStore --template microservice --modern + +# Modern microservice with no UI +abp new Acme.BookStore --template microservice --modern --ui-framework no-ui + +# Modern single-layer modular monolith +abp new Acme.BookStore --template app-nolayers --modern --modular + +# Modern microservice with PostgreSQL +abp new Acme.BookStore --template microservice --modern --database-management-system postgresql + +# Modern microservice with additional services +abp new Acme.BookStore --template microservice --modern --services Ordering,Shipping + +# Modern microservice with React Native mobile +abp new Acme.BookStore --template microservice --modern --mobile react-native +``` +##### Shadcn Theme Values + +Use `--shadcn-theme ` with `--modern` templates: + +- `slate` (default) +- `pink` +- `blue` +- `turquoise` +- `orange` +- `purple` ### new-module Generates a new module. -````bash +```bash abp new-module [options] -```` +``` Examples: -````bash +```bash abp new-module Acme.BookStore -t module:ddd -```` +``` #### options -* `--template` or `-t`: Specifies the template name. Default template name is `module:ddd`, which generates a DDD module. Module templates are provided by the main template, see their own startup template documentation for available modules. `empty:empty` and `module:ddd` template is available for all solution structure. -* `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory. -* `--target-solution` or `-ts`: If set, the new module will be added to the given solution. Otherwise the new module will added to the closest solution in the file system. If no solution found, it will throw an error. -* `--solution-folder` or `-sf`: Specifies the target folder in the [Solution Explorer](../studio/solution-explorer.md#folder) virtual folder system. -* `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. This option is only available if the module template supports it. You can add multiple values separated by commas, such as `ef,mongodb` if the module template supports it. Available providers: - * `ef`: Entity Framework Core. - * `mongodb`: MongoDB. -* `--ui-framework` or `-u`: Specifies the UI framework. This option is only available if the module template supports it. You can add multiple values separated by commas, such as `mvc,angular` if the module template supports it. Available frameworks: - * `mvc`: ASP.NET Core MVC. - * `angular`: Angular UI. - * `blazor`: Blazor UI. - * `blazor-server`: Blazor Server UI. +- `--template` or `-t`: Specifies the template name. Default template name is `module:ddd`, which generates a DDD module. Module templates are provided by the main template, see their own startup template documentation for available modules. `empty:empty` and `module:ddd` template is available for all solution structure. +- `--modern`: Uses the modern variant of the selected module template. +- `--output-folder` or `-o`: Specifies the output folder. Default value is the current directory. +- `--target-solution` or `-ts`: If set, the new module will be added to the given solution. Otherwise the new module will added to the closest solution in the file system. If no solution found, it will throw an error. +- `--solution-folder` or `-sf`: Specifies the target folder in the [Solution Explorer](../studio/solution-explorer.md#folder) virtual folder system. +- `--database-provider` or `-d`: Specifies the database provider. Default provider is `ef`. This option is only available if the module template supports it. You can add multiple values separated by commas, such as `ef,mongodb` if the module template supports it. Available providers: + - `ef`: Entity Framework Core. + - `mongodb`: MongoDB. +- `--ui-framework` or `-u`: Specifies the UI framework. This option is only available if the module template supports it. You can add multiple values separated by commas, such as `mvc,angular` if the module template supports it. Available frameworks: + - `mvc`: ASP.NET Core MVC. + - `angular`: Angular UI. + - `blazor`: Blazor UI. + - `blazor-server`: Blazor Server UI. + +#### Modern Module Templates + +Add `--modern` to use the modern module variant: + +```bash +abp new-module Acme.BookStore.Orders --modern +abp new-module Acme.BookStore.Orders --modern -t module:ddd +abp new-module Acme.BookStore.Orders --modern -t module:standard +``` + +When the target solution itself is modern, the modern module variant is selected automatically even if `--modern` is not passed. + +Options that are not supported by a modern module template are ignored with a warning in the CLI output. ### new-package Generates a new package. -````bash +```bash abp new-package [options] -```` +``` Examples: -````bash +```bash abp new-package --name Acme.BookStore.Domain --template lib.domain -```` +``` #### options -* `--template` or `-t`: Specifies the template name. This parameter doesn't have a default value and must be set. Available templates and their sub-options: - * `lib.class-library` - * `lib.domain-shared` - * `--add-localization`: Includes default localization configuration & language files. - * `lib.domain` - * `--add-settings`: Includes default settings configuration. - * `--add-db-properties`: Includes the default Database Properties class. - * `--add-domain-shared`: Includes an additional Domain Shared package. - * `lib.application-contracts` - * `lib.application` - * `--add-mapperly`: Adds Mapperly configuration. - * `--add-application-contracts`: Includes an additional contracts package. - * `lib.ef` - * `--include-migrations`: Allows migration operations on this package. - * `--connection-string-name`: Default value is the last part of the package's namespace (or package name simply). - * `--connection-string`: Connection string value. The default value is null. You can set it later. **Note:** When specifying the connection string, make sure to enclose it in double quotes, for example: `--connection-string "Server=localhost;Database=MyProjectName;Trusted_Connection=True"`. - * `lib.mongodb` - * `lib.http-api` - * `lib.http-api-client` - * `lib.mvc` - * `--add-mapperly`: Adds Mapperly configuration. - * `lib.blazor` - * `--add-mapperly`: Adds Mapperly configuration. - * `--add-menu-contributors`: Includes default menu contributors. - * `lib.blazor-wasm` - * `lib.blazor-server` - * `host.http-api` - * `--add-serilog`: Includes Serilog configuration. - * `--add-swagger`: Includes Swagger configuration. - * `host.mvc` - * `--add-serilog`: Includes Serilog configuration. - * `--add-swagger`: Includes Swagger configuration. - * `host.blazor-wasm` - * `--backend`: Name of the backend project in the module (not path). - * `host.blazor-server` - * `abp.console` - * `csharp.console` - * `csharp.library` -* `--module-file` or `-m`: If set, the new package will be added to the given module. Otherwise the new package will added to the closest module in the file system. If no module found, it will throw an error. -* `--name` or `-n`: Specifies the name of the package. If not set, a name based on the template type and module name will be generated. -* `--folder` or `-f`: Specifies the target folder in the target module's virtual folder system. +- `--template` or `-t`: Specifies the template name. This parameter doesn't have a default value and must be set. Available templates and their sub-options: + - `lib.class-library` + - `lib.domain-shared` + - `--add-localization`: Includes default localization configuration & language files. + - `lib.domain` + - `--add-settings`: Includes default settings configuration. + - `--add-db-properties`: Includes the default Database Properties class. + - `--add-domain-shared`: Includes an additional Domain Shared package. + - `lib.application-contracts` + - `lib.application` + - `--add-mapperly`: Adds Mapperly configuration. + - `--add-application-contracts`: Includes an additional contracts package. + - `lib.ef` + - `--include-migrations`: Allows migration operations on this package. + - `--connection-string-name`: Default value is the last part of the package's namespace (or package name simply). + - `--connection-string`: Connection string value. The default value is null. You can set it later. **Note:** When specifying the connection string, make sure to enclose it in double quotes, for example: `--connection-string "Server=localhost;Database=MyProjectName;Trusted_Connection=True"`. + - `lib.mongodb` + - `lib.http-api` + - `lib.http-api-client` + - `lib.mvc` + - `--add-mapperly`: Adds Mapperly configuration. + - `lib.blazor` + - `--add-mapperly`: Adds Mapperly configuration. + - `--add-menu-contributors`: Includes default menu contributors. + - `lib.blazor-wasm` + - `lib.blazor-server` + - `host.http-api` + - `--add-serilog`: Includes Serilog configuration. + - `--add-swagger`: Includes Swagger configuration. + - `host.mvc` + - `--add-serilog`: Includes Serilog configuration. + - `--add-swagger`: Includes Swagger configuration. + - `host.blazor-wasm` + - `--backend`: Name of the backend project in the module (not path). + - `host.blazor-server` + - `abp.console` + - `csharp.console` + - `csharp.library` +- `--module-file` or `-m`: If set, the new package will be added to the given module. Otherwise the new package will added to the closest module in the file system. If no module found, it will throw an error. +- `--name` or `-n`: Specifies the name of the package. If not set, a name based on the template type and module name will be generated. +- `--folder` or `-f`: Specifies the target folder in the target module's virtual folder system. ### update @@ -340,25 +447,25 @@ Updating all ABP related packages can be tedious since there are many packages o Usage: -````bash +```bash abp update [options] -```` +``` -* If you run in a directory with a .csproj file, it updates all ABP related packages of the project to the latest versions. -* If you run in a directory with a .sln file, it updates all ABP related packages of the all projects of the solution to the latest versions. -* If you run in a directory that contains multiple solutions in sub-folders, it can update all the solutions, including Angular projects. +- If you run in a directory with a .csproj file, it updates all ABP related packages of the project to the latest versions. +- If you run in a directory with a .sln file, it updates all ABP related packages of the all projects of the solution to the latest versions. +- If you run in a directory that contains multiple solutions in sub-folders, it can update all the solutions, including Angular projects. Note that this command can upgrade your solution from a previous version, and also can upgrade it from a preview release to the stable release of the same version. #### Options -* `--npm`: Only updates NPM packages. -* `--nuget`: Only updates NuGet packages. -* `--solution-path` or `-sp`: Specify the solution path. Use the current directory by default -* `--solution-name` or `-sn`: Specify the solution name. Search `*.sln` files in the directory by default. -* `--check-all`: Check the new version of each package separately. Default is `false`. -* `--version` or `-v`: Specifies the version to use for update. If not specified, latest version is used. -* `--leptonx-version` or `-lv`: Specifies the LeptonX version to use for update. If not specified, latest version or the version that is compatible with `--version` argument is used. +- `--npm`: Only updates NPM packages. +- `--nuget`: Only updates NuGet packages. +- `--solution-path` or `-sp`: Specify the solution path. Use the current directory by default +- `--solution-name` or `-sn`: Specify the solution name. Search `*.sln` files in the directory by default. +- `--check-all`: Check the new version of each package separately. Default is `false`. +- `--version` or `-v`: Specifies the version to use for update. If not specified, latest version is used. +- `--leptonx-version` or `-lv`: Specifies the LeptonX version to use for update. If not specified, latest version or the version that is compatible with `--version` argument is used. ### clean @@ -366,41 +473,41 @@ Deletes all `BIN` and `OBJ` folders in the current folder. Usage: -````bash +```bash abp clean -```` - +``` ### add-package Adds an ABP package to a project by, -* Adding related nuget package as a dependency to the project. -* Adding `[DependsOn(...)]` attribute to the module class in the project (see the [module development document](../framework/architecture/modularity/basics.md)). +- Adding related nuget package as a dependency to the project. +- Adding `[DependsOn(...)]` attribute to the module class in the project (see the [module development document](../framework/architecture/modularity/basics.md)). > Notice that the added module may require additional configuration which is generally indicated in the documentation of the related package. Basic usage: -````bash +```bash abp add-package [options] -```` +``` Examples: -````bash +```bash abp add-package Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic -```` +``` -* This example adds the `Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic` package to the project. +- This example adds the `Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic` package to the project. #### Options -* `--project` or `-p`: Specifies the project (.csproj) file path. If not specified, CLI tries to find a .csproj file in the current directory. -* `--with-source-code`: Downloads the source code of the package to your solution folder and uses local project references instead of NuGet/NPM packages. -* `--add-to-solution-file`: Adds the downloaded package to your solution file, so you will also see the package when you open the solution on a IDE. (only available when `--with-source-code` is True) +- `--project` or `-p`: Specifies the project (.csproj) file path. If not specified, CLI tries to find a .csproj file in the current directory. +- `--with-source-code`: Downloads the source code of the package to your solution folder and uses local project references instead of NuGet/NPM packages. +- `--add-to-solution-file`: Adds the downloaded package to your solution file, so you will also see the package when you open the solution on a IDE. (only available when `--with-source-code` is True) > Currently only the source code of the basic theme packages([MVC](../framework/ui/mvc-razor-pages/basic-theme.md) and [Blazor](../framework/ui/blazor/basic-theme.md)) can be downloaded. +> > - Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic > - Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme > - Volo.Abp.AspNetCore.Components.Web.BasicTheme @@ -410,61 +517,61 @@ abp add-package Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic Adds one or more package reference to target project, also adds ABP module dependency. Both reference and target projects must belong to same module. -````bash +```bash abp add-package-ref [options] -```` +``` Examples: -````bash +```bash abp add-package-ref Acme.BookStore.Domain abp add-package-ref "Acme.BookStore.Domain Acme.BookStore.Domain.Shared" -t Acme.BookStore.Web -```` +``` #### Options -* `--target-project` or `-t`: Name of the project that reference will be added. If not set, project in the current directory will be used. +- `--target-project` or `-t`: Name of the project that reference will be added. If not set, project in the current directory will be used. ### install-module Installs a module, that is published as nuget packages, to a local module. Project relations are created according the types of the projects. For Examples: a `lib.domain-shared` project is added to `lib.domain-shared` project -````bash +```bash abp install-module [options] -```` +``` Examples: -````bash +```bash abp install-module Volo.Blogging abp install-module Volo.Blogging -t "modules/crm/Acme.Crm.abpmdl" -```` +``` #### Options -* `--target-module` or `-t`: Path (or folder path) of the target module that the other module will be installed to. If not set, the closest module to the current directory will be used. -* `--version` or `-v`: Nuget version of the module to be installed. +- `--target-module` or `-t`: Path (or folder path) of the target module that the other module will be installed to. If not set, the closest module to the current directory will be used. +- `--version` or `-v`: Nuget version of the module to be installed. ### install-local-module Installs one module to another. Project relations are created according the types of the projects. For Examples: a `lib.domain-shared` project is added to `lib.domain-shared` project -````bash +```bash abp install-local-module [options] -```` +``` Examples: -````bash +```bash abp install-local-module Acme.OrderManagement abp install-local-module Acme.OrderManagement -t "modules/crm/Acme.Crm.abpmdl" -```` +``` #### Options -* `--target-module` or `-t`: Path (or folder path) of the target module that the other module will be installed to. If not set, the closest module to the current directory will be used. +- `--target-module` or `-t`: Path (or folder path) of the target module that the other module will be installed to. If not set, the closest module to the current directory will be used. ### list-modules @@ -472,9 +579,9 @@ Lists names of open-source application modules. Usage: -````bash +```bash abp list-modules [options] -```` +``` Examples: @@ -498,9 +605,9 @@ Downloads the source code of a module to your computer. Usage: -````bash +```bash abp get-source [options] -```` +``` Examples: @@ -512,118 +619,118 @@ abp get-source Volo.Blogging --local-framework-ref --abp-path D:\GitHub\abp #### Options -* `--output-folder` or `-o`: Specifies the directory that source code will be downloaded in. If not specified, current directory is used. -* `--version` or `-v`: Specifies the version of the source code that will be downloaded. If not specified, latest version is used. -* `--preview`: If no version option is specified, this option specifies if latest [preview version](../release-info/previews.md) will be used instead of latest stable version. -* `--local-framework-ref --abp-path`: Path of [ABP GitHub repository](https://github.com/abpframework/abp) in your computer. This will be used for converting project references to your local system. If this is not specified, project references will be converted to NuGet references. +- `--output-folder` or `-o`: Specifies the directory that source code will be downloaded in. If not specified, current directory is used. +- `--version` or `-v`: Specifies the version of the source code that will be downloaded. If not specified, latest version is used. +- `--preview`: If no version option is specified, this option specifies if latest [preview version](../release-info/previews.md) will be used instead of latest stable version. +- `--local-framework-ref --abp-path`: Path of [ABP GitHub repository](https://github.com/abpframework/abp) in your computer. This will be used for converting project references to your local system. If this is not specified, project references will be converted to NuGet references. ### add-source-code Downloads the source code of a module and replaces package references with project references. This command only works if your ABP Commercial License has source-code access, or if source-code of the target module is free to all type of ABP Commercial Licenses. -````bash +```bash abp add-source-code [options] -```` +``` Examples: -````bash +```bash abp add-source-code Volo.Chat --add-to-solution-file -```` +``` #### Options -* `--target-module` or `-t`: The module that will refer the downloaded source code. If not set, the module in the current directory will be used. -* `--add-to-solution-file`: Adds the downloaded source code to C# solution file and ABP Studio solution file. +- `--target-module` or `-t`: The module that will refer the downloaded source code. If not set, the module in the current directory will be used. +- `--add-to-solution-file`: Adds the downloaded source code to C# solution file and ABP Studio solution file. ### init-solution Creates necessary files for a solution to be readable by ABP Studio. If the solution is generated via ABP Studio, you don't need this command. But it is not generated by ABP Studio, you need this command to make it work with ABP Studio. -````bash +```bash abp init-solution [options] -```` +``` Examples: -````bash +```bash abp init-solution --name Acme.BookStore -```` +``` #### Options -* `--name` or `-n`: Name for the solution. If not set, it will be the same as the name of closest c# solution in the file system. +- `--name` or `-n`: Name for the solution. If not set, it will be the same as the name of closest c# solution in the file system. ### kube-connect Connects to Kubernetes cluster (*Available for* ***Business*** *or higher licenses*). Press `ctrl+c` to disconnect. -````bash +```bash abp kube-connect [options] -```` +``` Examples: -````bash +```bash abp kube-connect abp kube-connect -p Default.abpk8s.json abp kube-connect -c docker-desktop -ns mycrm-local -```` +``` #### Options -* `--profile` or `-p`: Kubernetes Profile path or name to be used. Path can be relative (to current directory) or full path, or you can simply give the name of profile if you run this command in same directory with the solution or profile. This parameter is not needed if you use `--namespace` and `--context` parameters. -* `--namespace` or `-ns`: The namespace that services running on. -* `--context` or `-c`: The context that services running in. -* `--wireguard-password` or `-wp`: Wireguard password for the profile. This is not needed if you already set it on the ABP Studio user interface. -* `--solution-path` or `-sp`: Path of the solution. If not set, the closest solution in file system will be used. +- `--profile` or `-p`: Kubernetes Profile path or name to be used. Path can be relative (to current directory) or full path, or you can simply give the name of profile if you run this command in same directory with the solution or profile. This parameter is not needed if you use `--namespace` and `--context` parameters. +- `--namespace` or `-ns`: The namespace that services running on. +- `--context` or `-c`: The context that services running in. +- `--wireguard-password` or `-wp`: Wireguard password for the profile. This is not needed if you already set it on the ABP Studio user interface. +- `--solution-path` or `-sp`: Path of the solution. If not set, the closest solution in file system will be used. ### kube-intercept Intercepts a service running in Kubernetes environment (*Available for* ***Business*** *or higher licenses*). Press `ctrl+c` to stop interception. -````bash +```bash abp kube-intercept [options] -```` +``` Examples: -````bash +```bash abp kube-intercept mycrm-product-service -ns mycrm-local abp kube-intercept mycrm-product-service -ns mycrm-local -a MyCrm.ProductService.HttpApi.Host.csproj abp kube-intercept mycrm-product-service -ns mycrm-local -a MyCrm.ProductService.HttpApi.Host.csproj -pm 8080:80,8081:443 -```` +``` #### Options -* `--application` or `-a`: Relative or full path of the project that will intercept the service. If not set, the project in the current directory will be used. -* `--namespace` or `-ns`: The namespace that service running on. -* `--context` or `-sc`: The context that service running in. Default value is `docker-desktop`. -* `--port-mappings` or `-pm`: Port mappings for the service. +- `--application` or `-a`: Relative or full path of the project that will intercept the service. If not set, the project in the current directory will be used. +- `--namespace` or `-ns`: The namespace that service running on. +- `--context` or `-sc`: The context that service running in. Default value is `docker-desktop`. +- `--port-mappings` or `-pm`: Port mappings for the service. ### list-module-sources With this command, you can see the list of remote module sources that you can use to install modules. It is similar to the NuGet feed list in Visual Studio. -````bash +```bash abp list-module-sources -```` +``` ### add-module-source Adds a remote module source to the list of sources that you can use to install modules. -````bash +```bash abp add-module-source [options] -```` +``` You can create your own module source and add it to the list. It accepts a name and a url or a path as parameter. If you provide a path, it should be a local path that contains the modules json file. If you provide a url, it should be a url that contains the modules json file. The json file should be in the following format: -````json +```json { "name": "ABP Open Source Modules", "modules" : { @@ -633,40 +740,40 @@ You can create your own module source and add it to the list. It accepts a name ... } } -```` +``` When you add a module source, you can install modules from that source using the `install-module` command. It attempts to find the package from NuGet, such as `Volo.Abp.Account.Installer`. You can configure a private NuGet feed and publish your modules to that feed. Each module has an installer package that is utilized to install the module into a solution. When you publish your module to a private feed, you should also publish the installer package to the same feed. Examples: -````bash +```bash abp add-module-source -n "Custom Source" -p "D:\packages\abp\modules.json" abp add-module-source -n "Custom Http Source" -p "https://raw.githubusercontent.com/x/abp-module-store/main/abp-module-store.json" -```` +``` #### Options -* `--name` or `-n`: The name of the module source. -* `--path` or `-p`: The path of the module source. It can be a local path or a url. +- `--name` or `-n`: The name of the module source. +- `--path` or `-p`: The path of the module source. It can be a local path or a url. ### delete-module-source Deletes a remote module source from the list of sources that you can use to install modules. -````bash +```bash abp delete-module-source [options] -```` +``` Examples: -````bash +```bash abp delete-module-source -n "Custom Source" -```` +``` #### Options -* `--name` or `-n`: The name of the module source. +- `--name` or `-n`: The name of the module source. ### generate-proxy @@ -674,39 +781,38 @@ Generates Angular, C# or JavaScript service proxies for your HTTP APIs to make e Usage: -````bash +```bash abp generate-proxy -t [options] -```` +``` Examples: -````bash +```bash abp generate-proxy -t ng -url https://localhost:44302/ abp generate-proxy -t js -url https://localhost:44302/ abp generate-proxy -t csharp -url https://localhost:44302/ -```` +``` #### Options -* `--type` or `-t`: The name of client type. Available clients: - * `csharp`: C#, work in the `*.HttpApi.Client` project directory. There are some additional options for this client: - * `--without-contracts`: Avoid generating the application service interface, class, enum and dto types. - * `--folder`: Folder name to place generated CSharp code in. Default value: `ClientProxies`. - * `ng`: Angular. There are some additional options for this client: - * `--api-name` or `-a`: The name of the API endpoint defined in the `/src/environments/environment.ts`. Default value: `default`. - * `--source` or `-s`: Specifies the Angular project name to resolve the root namespace & API definition URL from. Default value: `defaultProject`. - * `--target`: Specifies the Angular project name to place generated code in. Default value: `defaultProject`. - * `--module`: Backend module name. Default value: `app`. - * `--entry-point`: Targets the Angular project to place the generated code. - * `--url`: Specifies api definition url. Default value is API Name's url in environment file. - * `--prompt` or `-p`: Asks the options from the command line prompt (for the unspecified options). - - * `js`: JavaScript. work in the `*.Web` project directory. There are some additional options for this client: - * `--output` or `-o`: JavaScript file path or folder to place generated code in. -* `--module` or `-m`: Specifies the name of the backend module you wish to generate proxies for. Default value: `app`. -* `--working-directory` or `-wd`: Execution directory. For `csharp` and `js` client types. -* `--url` or `-u`: API definition URL from. -* `--service-type` or `-st`: Specifies the service type to generate. `application`, `integration` and `all`, Default value: `all` for C#, `application` for JavaScript / Angular. +- `--type` or `-t`: The name of client type. Available clients: + - `csharp`: C#, work in the `*.HttpApi.Client` project directory. There are some additional options for this client: + - `--without-contracts`: Avoid generating the application service interface, class, enum and dto types. + - `--folder`: Folder name to place generated CSharp code in. Default value: `ClientProxies`. + - `ng`: Angular. There are some additional options for this client: + - `--api-name` or `-a`: The name of the API endpoint defined in the `/src/environments/environment.ts`. Default value: `default`. + - `--source` or `-s`: Specifies the Angular project name to resolve the root namespace & API definition URL from. Default value: `defaultProject`. + - `--target`: Specifies the Angular project name to place generated code in. Default value: `defaultProject`. + - `--module`: Backend module name. Default value: `app`. + - `--entry-point`: Targets the Angular project to place the generated code. + - `--url`: Specifies api definition url. Default value is API Name's url in environment file. + - `--prompt` or `-p`: Asks the options from the command line prompt (for the unspecified options). + - `js`: JavaScript. work in the `*.Web` project directory. There are some additional options for this client: + - `--output` or `-o`: JavaScript file path or folder to place generated code in. +- `--module` or `-m`: Specifies the name of the backend module you wish to generate proxies for. Default value: `app`. +- `--working-directory` or `-wd`: Execution directory. For `csharp` and `js` client types. +- `--url` or `-u`: API definition URL from. +- `--service-type` or `-st`: Specifies the service type to generate. `application`, `integration` and `all`, Default value: `all` for C#, `application` for JavaScript / Angular. > See the [Angular Service Proxies document](../framework/ui/angular/service-proxies.md) for more. @@ -718,34 +824,34 @@ This can be especially useful when you generate proxies for multiple modules bef Usage: -````bash +```bash abp remove-proxy -t [options] -```` +``` Examples: -````bash +```bash abp remove-proxy -t ng abp remove-proxy -t js -m identity -o Pages/Identity/client-proxies.js abp remove-proxy -t csharp --folder MyProxies/InnerFolder -```` +``` #### Options -* `--type` or `-t`: The name of client type. Available clients: - * `csharp`: C#, work in the `*.HttpApi.Client` project directory. There are some additional options for this client: - * `--folder`: Folder name to place generated CSharp code in. Default value: `ClientProxies`. - * `ng`: Angular. There are some additional options for this client: - * `--api-name` or `-a`: The name of the API endpoint defined in the `/src/environments/environment.ts`. Default value: `default`. - * `--source` or `-s`: Specifies the Angular project name to resolve the root namespace & API definition URL from. Default value: `defaultProject`. - * `--target`: Specifies the Angular project name to place generated code in. Default value: `defaultProject`. - * `--url`: Specifies api definition url. Default value is API Name's url in environment file. - * `--prompt` or `-p`: Asks the options from the command line prompt (for the unspecified options). - * `js`: JavaScript. work in the `*.Web` project directory. There are some additional options for this client: - * `--output` or `-o`: JavaScript file path or folder to place generated code in. -* `--module` or `-m`: Specifies the name of the backend module you wish to generate proxies for. Default value: `app`. -* `--working-directory` or `-wd`: Execution directory. For `csharp` and `js` client types. -* `--url` or `-u`: API definition URL from. +- `--type` or `-t`: The name of client type. Available clients: + - `csharp`: C#, work in the `*.HttpApi.Client` project directory. There are some additional options for this client: + - `--folder`: Folder name to place generated CSharp code in. Default value: `ClientProxies`. + - `ng`: Angular. There are some additional options for this client: + - `--api-name` or `-a`: The name of the API endpoint defined in the `/src/environments/environment.ts`. Default value: `default`. + - `--source` or `-s`: Specifies the Angular project name to resolve the root namespace & API definition URL from. Default value: `defaultProject`. + - `--target`: Specifies the Angular project name to place generated code in. Default value: `defaultProject`. + - `--url`: Specifies api definition url. Default value is API Name's url in environment file. + - `--prompt` or `-p`: Asks the options from the command line prompt (for the unspecified options). + - `js`: JavaScript. work in the `*.Web` project directory. There are some additional options for this client: + - `--output` or `-o`: JavaScript file path or folder to place generated code in. +- `--module` or `-m`: Specifies the name of the backend module you wish to generate proxies for. Default value: `app`. +- `--working-directory` or `-wd`: Execution directory. For `csharp` and `js` client types. +- `--url` or `-u`: API definition URL from. > See the [Angular Service Proxies document](../framework/ui/angular/service-proxies.md) for more. @@ -755,14 +861,13 @@ You can use this command to switch your solution or project to latest preview ve Usage: -````bash +```bash abp switch-to-preview [options] -```` +``` #### Options -* `--directory` or `-d`: Specifies the directory. The solution or project should be in that directory or in any of its sub directories. If not specified, default is the current directory. - +- `--directory` or `-d`: Specifies the directory. The solution or project should be in that directory or in any of its sub directories. If not specified, default is the current directory. ### switch-to-nightly @@ -770,13 +875,13 @@ You can use this command to switch your solution or project to latest [nightly]( Usage: -````bash +```bash abp switch-to-nightly [options] -```` +``` #### Options -* `--directory` or `-d`: Specifies the directory. The solution or project should be in that directory or in any of its sub directories. If not specified, default is the current directory. +- `--directory` or `-d`: Specifies the directory. The solution or project should be in that directory or in any of its sub directories. If not specified, default is the current directory. ### switch-to-stable @@ -784,12 +889,13 @@ If you're using the ABP preview packages (including nightly previews), you can s Usage: -````bash +```bash abp switch-to-stable [options] -```` +``` + #### Options -* `--directory` or `-d`: Specifies the directory. The solution or project should be in that directory or in any of its sub directories. If not specified, default is the current directory. +- `--directory` or `-d`: Specifies the directory. The solution or project should be in that directory or in any of its sub directories. If not specified, default is the current directory. ### switch-to-local @@ -797,20 +903,20 @@ Changes all NuGet package references to local project references for all the .cs Usage: -````bash +```bash abp switch-to-local [options] -```` -#### Options +``` -* `--solution` or `-s`: Specifies the solution directory. The solution should be in that directory or in any of its sub directories. If not specified, default is the current directory. +#### Options -* `--paths` or `-p`: Specifies the local paths that the projects are inside. You can use `|` character to separate the paths. +- `--solution` or `-s`: Specifies the solution directory. The solution should be in that directory or in any of its sub directories. If not specified, default is the current directory. +- `--paths` or `-p`: Specifies the local paths that the projects are inside. You can use `|` character to separate the paths. Examples: -````bash +```bash abp switch-to-local --paths "D:\Github\abp|D:\Github\my-repo" -```` +``` ### upgrade @@ -819,35 +925,35 @@ This command is specially designed for users who already started their developme Usage: -````bash +```bash abp upgrade [-t ] [options] -```` +``` Examples: -````bash +```bash abp upgrade -t app abp upgrade -t app --language-management --gdpr --audit-logging-ui --text-template-management --openiddict-pro abp upgrade -t app-nolayers --audit-logging-ui abp upgrade -t app-nolayers -p D:\MyProjects\MyProject -```` +``` #### Options -* `--path` or `-p`: Specifies the module path. The module should be in that directory. If not specified, the default is the current directory. -* `--gdpr`: Installs GDPR module too. -* `--language-management`: Installs Language Management module too. -* `--audit-logging-ui`: Installs Audit Logging Pro (UI) module too. -* `--text-template-management`: Installs Text Template Management module too. -* `--openiddict-pro`: Installs OpenIddict Pro (UI) module too. +- `--path` or `-p`: Specifies the module path. The module should be in that directory. If not specified, the default is the current directory. +- `--gdpr`: Installs GDPR module too. +- `--language-management`: Installs Language Management module too. +- `--audit-logging-ui`: Installs Audit Logging Pro (UI) module too. +- `--text-template-management`: Installs Text Template Management module too. +- `--openiddict-pro`: Installs OpenIddict Pro (UI) module too. ### translate Simplifies to translate [localization](../framework/fundamentals/localization.md) files when you have multiple JSON [localization](../framework/fundamentals/localization.md) files in a source control repository. -* This command will create a unified json file based on the reference culture. -* It searches all the localization `JSON` files in the current directory and all subdirectories (recursively). Then creates a single file (named `abp-translation.json` by default) that includes all the entries need to be translated. -* Once you translate the entries in this file, you can then apply your changes to the original localization files using the `--apply` command. +- This command will create a unified json file based on the reference culture. +- It searches all the localization `JSON` files in the current directory and all subdirectories (recursively). Then creates a single file (named `abp-translation.json` by default) that includes all the entries need to be translated. +- Once you translate the entries in this file, you can then apply your changes to the original localization files using the `--apply` command. > The main purpose of this command is to translate ABP localization files (since the [abp repository](https://github.com/abpframework/abp) has tens of localization files to be translated in different directories). @@ -855,38 +961,38 @@ Simplifies to translate [localization](../framework/fundamentals/localization.md First step is to create the unified translation file: -````bash +```bash abp translate -c [options] -```` +``` Examples: -````bash +```bash abp translate -c de -```` +``` This command created the unified translation file for the `de` (German) culture. ##### Additional Options -* `--reference-culture` or `-r`: Default `en`. Specifies the reference culture. -* `--output` or `-o`: Output file name. Default `abp-translation.json`. -* `--all-values` or `-all`: Include all keys to translate. By default, the unified translation file only includes the missing texts for the target culture. Specify this parameter if you may need to revise the values already translated before. +- `--reference-culture` or `-r`: Default `en`. Specifies the reference culture. +- `--output` or `-o`: Output file name. Default `abp-translation.json`. +- `--all-values` or `-all`: Include all keys to translate. By default, the unified translation file only includes the missing texts for the target culture. Specify this parameter if you may need to revise the values already translated before. #### Applying Changes Once you translate the entries in the unified translation file, you can apply your changes to the original localization files using the `--apply` parameter: -````bash +```bash abp translate --apply # apply all changes abp translate -a # shortcut for --apply -```` +``` Then review changes on your source control system to be sure that it has changed the proper files and send a Pull Request if you've translated ABP resources. Thank you in advance for your contribution. ##### Additional Options -* `--file` or `-f`: Default: `abp-translation.json`. The translation file (use only if you've used the `--output` option before). +- `--file` or `-f`: Default: `abp-translation.json`. The translation file (use only if you've used the `--output` option before). #### Online DeepL translate @@ -894,9 +1000,9 @@ The `translate` command also supports online translation. You need to provide yo It will search all the `en.json(reference-culture)` files in the directory and sub-directory and then translate and generate the corresponding `zh-Hans.json(culture)` files. -````bash +```bash abp translate -c zh-Hans --online --deepl-auth-key -```` +``` ### login @@ -928,42 +1034,42 @@ abp logout ### bundle -This command generates script and style references for ABP Blazor WebAssembly and MAUI Blazor project and updates the **index.html** file. It helps developers to manage dependencies required by ABP modules easily. In order for ```bundle``` command to work, its **executing directory** or passed ```--working-directory``` parameter's directory must contain a Blazor or MAUI Blazor project file(*.csproj). +This command generates script and style references for ABP Blazor WebAssembly and MAUI Blazor project and updates the **index.html** file. It helps developers to manage dependencies required by ABP modules easily. In order for `bundle` command to work, its **executing directory** or passed `--working-directory` parameter's directory must contain a Blazor or MAUI Blazor project file(*.csproj). Usage: -````bash +```bash abp bundle [options] -```` +``` > This command is no longer needed if you are using Global Assets feature. See [Managing Global Scripts & Styles](../framework/ui/blazor/global-scripts-styles.md) for more information. #### Options -* ```--working-directory``` or ```-wd```: Specifies the working directory. This option is useful when executing directory doesn't contain a Blazor project file. -* ```--force``` or ```-f```: Forces to build project before generating references. -* ```--project-type``` or ```-t```: Specifies the project type. Default type is `webassembly`. Available types: - * `webassembly` - * `maui-blazor` -* `--version` or `-v`: Specifies the ABP Framework version that the project is using. This is helpful for those who use central package management. +- `--working-directory` or `-wd`: Specifies the working directory. This option is useful when executing directory doesn't contain a Blazor project file. +- `--force` or `-f`: Forces to build project before generating references. +- `--project-type` or `-t`: Specifies the project type. Default type is `webassembly`. Available types: + - `webassembly` + - `maui-blazor` +- `--version` or `-v`: Specifies the ABP Framework version that the project is using. This is helpful for those who use central package management. `bundle` command reads the `appsettings.json` file inside the Blazor and MAUI Blazor project for bundling options. For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](../framework/ui/blazor/global-scripts-styles.md) ### install-libs -This command install NPM Packages for MVC / Razor Pages and Blazor Server UI types. Its **executing directory** or passed ```--working-directory``` parameter's directory must contain a project file(*.csproj). +This command install NPM Packages for MVC / Razor Pages and Blazor Server UI types. Its **executing directory** or passed `--working-directory` parameter's directory must contain a project file(*.csproj). `install-libs` command reads the `abp.resourcemapping.js` file to manage package. For more details see [Client Side Package Management](../framework/ui/mvc-razor-pages/client-side-package-management.md). Usage: -````bash +```bash abp install-libs [options] -```` +``` #### Options -* ```--working-directory``` or ```-wd```: Specifies the working directory. This option is useful when executing directory doesn't contain a project file. +- `--working-directory` or `-wd`: Specifies the working directory. This option is useful when executing directory doesn't contain a project file. ### check-extensions @@ -971,9 +1077,9 @@ This command checks the installed ABP CLI extensions and updates them if necessa Usage: -````bash +```bash abp check-extensions -```` +``` ### install-old-cli @@ -1001,7 +1107,7 @@ abp mcp-studio [options] Options: -* `--endpoint` or `-e`: Overrides ABP Studio MCP endpoint. Default value is `http://localhost:38280/mcp/`. +- `--endpoint` or `-e`: Overrides ABP Studio MCP endpoint. Default value is `http://localhost:38280/mcp/`. Example: @@ -1094,7 +1200,7 @@ body { console.log('MyPage.js loaded!'); ``` -5. Finally, run the `generate-razor-page` command under the `Views` folder: +1. Finally, run the `generate-razor-page` command under the `Views` folder: ```bash > abp generate-razor-page @@ -1124,11 +1230,11 @@ app.Use(async (httpContext, next) => }); ``` -![Razor Page](./../images/abp-generate-razor-page.png) +Razor Page #### Options -* ```--version``` or ```-v```: Specifies the version for ABP CLI to be installed. +- `--version` or `-v`: Specifies the version for ABP CLI to be installed. ### generate-jwks @@ -1136,10 +1242,12 @@ Generates an RSA key pair for use with OpenIddict `private_key_jwt` client authe The command produces two files: -| File | Description | -|---|---| -| `.json` | JWKS (JSON Web Key Set) containing the **public key**. Paste this into the **JSON Web Key Set** field of your OpenIddict application in the ABP management UI. | -| `-private.pem` | PKCS#8 PEM **private key**. Store this securely in your client application and use it to sign JWT client assertions. | + +| File | Description | +| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `.json` | JWKS (JSON Web Key Set) containing the **public key**. Paste this into the **JSON Web Key Set** field of your OpenIddict application in the ABP management UI. | +| `-private.pem` | PKCS#8 PEM **private key**. Store this securely in your client application and use it to sign JWT client assertions. | + > **Security notice:** Never commit the private key file to source control. Add it to `.gitignore`. Only the JWKS (public key) needs to be shared with the authorization server. @@ -1151,11 +1259,11 @@ abp generate-jwks [options] #### Options -* `--output` or `-o`: Output directory. Defaults to the current directory. -* `--key-size` or `-s`: RSA key size in bits. Supported values: `2048` (default), `4096`. -* `--alg`: Signing algorithm. Supported values: `RS256` (default), `RS384`, `RS512`, `PS256`, `PS384`, `PS512`. -* `--kid`: Custom Key ID. Auto-generated if not specified. -* `--file` or `-f`: Output file name prefix. Defaults to `jwks`. Generates `.json` and `-private.pem`. +- `--output` or `-o`: Output directory. Defaults to the current directory. +- `--key-size` or `-s`: RSA key size in bits. Supported values: `2048` (default), `4096`. +- `--alg`: Signing algorithm. Supported values: `RS256` (default), `RS384`, `RS512`, `PS256`, `PS384`, `PS512`. +- `--kid`: Custom Key ID. Auto-generated if not specified. +- `--file` or `-f`: Output file name prefix. Defaults to `jwks`. Generates `.json` and `-private.pem`. #### Examples @@ -1173,9 +1281,7 @@ abp generate-jwks -o ./keys -f myapp #### Workflow 1. Run `abp generate-jwks` to generate the key pair. - 2. Open the ABP OpenIddict application management UI, select your **Confidential** application, choose **JWKS (private_key_jwt)** as the authentication method, and paste the contents of `jwks.json` into the **JSON Web Key Set** field. - 3. In your client application, load the private key from the PEM file and sign JWT client assertions: ```csharp @@ -1225,5 +1331,6 @@ var tokenResponse = await httpClient.RequestClientCredentialsTokenAsync( ## See Also -* [Examples for the new command](./new-command-samples.md) -* [Video tutorial](https://abp.io/video-courses/essentials/abp-cli) +- [Examples for the new command](./new-command-samples.md) +- [Video tutorial](https://abp.io/video-courses/essentials/abp-cli) + diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index cc6307b3e7..f82f29d551 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -1866,6 +1866,68 @@ } ] }, + { + "text": "React", + "items": [ + { + "text": "Overview", + "path": "framework/ui/react/index.md", + "isIndex": true + }, + { + "text": "Configuration and Development", + "items": [ + { + "text": "Environment Variables", + "path": "framework/ui/react/environment-variables.md" + }, + { + "text": "Unit Testing", + "path": "framework/ui/react/unit-testing.md" + } + ] + }, + { + "text": "Core Features", + "items": [ + { + "text": "Authorization", + "path": "framework/ui/react/authorization.md" + }, + { + "text": "Localization", + "path": "framework/ui/react/localization.md" + }, + { + "text": "Permission Management", + "path": "framework/ui/react/permission-management.md" + }, + { + "text": "HTTP Requests", + "path": "framework/ui/react/http-requests.md" + } + ] + }, + { + "text": "Customization and Components", + "items": [ + { + "text": "Customization", + "path": "framework/ui/react/customization.md" + }, + { + "text": "Components", + "path": "framework/ui/react/components/index.md", + "isIndex": true + } + ] + }, + { + "text": "Admin Console", + "path": "framework/ui/react/admin-console.md" + } + ] + }, { "text": "React Native", "items": [ diff --git a/docs/en/framework/ui/index.md b/docs/en/framework/ui/index.md index d892c63c69..ca33ca9ff1 100644 --- a/docs/en/framework/ui/index.md +++ b/docs/en/framework/ui/index.md @@ -1,7 +1,7 @@ ```json //[doc-seo] { - "Description": "Explore ABP's UI options, including MVC, Blazor, Angular, React Native, and MAUI, to build dynamic applications effortlessly." + "Description": "Explore ABP's UI options, including React, MVC, Blazor, Angular, React Native, and MAUI, to build dynamic applications effortlessly." } ``` @@ -9,6 +9,7 @@ ABP provides several options for building the user interface (UI) in your applications. Here are some of the officially supported UI options you can use with ABP: +* [React](./react/index.md) *(modern template system only)* * [MVC / Razor Pages](./mvc-razor-pages/overall.md) * [Blazor](./blazor/overall.md) * [Angular](./angular/quick-start.md) diff --git a/docs/en/framework/ui/mvc-razor-pages/overall.md b/docs/en/framework/ui/mvc-razor-pages/overall.md index fc5b0b0ac0..425c94d2d9 100644 --- a/docs/en/framework/ui/mvc-razor-pages/overall.md +++ b/docs/en/framework/ui/mvc-razor-pages/overall.md @@ -17,8 +17,8 @@ ABP provides a convenient and comfortable way of creating web applications using ASP.NET Core provides two models for UI development: -* **[MVC (Model-View-Controller)](https://docs.microsoft.com/en-us/aspnet/core/mvc/)** is the classic way that exists from the version 1.0. This model can be used to create UI pages/components and HTTP APIs. -* **[Razor Pages](https://docs.microsoft.com/en-us/aspnet/core/razor-pages/)** was introduced with the ASP.NET Core 2.0 as a new way to create web pages. +- **[MVC (Model-View-Controller)](https://docs.microsoft.com/en-us/aspnet/core/mvc/)** is the classic way that exists from the version 1.0. This model can be used to create UI pages/components and HTTP APIs. +- **[Razor Pages](https://docs.microsoft.com/en-us/aspnet/core/razor-pages/)** was introduced with the ASP.NET Core 2.0 as a new way to create web pages. **ABP supports both** of the MVC and the Razor Pages models. However, it is suggested to create the **UI pages with Razor Pages** approach and use the **MVC model to build HTTP APIs**. So, all the pre-build modules, samples and the documentation is based on the Razor Pages for the UI development, while you can always apply the MVC pattern to create your own pages. @@ -32,18 +32,18 @@ The [application startup template](../../../solution-templates/application-modul ABP provides a complete [Theming](theming.md) system with the following goals: -* Reusable [application modules](../../../modules) are developed **theme-independent**, so they can work with any UI theme. -* UI theme is **decided by the final application**. -* The theme is distributed via NuGet/NPM packages, so it is **easily upgradable**. -* The final application can **customize** the selected theme. +- Reusable [application modules](../../../modules) are developed **theme-independent**, so they can work with any UI theme. +- UI theme is **decided by the final application**. +- The theme is distributed via NuGet/NPM packages, so it is **easily upgradable**. +- The final application can **customize** the selected theme. ### Current Themes Currently, three themes are **officially provided**: -* The [Basic Theme](Basic-Theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**. -* The [Lepton Theme](https://abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP](https://abp.io/) license. -* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](../../../ui-themes/lepton-x/mvc.md) and [lite](../../../ui-themes/lepton-x-lite/asp-net-core.md) choices. +- The [Basic Theme](Basic-Theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**. +- The [Lepton Theme](https://abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP](https://abp.io/) license. +- The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](../../../ui-themes/lepton-x/mvc.md) and [lite](../../../ui-themes/lepton-x-lite/asp-net-core.md) choices. There are also some community-driven themes for the ABP (you can search on the web). @@ -72,7 +72,7 @@ You can use these libraries directly in your applications, without needing to ma The themes provide the standard layouts. So, you have responsive layouts with the standard features already implemented. The screenshot below has taken from the Application Layout of the [Basic Theme](basic-theme.md): -![basic-theme-application-layout](../../../images/basic-theme-account-layout.png) +basic-theme-application-layout See the [Theming](theming.md) document for more layout options and other details. @@ -90,13 +90,13 @@ Dynamic JavaScript API Client Proxy system allows you to consume your server sid **Example: Get a list of authors from the server** -````js +```js acme.bookStore.authors.author.getList({ maxResultCount: 10 }).then(function(result){ console.log(result.items); }); -```` +``` `acme.bookStore.authors.author.getList` is an auto-generated function that internally makes an AJAX call to the server. @@ -108,7 +108,7 @@ ABP makes it easier & type safe to write Bootstrap HTML. **Example: Render a Bootstrap modal** -````html +```html @@ -116,7 +116,7 @@ ABP makes it easier & type safe to write Bootstrap HTML. -```` +``` See the [Tag Helpers](tag-helpers) document for more. @@ -126,9 +126,9 @@ ABP provides `abp-dynamic-form` and `abp-input` tag helpers to dramatically simp **Example: Use `abp-dynamic-form` to create a complete form based on a model** -````html +```html -```` +``` See the [Forms & Validation](forms-validation.md) document for details. @@ -136,14 +136,14 @@ See the [Forms & Validation](forms-validation.md) document for details. ABP provides a flexible and modular Bundling & Minification system to create bundles and minify style/script files on runtime. -````html +```html -```` +``` Also, Client Side Package Management system offers a modular and consistent way of managing 3rd-party library dependencies. @@ -157,11 +157,11 @@ See the [Bundling & Minification](bundling-minification.md) and [Client Side Pac ABP provides a lot of built-in solutions to common application requirements; -* [Widget System](widgets.md) can be used to create reusable widgets & create dashboards. -* [Page Alerts](page-alerts.md) makes it easy to show alerts to the user. -* [Modal Manager](modals.md) provides a simple way to build and use modals. -* [Data Tables](data-tables.md) integration makes straightforward to create data grids. +- [Widget System](widgets.md) can be used to create reusable widgets & create dashboards. +- [Page Alerts](page-alerts.md) makes it easy to show alerts to the user. +- [Modal Manager](modals.md) provides a simple way to build and use modals. +- [Data Tables](data-tables.md) integration makes straightforward to create data grids. ## Customization -There are a lot of ways to customize the theme and the UIs of the pre-built modules. You can override components, pages, static resources, bundles and more. See the [User Interface Customization Guide](customization-user-interface.md). +There are a lot of ways to customize the theme and the UIs of the pre-built modules. You can override components, pages, static resources, bundles and more. See the [User Interface Customization Guide](customization-user-interface.md). \ No newline at end of file diff --git a/docs/en/framework/ui/react-native/index.md b/docs/en/framework/ui/react-native/index.md index c25703f6bb..9b2792ae55 100644 --- a/docs/en/framework/ui/react-native/index.md +++ b/docs/en/framework/ui/react-native/index.md @@ -5,12 +5,12 @@ } ``` -````json +```json //[doc-params] { "Architecture": ["Monolith", "Tiered", "Microservice"] } -```` +``` # Getting Started with React Native @@ -28,10 +28,9 @@ Please follow the steps below to prepare your development environment for React 2. **[Optional] Install Yarn:** You can install Yarn v1 (not v2) by following the instructions on [the installation page](https://classic.yarnpkg.com/en/docs/install). Yarn v1 provides a better developer experience compared to npm v6 and below. You can skip this step and use npm, which is built into Node.js. 3. **[Optional] Install VS Code:** [VS Code](https://code.visualstudio.com/) is a free, open-source IDE that works seamlessly with TypeScript. While you can use any IDE, including Visual Studio or Rider, VS Code typically provides the best developer experience for React Native projects. 4. **[Optional] Install an Emulator/Simulator:** If you want to test on Android emulators or iOS simulators (instead of using the Web View method), you'll need to install one of the following: - - **Android Studio & Emulator:** Install [Android Studio](https://developer.android.com/studio) and set up an Android Virtual Device (AVD) through the AVD Manager. You can follow the [Android Studio Emulator guide](https://docs.expo.dev/workflow/android-studio-emulator/) on expo.io documentation. - - **Xcode & iOS Simulator:** On macOS, install [Xcode](https://developer.apple.com/xcode/) from the App Store, which includes the iOS Simulator. You can follow the [iOS Simulator guide](https://docs.expo.dev/workflow/ios-simulator/) on expo.io documentation. - - > **Note:** The Web View method (recommended for quick testing) doesn't require an emulator or simulator. If you prefer a CLI-based approach for Android, you can check the [setting up android emulator without android studio](setting-up-android-emulator.md) guide as an alternative. + - **Android Studio & Emulator:** Install [Android Studio](https://developer.android.com/studio) and set up an Android Virtual Device (AVD) through the AVD Manager. You can follow the [Android Studio Emulator guide](https://docs.expo.dev/workflow/android-studio-emulator/) on expo.io documentation. + - **Xcode & iOS Simulator:** On macOS, install [Xcode](https://developer.apple.com/xcode/) from the App Store, which includes the iOS Simulator. You can follow the [iOS Simulator guide](https://docs.expo.dev/workflow/ios-simulator/) on expo.io documentation. + > **Note:** The Web View method (recommended for quick testing) doesn't require an emulator or simulator. If you prefer a CLI-based approach for Android, you can check the [setting up android emulator without android studio](setting-up-android-emulator.md) guide as an alternative. ## How to Start a New React Native Project @@ -41,7 +40,7 @@ You have multiple options to initiate a new React Native project that works with ABP Studio is the most convenient and flexible way to create a React Native application based on the ABP framework. Follow the [tool documentation](../../../studio) and select the option below: -![React Native option](../../../images/react-native-option.png) +React Native option ### 2. Using ABP CLI @@ -61,7 +60,6 @@ This command creates a solution containing an **Angular** or **MVC** project (de Before running the React Native application, install the dependencies by running `yarn install` or `npm install` in the `react-native` directory. - ### Web View (Recommended - Quickest Method) The quickest way to test the application is by using the web view. While testing on a physical device is also supported, we recommend using [local HTTPS development](https://docs.expo.dev/guides/local-https-development/) as it requires fewer backend modifications. @@ -69,28 +67,21 @@ The quickest way to test the application is by using the web view. While testing Follow these steps to set up the web view: 1. Navigate to the `react-native` directory and start the application by running: - ```bash + ```bash yarn web - ``` - + ``` 2. Generate SSL certificates by running the following command in a separate directory: - ```bash + ```bash mkcert localhost - ``` - + ``` 3. Set up the local proxy by running: - ```bash + ```bash yarn create:local-proxy - ``` + ``` The default port is `443`. To use a different port, specify the `SOURCE_PORT` environment variable: - ```bash - SOURCE_PORT=8443 yarn create:local-proxy - ``` - 4. If you changed the port in the previous step, update the `apiUrl` in `Environment.ts` accordingly. - 5. Update the mobile application settings in the database and re-run the migrations. If you specified a custom port, ensure the port is updated in the configuration as well: - ```json + ```json "OpenIddict": { "Applications": { "MyApplication_Mobile": { @@ -99,7 +90,7 @@ Follow these steps to set up the web view: } } } - ``` + ``` ### Running on Emulator/Simulator @@ -111,17 +102,17 @@ If you prefer to test on an Android emulator or iOS simulator, you'll need to co {{ if Architecture == "Monolith" }} -![react native monolith environment local IP](../../../images/react-native-monolith-environment-local-ip.png) +react native monolith environment local IP {{ else if Architecture == "Tiered" }} -![react native tiered environment local IP](../../../images/react-native-tiered-environment-local-ip.png) +react native tiered environment local IP > Make sure that `issuer` matches the running address of the `.AuthServer` project, `apiUrl` matches the running address of the `.HttpApi.Host` or `.Web` project. {{ else }} -![react native microservice environment local IP](../../../images/react-native-environment-local-ip.png) +react native microservice environment local IP > Make sure that `issuer` matches the running address of the `.AuthServer` project, `apiUrl` matches the running address of the `.AuthServer` project. @@ -131,7 +122,7 @@ If you prefer to test on an Android emulator or iOS simulator, you'll need to co > The React Native application was generated with [Expo](https://expo.io/). Expo is a set of tools built around React Native to help you quickly start an app, and it includes many features. -![expo-cli-options](../../../images/rn-options.png) +expo-cli-options In the image above, you can start the application on an Android emulator, an iOS simulator, or a physical phone by scanning the QR code with the [Expo Client](https://expo.io/tools#client) or by choosing the corresponding option. @@ -146,7 +137,7 @@ Press **i** to open the iOS simulator, or scan the QR code from the Expo CLI wit React Native login screen -Enter **admin** as the username and **1q2w3E\*** as the password to log in to the application. +Enter **admin** as the username and **1q2w3E** as the password to log in to the application. The application is up and running. You can continue to develop your application based on this startup template. @@ -238,11 +229,10 @@ A React Native application running on an Android emulator or a physical phone ** {{ if Architecture == "Monolith" }} -![React Native monolith host project configuration](../../../images/react-native-monolith-be-config.png) +React Native monolith host project configuration - Open the `appsettings.json` file in the `.DbMigrator` folder. Replace the `localhost` address in the `RootUrl` property with your local IP address. Then, run the database migrator. - Open the `appsettings.Development.json` file in the `.HttpApi.Host` folder. Add this configuration to accept global requests for testing the React Native application in the development environment. - ```json { "Kestrel": { @@ -257,11 +247,10 @@ A React Native application running on an Android emulator or a physical phone ** {{ else if Architecture == "Tiered" }} -![React Native tiered project configuration](../../../images/react-native-tiered-be-config.png) +React Native tiered project configuration - Open the `appsettings.json` file in the `.DbMigrator` folder. Replace the `localhost` address in the `RootUrl` property with your local IP address. Then, run the database migrator. - Open the `appsettings.Development.json` file in the `.AuthServer` folder. Add this configuration to accept global requests for testing the React Native application in the development environment. - ```json { "Kestrel": { @@ -273,9 +262,7 @@ A React Native application running on an Android emulator or a physical phone ** } } ``` - - Open the `appsettings.Development.json` file in the `.HttpApi.Host` folder. Add this configuration to accept global requests. Additionally, you need to configure the authentication server as mentioned above. - ```json { "Kestrel": { @@ -296,10 +283,9 @@ A React Native application running on an Android emulator or a physical phone ** {{ else if Architecture == "Microservice" }} -![React Native microservice project configuration](../../../images/react-native-microservice-be-config.png) +React Native microservice project configuration - Open the `appsettings.Development.json` file in the `.AuthServer` folder. Add this configuration to accept global requests for testing the React Native application in the development environment. - ```json { "App": { @@ -314,9 +300,7 @@ A React Native application running on an Android emulator or a physical phone ** } } ``` - - Open the `appsettings.Development.json` file in the `.AdministrationService` folder. Add this configuration to accept global requests for testing the React Native application in the development environment. You should also provide the authentication server configuration. Additionally, you need to apply the same process for all services you will use in the React Native application. - ```json { "App": { @@ -337,9 +321,7 @@ A React Native application running on an Android emulator or a physical phone ** } } ``` - - Update the `appsettings.json` file in the `.IdentityService` folder. Replace the `localhost` configuration with your local IP address for the React Native application. - ```json { //... @@ -358,9 +340,7 @@ A React Native application running on an Android emulator or a physical phone ** } } ``` - - Finally, update the mobile gateway configurations as follows: - ```json //gateways/mobile/MyMicroserviceProject.MobileGateway/Properties/launchSettings.json { @@ -385,7 +365,6 @@ A React Native application running on an Android emulator or a physical phone ** } } ``` - ```json //gateways/mobile/MyMicroserviceProject.MobileGateway/appsettings.json { @@ -433,7 +412,6 @@ A React Native application running on an Android emulator or a physical phone ** } } ``` - {{ end }} -Run the backend application(s) as described in the [getting started document](../../../get-started). +Run the backend application(s) as described in the [getting started document](../../../get-started). \ No newline at end of file diff --git a/docs/en/framework/ui/react/admin-console.md b/docs/en/framework/ui/react/admin-console.md new file mode 100644 index 0000000000..47bc355b76 --- /dev/null +++ b/docs/en/framework/ui/react/admin-console.md @@ -0,0 +1,191 @@ +```json +//[doc-seo] +{ + "Description": "Learn how the ABP Admin Console works with React UI applications and how it is hosted under /admin-console." +} +``` + +# Admin Console + +The **ABP Admin Console** is the React-based administration UI for ABP applications. It provides management pages for ABP modules and is available in React UI solutions created with ABP Studio v3.0+ or `abp new --modern --ui-framework react`. + +The Admin Console is delivered as the `Volo.Abp.AdminConsole` NuGet package for layered and single-layer solutions. In microservice solutions, the template also includes a standalone `apps/react-admin-console/` React app. + +## What It Provides + +The Admin Console contains administration pages for the ABP modules included in the host application. Module pages are activated based on the backend services available in the host, so a solution only shows pages for modules it actually has. + +The built-in module areas include: + +| Module | Notes | +| --- | --- | +| Identity Pro | User, role, claim, and organization unit management when Identity services are available. | +| Account Pro | Account management pages and account-related flows. | +| OpenIddict | Application and scope management when OpenIddict services are available. | +| Audit Logging UI | Optional. Visible when Audit Logging services are available. | +| AI Management | Optional. Visible when AI Management services are available. | +| Text Template Management | Optional. Visible when Text Template Management services are available. | + +Other module pages, such as Setting Management, SaaS, GDPR, or customization pages, can also be available depending on the solution and installed modules. + +## Hosting Model + +The Admin Console is served under: + +```text +/admin-console/* +``` + +API endpoints used by the Admin Console are served under: + +```text +/admin-console/api/* +``` + +The `Volo.Abp.AdminConsole` package embeds the built React SPA under `wwwroot/admin-console/` and registers it with ABP's Virtual File System. `AdminConsoleSpaMiddleware` then serves static assets and falls back to `index.html` for client-side routes. + +The middleware deliberately lets `/admin-console/api/*` requests pass through to MVC controllers. + +## Layered and Single-Layer Templates + +For layered and single-layer modern templates: + +- The developer-owned React app is in the `react/` folder. +- The Admin Console UI is embedded in the backend through the `Volo.Abp.AdminConsole` NuGet package. +- There is no separate `react-admin-console/` source folder in the generated solution. +- The backend host serves Admin Console pages under `/admin-console/*`. + +Example URL: + +```text +https://localhost:44300/admin-console/ +``` + +The main React app links to the Admin Console through `getAdminConsoleUrl()`. + +## Microservice Template + +For the microservice modern template: + +- The main React app is in `apps/react/`. +- The Admin Console app is in `apps/react-admin-console/`. +- Both are served through the Web Gateway. +- The Admin Console has its own OpenIddict client, normally `_AdminConsole`. + +The main React app uses `adminConsoleUrl` from `dynamic-env.json` to open the Admin Console origin and `/admin-console` base path. + +## Module Discovery + +The Admin Console calls: + +```text +GET /admin-console/api/modules +``` + +The backend checks for module application service contracts and returns which module areas are available. The discovery keys include: + +| Key | Backend service check | +| --- | --- | +| `identity` | `Volo.Abp.Identity.IIdentityUserAppService` | +| `saas` | `Volo.Saas.Host.ITenantAppService` | +| `auditLogging` | `Volo.Abp.AuditLogging.IAuditLogsAppService` | +| `gdpr` | `Volo.Abp.Gdpr.IGdprRequestAppService` | +| `openIddict` | `Volo.Abp.OpenIddict.Applications.IApplicationAppService` | +| `textTemplateManagement` | `Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateDefinitionAppService` | +| `aiManagement` | AI Management service contracts, with a legacy AI engine fallback. | + +`settingManagement` is always returned as available by the discovery endpoint, while access to pages is still controlled by permissions. + +## Configuration Endpoint + +The Admin Console also uses: + +```text +GET /admin-console/api/config +``` + +This endpoint provides Admin Console runtime settings such as authority, client ID, scopes, application name, customization options, and localization language configuration. + +Host applications can configure Admin Console options from the `AdminConsole` configuration section or by configuring `AbpAdminConsoleOptions`. + +## Configuring the Admin Console + +In layered and single-layer modern React templates, the embedded Admin Console is configured from the backend host application's `appsettings.json` file. The generated template includes an `AdminConsole` section similar to the following: + +```json +{ + "AdminConsole": { + "IsEnabled": true, + "RedirectRootToAdminConsole": true, + "Authority": "https://localhost:44300", + "ClientId": "Acme_BookStore_AdminConsole", + "Scope": "openid profile email offline_access Acme_BookStore", + "LocalizationLanguages": [ "en", "tr" ], + "ThemeOverrideCssPath": "/theme-override.css", + "InitialTheme": "system", + "CustomizationPermissionName": "AdminConsole.Customization" + } +} +``` + +You can also configure the same values in the module class with `AbpAdminConsoleOptions`: + +```csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + Configure(options => + { + options.IsEnabled = true; + options.RedirectRootToAdminConsole = true; + options.Authority = "https://localhost:44300"; + options.ClientId = "Acme_BookStore_AdminConsole"; + options.Scope = "openid profile email offline_access Acme_BookStore"; + options.LocalizationLanguages = new[] { "en", "tr" }; + options.ThemeOverrideCssPath = "/theme-override.css"; + options.InitialTheme = "system"; + options.CustomizationPermissionName = "AdminConsole.Customization"; + }); +} +``` + +The most commonly changed options are: + +| Option | Description | +| --- | --- | +| `IsEnabled` | Enables or disables the embedded Admin Console SPA middleware. | +| `RedirectRootToAdminConsole` | Redirects the backend root path (`/`) to `/admin-console`. | +| `Authority` | OpenID Connect authority URL. If it is `null`, the host origin is used. | +| `ClientId` | OpenIddict client ID used by the Admin Console SPA. | +| `Scope` | Space-separated OAuth scopes requested by the Admin Console. | +| `LocalizationLanguages` | UI language codes exposed to the Admin Console. If empty, the frontend falls back to `en`. | +| `ThemeOverrideCssPath` | Optional CSS path or absolute URL injected into the Admin Console HTML. | +| `InitialTheme` | Initial theme behavior: `light`, `dark`, `system`, or `both`. | +| `CustomizationPermissionName` | Permission required to show and use the Admin Console customization page. If not set, customization is disabled. | + +The `ApplicationName`, `LogoUrl`, `InitialTheme`, and `ThemeOverrideCssPath` values can also be changed from the Admin Console customization UI when `CustomizationPermissionName` is configured and the current user has that permission. Values saved from the customization UI are stored as settings and override the defaults from configuration. + +In microservice solutions, the Admin Console is a separate React app under `apps/react-admin-console/`. It still uses its own OpenIddict client (`_AdminConsole`) and runtime configuration, while the backend exposes the same `/admin-console/api/config` and `/admin-console/api/modules` endpoints. + +## Permissions + +Admin Console routes still require permissions. For example: + +- Identity pages use `AbpIdentity.*` permissions. +- OpenIddict pages use `OpenIddictPro.Application` and `OpenIddictPro.Scope`. +- Audit Logging uses `AuditLogging.AuditLogs`. +- Text Template Management uses `TextTemplateManagement.*`. +- AI Management uses `AIManagement.*`. + +The main React app's Admin Console menu item only requires authentication. The Admin Console performs detailed permission checks for its own pages. + +## Customization + +The developer-owned React app is intended for application-specific pages. The Admin Console is an ABP-managed administration surface and should normally be updated by updating ABP packages. + +For layered and single-layer hosts, the package supports host-side options such as application name, localization languages, and theme override CSS path. For larger UI changes, prefer building your own pages in the main React app or extending the backend modules through supported ABP extension points. + +## See Also + +- [React UI](./index.md) +- [Environment Variables](./environment-variables.md) +- [Permission Management](./permission-management.md) diff --git a/docs/en/framework/ui/react/authorization.md b/docs/en/framework/ui/react/authorization.md new file mode 100644 index 0000000000..4f6d673d87 --- /dev/null +++ b/docs/en/framework/ui/react/authorization.md @@ -0,0 +1,183 @@ +```json +//[doc-seo] +{ + "Description": "Learn how authentication and authorization are configured in ABP React UI applications." +} +``` + +# Authorization in React UI + +OAuth is preconfigured in ABP React UI templates. When you create a React solution with ABP Studio v3.0+ or `abp new --modern --ui-framework react`, the template includes OpenID Connect settings, an OpenIddict client, route guards, and authentication hooks. + +The React app authenticates against the ABP Auth Server using the **Authorization Code flow with PKCE**, which is the recommended flow for browser-based applications. + +## Packages + +The template uses these packages for authentication: + +| Package | Purpose | +| --- | --- | +| `@volo/abp-oidc-auth` | Framework-agnostic OIDC client helpers for ABP/OpenIddict backends. | +| `@volo/abp-react-oidc-auth` | React adapter for the ABP OIDC client. | +| `oidc-client-ts` | Underlying OIDC protocol implementation. | + +The package list also includes `@volo/abp-app-config` and `@volo/abp-react-app-config`, which are used to fetch application configuration and permissions after authentication. + +## OAuth Configuration + +The OIDC settings are resolved from runtime configuration first and fall back to `src/env.ts`. + +```ts +export function getOAuthConfig(): { + issuer: string + redirectUri: string + clientId: string + scope: string + responseType: 'code' +} { + return { + issuer: loadedConfig?.oAuthConfig?.issuer ?? env.oauth.issuer, + redirectUri: loadedConfig?.oAuthConfig?.redirectUri ?? env.oauth.redirectUri, + clientId: loadedConfig?.oAuthConfig?.clientId ?? env.oauth.clientId, + scope: loadedConfig?.oAuthConfig?.scope ?? env.oauth.scope, + responseType: 'code', + } +} +``` + +The important configuration values are: + +- `oAuthConfig.issuer`: Auth Server / OpenIddict authority URL. +- `oAuthConfig.redirectUri`: URL where the Auth Server redirects after login. +- `oAuthConfig.clientId`: OpenIddict client ID, normally `_App`. +- `oAuthConfig.scope`: Scopes requested by the React app. + +See [Environment Variables](./environment-variables.md) for the full runtime configuration model. + +## Initializing Authentication + +The app loads runtime configuration before initializing OIDC: + +```tsx +async function bootstrap() { + await loadRuntimeConfig() + initUserManager() + createRoot(document.getElementById('root')!).render( + + + + ) +} +``` + +`initUserManager()` creates the ABP React OIDC client: + +```ts +client = createAbpReactOidcAuth({ + authority: config.issuer, + clientId: config.clientId, + redirectUri: config.redirectUri, + postLogoutRedirectUri: config.redirectUri, + scope: config.scope, + responseType: config.responseType, + automaticSilentRenew: true, + userStoreType: 'localStorage', + userStorePrefix: `oidc.${config.clientId}`, + silentRedirectUri: `${window.location.origin}/silent-renew.html`, +}) +``` + +The template stores the OIDC user in local storage and enables silent renewal with `public/silent-renew.html`. + +## Auth Provider and Hook + +`AuthProvider` wraps the app and handles the OIDC callback: + +```tsx +export function AuthProvider({ children }: { children: ReactNode }) { + const authClient = getAuthClient() + + useEffect(() => { + const params = new URLSearchParams(window.location.search) + if (!params.has('code') || !params.has('state')) return + void authClient.handleSigninCallback().then(() => + window.history.replaceState({}, document.title, window.location.pathname) + ) + }, []) + + return {children} +} +``` + +Use `useAuth()` in components: + +```tsx +import { useAuth } from '@/lib/auth/AuthContext' + +export function LoginButton() { + const { isAuthenticated, isLoading, login, logout, user } = useAuth() + + if (isLoading) return null + + return isAuthenticated ? ( + + ) : ( + + ) +} +``` + +## Route Protection + +The React template uses TanStack Router. Protected routes use `beforeLoad` guards. + +```ts +const identityLayoutRoute = createRoute({ + getParentRoute: () => rootRoute, + path: '/identity', + component: IdentityLayout, + beforeLoad: authGuard, +}) +``` + +`authGuard` checks the current OIDC user and redirects unauthenticated users to the Auth Server: + +```ts +export async function authGuard({ location }: GuardContext) { + const user = await userManager.getUser() + if (!user || user.expired) { + await userManager.signinRedirect({ + state: { returnUrl: location.href }, + }) + throw new Error('Redirecting to login') + } +} +``` + +Routes that also require a permission use `createPermissionGuard`: + +```ts +const usersRoute = createRoute({ + getParentRoute: () => identityLayoutRoute, + path: 'users', + component: UsersPage, + beforeLoad: createPermissionGuard('AbpIdentity.Users'), +}) +``` + +Permission checks are explained in [Permission Management](./permission-management.md). + +## OpenIddict Clients + +The generated OpenIddict clients depend on the template: + +- Layered and single-layer modern templates use the main React client, normally `_App`. +- Microservice modern templates also include an Admin Console client, normally `_AdminConsole`, because the Admin Console is a separate React app. + +If you change URLs after generation, update both the runtime configuration and the corresponding OpenIddict client redirect URLs. + +## See Also + +- [Environment Variables](./environment-variables.md) +- [Permission Management](./permission-management.md) +- [Authorization](../../../framework/fundamentals/authorization/index.md) diff --git a/docs/en/framework/ui/react/components/index.md b/docs/en/framework/ui/react/components/index.md new file mode 100644 index 0000000000..856759acd5 --- /dev/null +++ b/docs/en/framework/ui/react/components/index.md @@ -0,0 +1,184 @@ +```json +//[doc-seo] +{ + "Description": "Learn about the component architecture and UI libraries used by ABP React UI applications." +} +``` + +# Components + +ABP React UI templates use a source-owned component architecture. The generated app includes shadcn/ui-style primitives, layout components, feature components, route pages, and shared infrastructure under `src/lib/`. + +The goal is to give you a working React application that you can customize without replacing framework-owned black boxes. + +## Component Structure + +The main React app is organized like this: + +```text +src/ +├── components/ +│ ├── layout/ +│ ├── ui/ +│ └── identity/ +├── lib/ +│ ├── api/ +│ ├── auth/ +│ ├── i18n/ +│ ├── routing/ +│ └── theme/ +├── locales/ +├── pages/ +└── routes/ +``` + +The exact folders can vary by selected template options and modules. + +## UI Stack + +The React template uses: + +| Library | Purpose | +| --- | --- | +| React | UI rendering. | +| Vite | Build tool and development server. | +| TanStack Router | Client-side routing. | +| TanStack Query | Server state, queries, mutations, and cache invalidation. | +| shadcn/ui-style components | Source-owned UI primitives built on Radix UI and Tailwind CSS. | +| Radix UI | Accessible low-level UI primitives. | +| Tailwind CSS | Utility-first styling and design tokens. | +| React Hook Form | Form state management. | +| Zod | Form and DTO validation schemas. | +| Axios | HTTP client. | +| i18next / react-i18next | Localization. | +| Zustand | Lightweight client state when needed. | +| Sonner | Toast notifications. | +| Lucide React | Icons. | + +## `components/ui` + +`src/components/ui/` contains reusable UI primitives. These components are copied into your project and can be edited directly. + +Common components include: + +- `Button` +- `Input` +- `Label` +- `Table` +- `Dialog` +- `DropdownMenu` +- `Select` +- `Card` +- `Tabs` +- `Badge` +- `DatePicker` +- `ConfirmDialog` + +Use these primitives to build application pages and feature components. + +```tsx +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' + +export function ReportCard() { + return ( + + + Reports + + + + + + ) +} +``` + +## Layout Components + +Layout components are under `src/components/layout/`. + +Important components include: + +- `RootLayout`: root shell used by TanStack Router. +- `Header`: top bar, login button, theme toggle, and user menu. +- `Sidebar`: route-config-driven navigation menu. +- `UserMenu`: account-related dropdown menu. + +The sidebar reads `src/lib/routing/route-config.ts`, checks authentication and permissions, and renders internal or external links. + +## Feature Components + +Feature-specific components should live near the feature that owns them. For example, Identity-specific layout components live under `src/components/identity/`, while Books-specific UI is implemented in `src/pages/books/BooksPage.tsx` in the sample template. + +As a rule: + +- Put generic, reusable primitives in `components/ui`. +- Put application layout in `components/layout`. +- Put feature-specific components under `components/` or next to the page when they are only used by one page. + +## Pages + +Route pages live under `src/pages/`. A page usually combines: + +- UI primitives from `components/ui`. +- API functions from `src/lib/api`. +- Server state from TanStack Query. +- Form state from React Hook Form. +- Validation schemas from Zod. +- Permissions from `usePermissions()`. +- Localized strings from `useTranslation()`. + +The Books page is the best full CRUD reference when the sample CRUD option is selected. + +## Forms + +Forms use React Hook Form and Zod: + +```tsx +const productSchema = z.object({ + name: z.string().min(1, 'Required'), + price: z.number().min(0), +}) + +type ProductFormData = z.infer + +const form = useForm({ + resolver: zodResolver(productSchema), + defaultValues: { + name: '', + price: 0, + }, +}) +``` + +This keeps runtime validation and TypeScript types close to each other. + +## Routing Components + +Routes are configured in `src/routes/router.tsx` with TanStack Router. Use: + +- `authGuard` for authenticated pages. +- `createPermissionGuard('Permission.Name')` for permission-protected pages. +- `RootLayout` and nested layouts for shared page structure. + +Menu entries are configured separately in `src/lib/routing/route-config.ts`, so route registration and navigation display can evolve independently. + +## API Components and Hooks + +API functions live under `src/lib/api/` and use the shared `api` Axios instance. Components normally consume these functions through TanStack Query: + +```tsx +const usersQuery = useQuery({ + queryKey: ['app', 'users', queryParams], + queryFn: () => getAppUsers(queryParams), +}) +``` + +This keeps HTTP details out of rendering components and gives you caching, loading states, refetching, and mutation invalidation. + +## See Also + +- [Customization](../customization.md) +- [HTTP Requests](../http-requests.md) +- [Unit Testing](../unit-testing.md) diff --git a/docs/en/framework/ui/react/customization.md b/docs/en/framework/ui/react/customization.md new file mode 100644 index 0000000000..3e64018dab --- /dev/null +++ b/docs/en/framework/ui/react/customization.md @@ -0,0 +1,208 @@ +```json +//[doc-seo] +{ + "Description": "Learn how to customize ABP React UI applications, including pages, themes, sidebar navigation, and the user menu." +} +``` + +# Customization + +The React app generated by ABP is fully owned by your solution. All source code is available, so you can change pages, components, routes, themes, menus, API calls, and layout behavior just like in any other React application. + +This page focuses on the main developer-owned React app. The same general approach applies to the public-web React app if your solution includes one. The Admin Console is an ABP-managed administration surface; see [Admin Console](./admin-console.md) for details. + +## General Customization + +Application pages live under `src/pages/`. The template includes practical references: + +- **Users page**: a simple page that lists users and links to the Admin Console for full user and role management. +- **Books page**: a full CRUD sample when the sample CRUD option is selected during solution creation. It demonstrates TanStack Query, forms, Zod validation, dialogs, tables, permissions, and toast notifications. + +Shared UI and infrastructure live under: + +```text +src/ +├── components/ +│ ├── layout/ +│ └── ui/ +├── lib/ +│ ├── api/ +│ ├── auth/ +│ ├── i18n/ +│ ├── routing/ +│ └── theme/ +└── pages/ +``` + +## Adding a Page + +Create a page under `src/pages/`: + +```tsx +export function ReportsPage() { + return ( +
+

Reports

+
+ ) +} +``` + +Register it with TanStack Router in `src/routes/router.tsx`: + +```tsx +const reportsRoute = createRoute({ + getParentRoute: () => rootRoute, + path: '/reports', + component: ReportsPage, + beforeLoad: createPermissionGuard('MyProjectName.Reports'), +}) + +const routeTree = rootRoute.addChildren([ + indexRoute, + reportsRoute, +]) +``` + +Use `authGuard` for pages that only require authentication and `createPermissionGuard` for pages that require a permission. + +## Theming + +The React template uses **shadcn/ui**-style components, Radix UI primitives, Tailwind CSS, and CSS variables. + +Theme tokens are defined in `src/styles/globals.css`: + +```css +:root { + --background: oklch(0.978 0.003 264); + --foreground: oklch(0.205 0.008 264); + --primary: oklch(0.48 0.10 278); + --radius: 0.5rem; +} + +.dark { + --background: oklch(0.16 0.004 264); + --foreground: oklch(0.92 0.005 264); + --primary: oklch(0.62 0.12 278); +} +``` + +ABP Studio's modern wizard can generate different shadcn theme color presets and light/dark/system theme behavior. + +## Changing Theme Colors + +To make a quick theme change, edit the CSS variables in `src/styles/globals.css`: + +```css +:root { + --primary: oklch(0.623 0.188 259.6); + --primary-foreground: oklch(1 0 0); +} +``` + +Because the generated shadcn/ui components consume these variables through Tailwind tokens, the change applies across buttons, links, active sidebar entries, focus rings, and other components that use the primary color. + +## Theme Mode Switcher + +Theme mode is handled by `src/lib/theme/ThemeProvider.tsx`. It supports: + +- `light` +- `dark` +- `system` + +The header cycles through the allowed modes: + +```tsx +const THEME_CYCLE: Theme[] = ['light', 'dark', 'system'] + +function ThemeToggle() { + const { theme, resolvedTheme, setTheme } = useTheme() + + function cycleTheme() { + const currentIndex = THEME_CYCLE.indexOf(theme) + const nextIndex = currentIndex < 0 ? 0 : (currentIndex + 1) % THEME_CYCLE.length + setTheme(THEME_CYCLE[nextIndex]) + } + + return +} +``` + +To remove the switcher or replace it with a dropdown, edit `src/components/layout/Header.tsx`. + +## Modifying the Sidebar Menu + +Sidebar navigation is defined in `src/lib/routing/route-config.ts`. + +Add a menu item: + +```ts +import { BarChart3 } from 'lucide-react' + +export const routeConfig: RouteConfigItem[] = [ + { + path: '/reports', + nameKey: 'Menu:Reports', + icon: BarChart3, + order: 10, + requiredPolicy: 'MyProjectName.Reports', + }, +] +``` + +Then add the localization key to `src/locales/en.json`: + +```json +{ + "Menu:Reports": "Reports" +} +``` + +Use these properties depending on the menu item: + +| Property | Use | +| --- | --- | +| `path` | Internal route path or logical path for an external item. | +| `nameKey` | Localization key shown in the sidebar. | +| `icon` | Optional Lucide icon. | +| `order` | Sorting order. | +| `requiredPolicy` | Hide the item unless the permission is granted. | +| `requiresAuth` | Hide the item unless the user is authenticated. | +| `externalHref` | Open an external URL or another app, such as the Admin Console. | +| `children` | Add nested sidebar items. | + +## Sidebar vs User Menu + +Use the **sidebar navigation** for application pages and module entry points. + +Use the **user menu** for account-specific actions, profile links, sessions, security logs, linked accounts, and logout. The user menu is implemented in `src/components/layout/UserMenu.tsx`. + +Example user menu item: + +```tsx + + + + {t('MyAccount::Preferences')} + + +``` + +## Customizing UI Components + +shadcn/ui components are copied into your project under `src/components/ui/`. They are not black-box components from a package. You can edit them directly. + +For example: + +- Change button variants in `src/components/ui/button.tsx`. +- Change dialog structure in `src/components/ui/dialog.tsx`. +- Add a new reusable component under `src/components/ui/`. +- Add feature-specific components under `src/components//`. + +Keep generic primitives in `components/ui` and business-specific components close to the feature or page that owns them. + +## See Also + +- [Components](./components/index.md) +- [Permission Management](./permission-management.md) +- [Admin Console](./admin-console.md) diff --git a/docs/en/framework/ui/react/environment-variables.md b/docs/en/framework/ui/react/environment-variables.md new file mode 100644 index 0000000000..2b84b0c4d0 --- /dev/null +++ b/docs/en/framework/ui/react/environment-variables.md @@ -0,0 +1,121 @@ +```json +//[doc-seo] +{ + "Description": "Learn how runtime configuration and environment variables work in ABP React UI applications." +} +``` + +# Environment Variables + +ABP React UI applications use a runtime configuration file and Vite environment variables together. The template is preconfigured by ABP Studio's modern wizard, available with ABP Studio **v3.0+**, so a newly created solution already contains working local values for the API, Auth Server, OpenIddict client, and Admin Console link. + +You usually change these values when moving the application to another environment such as staging or production. + +## Configuration Sources + +The React template reads configuration from these places: + +- `dynamic-env.json`: runtime configuration that can be changed without rebuilding the application. +- `public/dynamic-env.json`: the file served by the app. The Vite build copies the root `dynamic-env.json` into this location when it exists. +- `src/env.ts`: local fallback values used when runtime configuration is not loaded. +- `.env` files / shell variables: Vite variables such as `VITE_API_URL`, `VITE_AUTH_URL`, and `VITE_APP_URL`. + +For layered and single-layer modern templates, the React app is in the `react/` folder. For the microservice modern template, it is in `apps/react/`. + +## `dynamic-env.json` + +The runtime configuration file has the same purpose as Angular's dynamic environment configuration: it lets you deploy the same build artifact to different environments and change the API or authentication endpoints at runtime. + +```json +{ + "application": { + "baseUrl": "https://localhost:3000", + "name": "Acme.BookStore" + }, + "oAuthConfig": { + "issuer": "https://localhost:44301/", + "redirectUri": "https://localhost:3000", + "clientId": "Acme_BookStore_App", + "scope": "offline_access openid profile email phone AuthServer IdentityService AdministrationService" + }, + "apis": { + "default": { + "url": "https://localhost:44300", + "rootNamespace": "Acme.BookStore" + } + }, + "adminConsoleUrl": "https://localhost:44307" +} +``` + +The template loads `/dynamic-env.json` first and then tries `/getEnvConfig` for compatibility with environments that expose the file through that endpoint. + +## Available Values + +| Key | Description | +| --- | --- | +| `application.baseUrl` | Public URL of the React application. It is used as a fallback for OAuth redirect URLs. | +| `application.name` | Application name. | +| `application.logoUrl` | Optional logo URL for application branding. | +| `oAuthConfig.issuer` | Auth Server / OpenIddict authority URL. | +| `oAuthConfig.redirectUri` | Redirect URI registered for the React OpenIddict client. | +| `oAuthConfig.clientId` | OpenIddict client ID. The main React app uses `_App`. | +| `oAuthConfig.scope` | OAuth scopes requested by the SPA. | +| `apis.default.url` | Backend API base URL. In microservice solutions, this normally points to the Web Gateway. | +| `apis.default.rootNamespace` | Root namespace used by generated API code and module-specific clients. | +| `adminConsoleUrl` | Origin of the Admin Console app. The React template uses it to open `/admin-console`. | + +The `DynamicEnv` type also includes fields such as `production`, `oAuthConfig.requireHttps`, `oAuthConfig.responseType`, `oAuthConfig.strictDiscoveryDocumentValidation`, and `oAuthConfig.skipIssuerCheck`. The template's OIDC setup always uses the Authorization Code flow by setting `responseType` to `code`. + +## Vite Variables + +The React template uses Vite and reads environment variables with `loadEnv(mode, process.cwd(), '')`, so variables are not limited to the `VITE_` prefix inside `vite.config.ts`. + +The important variables for developers are: + +| Variable | Description | +| --- | --- | +| `VITE_API_URL` | Overrides the backend API or gateway URL used by the dev proxy and runtime fallback. | +| `VITE_AUTH_URL` | Overrides the Auth Server URL used by the dev proxy and runtime fallback. If omitted, the dev proxy can fall back to `VITE_API_URL`. | +| `VITE_APP_URL` | Overrides the React app URL used as the OAuth redirect URI fallback. | + +Example: + +```bash +VITE_API_URL=https://api.bookstore.example.com +VITE_AUTH_URL=https://auth.bookstore.example.com +VITE_APP_URL=https://bookstore.example.com +``` + +## What ABP Studio Preconfigures + +When a React solution is created with ABP Studio v3.0+ or `abp new --modern`, the template fills these values from the generated solution configuration: + +- Local launch ports for the React app, Web Gateway/API host, Auth Server, and Admin Console. +- The OpenIddict client ID, usually `_App`. +- OAuth scopes based on the selected modules, such as Identity, Administration, SaaS, Audit Logging, GDPR, File Management, AI Management, Language Management, or Chat. +- `adminConsoleUrl` when the template includes a separate Admin Console application. + +For local development, these generated values should work without manual changes. For production, update the API URL, Auth Server URL, redirect URI, client ID if you changed the seeded client, and any environment-specific scopes. + +## Development Proxy + +In development, `vite.config.ts` proxies these paths: + +- `/api` to `VITE_API_URL` or the generated API/gateway URL. +- `/connect` to `VITE_AUTH_URL`, `VITE_API_URL`, or the generated Auth Server URL. +- `/getEnvConfig` to `VITE_API_URL` or the generated API/gateway URL. + +This allows the React app to call same-origin paths during development while the backend services run on their own ports. + +## Deployment + +For deployment, prefer changing `dynamic-env.json` instead of rebuilding the React application for each environment. The file should be served with `application/json` content type and should not be rewritten to `index.html` by SPA fallback rules. + +If your server exposes `/getEnvConfig`, configure it to return the same JSON content as `dynamic-env.json`. + +## See Also + +- [React UI](./index.md) +- [Authorization](./authorization.md) +- [HTTP Requests](./http-requests.md) diff --git a/docs/en/framework/ui/react/http-requests.md b/docs/en/framework/ui/react/http-requests.md new file mode 100644 index 0000000000..2c01884635 --- /dev/null +++ b/docs/en/framework/ui/react/http-requests.md @@ -0,0 +1,213 @@ +```json +//[doc-seo] +{ + "Description": "Learn how HTTP requests are made in ABP React UI applications with Axios, runtime configuration, and ABP interceptors." +} +``` + +# HTTP Requests + +ABP React UI templates use [Axios](https://axios-http.com/) for HTTP requests. The generated app contains a shared Axios instance with ABP-specific request and response interceptors, plus typed API modules for backend endpoints. + +The shared client is defined in `src/lib/api/axios.ts` and exported as `api`. + +## Base URL + +The Axios base URL is resolved at request time from runtime configuration: + +```ts +export function getApiBaseUrl(): string { + const apiUrl = getApiUrl() + if (apiUrl.startsWith('http://') || apiUrl.startsWith('https://')) { + return apiUrl.replace(/\/$/, '') + '/api' + } + if (import.meta.env.DEV) { + return '/api' + } + return apiUrl.replace(/\/$/, '') + '/api' +} +``` + +The API URL comes from: + +1. `dynamic-env.json` -> `apis.default.url` +2. `VITE_API_URL` +3. `src/env.ts` generated fallback + +In microservice solutions, `apis.default.url` normally points to the Web Gateway. In layered and single-layer solutions, it normally points to the HTTP API host. + +## Shared Axios Instance + +The template creates one shared instance: + +```ts +export const api = axios.create({ + baseURL: '', + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'Content-Type': 'application/json', + }, +}) +``` + +Use this instance for application API modules instead of creating new Axios clients. It centralizes ABP headers, authentication, tenant handling, language handling, and redirects. + +## Request Interceptor + +Before each request, the template: + +- Sets `baseURL` from runtime configuration. +- Adds `Authorization: Bearer ` from the OIDC user. +- Adds `__tenant` when the user has selected a tenant. +- Adds `Accept-Language` from i18next. +- Keeps default AJAX headers such as `X-Requested-With`. + +```ts +api.interceptors.request.use(async (config) => { + config.baseURL = getApiBaseUrl() + + const user = await userManager.getUser() + if (user?.access_token) { + config.headers.Authorization = `Bearer ${user.access_token}` + } + + const tenantId = sessionStorage.getItem('abp_tenant_id') + if (tenantId && !config.headers.__tenant) { + config.headers.__tenant = tenantId + } + + if (i18n?.language) { + config.headers['Accept-Language'] = + config.headers['Accept-Language'] ?? i18n.language + } + + return config +}) +``` + +## Response Interceptor + +The response interceptor handles common authorization failures: + +- `401 Unauthorized`: redirects to login unless `skipAuthRedirect` is set. +- `403 Forbidden`: redirects to `/403` unless `skip403Redirect` is set. +- Other errors are rejected so the caller can handle them. + +```ts +api.interceptors.response.use( + (response) => response, + async (error) => { + const status = error.response?.status + + if (status === 401 && !error.config?.skipAuthRedirect) { + await userManager.signinRedirect() + return Promise.reject(new Error('Unauthorized - redirecting to login')) + } + + if (status === 403 && !error.config?.skip403Redirect) { + window.location.href = '/403' + return Promise.reject(new Error('Forbidden')) + } + + return Promise.reject(error) + } +) +``` + +Use `skipAuthRedirect` or `skip403Redirect` for calls where the component should handle the error itself. + +## Typed API Modules + +The template organizes backend calls under `src/lib/api/`. For example, the Books sample defines DTOs and functions in `books.ts`: + +```ts +import { api } from './axios' + +export interface PagedResultDto { + items: T[] + totalCount: number +} + +export interface BookDto { + id: string + name?: string + price: number +} + +export async function getBooks(): Promise> { + const { data } = await api.get>('/app/book', { + params: { + maxResultCount: 10, + skipCount: 0, + }, + }) + return data +} +``` + +Notice that the API module calls `/app/book`, not `/api/app/book`. The shared Axios base URL already includes the `/api` prefix when needed. + +## Using Requests from Components + +The template uses TanStack Query for server state: + +```tsx +const { data, isLoading } = useQuery({ + queryKey: ['books', skipCount], + queryFn: () => + getBooks({ + maxResultCount: 10, + skipCount, + sorting: 'creationTime desc', + }), +}) +``` + +Mutations use `useMutation` and invalidate related queries after success: + +```tsx +const createMutation = useMutation({ + mutationFn: createBook, + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['books'] }) + toast.success(t('AbpUi::SavedSuccessfully')) + }, +}) +``` + +## Adding a New API Module + +Create a file under `src/lib/api/`: + +```ts +import { api } from './axios' + +export interface ProductDto { + id: string + name: string +} + +export async function getProducts(): Promise { + const { data } = await api.get('/app/product') + return data +} +``` + +Then consume it from a component with TanStack Query: + +```tsx +const productsQuery = useQuery({ + queryKey: ['products'], + queryFn: getProducts, +}) +``` + +## Development Proxy + +In development, Vite proxies `/api`, `/connect`, and `/getEnvConfig`. This lets the React app use same-origin paths while calls are forwarded to the backend, Auth Server, or gateway configured by `VITE_API_URL` and `VITE_AUTH_URL`. + +## See Also + +- [Environment Variables](./environment-variables.md) +- [Authorization](./authorization.md) +- [Permission Management](./permission-management.md) diff --git a/docs/en/framework/ui/react/index.md b/docs/en/framework/ui/react/index.md new file mode 100644 index 0000000000..4483e7c84f --- /dev/null +++ b/docs/en/framework/ui/react/index.md @@ -0,0 +1,142 @@ +```json +//[doc-seo] +{ + "Description": "Learn how to build modern web applications with ABP React UI, including runtime configuration, authentication, Admin Console, shadcn/ui components, and testing." +} +``` + +# React UI + +ABP provides a **React UI** option for building modern, client-side web applications. React UI is part of the **modern template system** and is available with **ABP Studio v3.0+** through the Modern Wizard or with `abp new --modern` using [ABP CLI](../../../cli/index.md). + +React UI is not available in classic, non-modern templates. Use ABP Studio's modern template flow or `Volo.Abp.Studio.Cli` to create a React-based solution. + +## Technology Stack + +The React UI template is built with: + +| Technology | Purpose | +| --- | --- | +| [Vite](https://vite.dev/) | Build tool and dev server | +| [React](https://react.dev/) | UI framework | +| [TanStack Router](https://tanstack.com/router) | Client-side routing | +| [TanStack Query](https://tanstack.com/query) | Server state and API request orchestration | +| [shadcn/ui](https://ui.shadcn.com/) | Source-owned component library built on Radix UI and Tailwind CSS | +| [Zod](https://zod.dev/) | Schema validation | +| [React Hook Form](https://react-hook-form.com/) | Form state management | +| [Axios](https://axios-http.com/) | HTTP client | +| [Vitest](https://vitest.dev/) | Unit testing | +| [OpenID Connect / OIDC](https://openid.net/connect/) | Authentication against the ABP Auth Server | + +The template also includes ABP-specific NPM packages: + +- [`@volo/abp-app-config`](https://github.com/volosoft/volo/tree/dev/abp/npm/packs/abp-app-config) +- [`@volo/abp-oidc-auth`](https://github.com/volosoft/volo/tree/dev/abp/npm/packs/abp-oidc-auth) +- [`@volo/abp-react-app-config`](https://github.com/volosoft/volo/tree/dev/abp/npm/packs/abp-react-app-config) +- [`@volo/abp-react-oidc-auth`](https://github.com/volosoft/volo/tree/dev/abp/npm/packs/abp-react-oidc-auth) + +## React App and Admin Console + +A modern React solution contains two UI surfaces: + +- **Your React application**: the developer-owned SPA where you build application-specific pages and features. +- **ABP Admin Console**: the React-based administration UI for ABP modules. + +The Admin Console is provided by the `Volo.Abp.AdminConsole` NuGet package in layered and single-layer templates. In microservice templates, it is also generated as a separate `apps/react-admin-console/` app and served through the Web Gateway. + +See [Admin Console](./admin-console.md) for hosting, module discovery, and permission details. + +## Solution Structure + +The React app location depends on the modern template type: + +- **Layered (`app --modern`) and single-layer (`app-nolayers --modern`)**: the React app lives in the `react/` folder at the solution root. +- **Microservice (`microservice --modern`)**: the React app lives at `apps/react/`. + +Typical structure: + +```text +react/ +├── dynamic-env.json +├── public/ +├── src/ +│ ├── components/ +│ ├── lib/ +│ ├── locales/ +│ ├── pages/ +│ ├── routes/ +│ └── main.tsx +├── package.json +├── vite.config.ts +└── vitest.config.ts +``` + +## Creating a Solution + +Install or update `Volo.Abp.Studio.Cli`, then create a modern solution: + +```bash +# Layered app with React UI +abp new Acme.BookStore --template app --modern --ui-framework react + +# Single-layer app with React UI +abp new Acme.BookStore --template app-nolayers --modern --ui-framework react + +# Microservice solution with React UI +abp new Acme.BookStore --template microservice --modern --ui-framework react +``` + +You can also use ABP Studio v3.0+ and select the modern template flow in the New Solution wizard. The wizard preconfigures local ports, runtime configuration, OIDC clients, theme options, and React/Admin Console wiring based on the selected template and modules. + +## Running the Application + +Start the backend from ABP Studio or by running the backend host projects, then start the React development server. + +For layered and single-layer templates: + +```bash +cd react +npm install +npm run dev +``` + +For microservice templates: + +```bash +cd apps/react +npm install +npm run dev +``` + +Run tests with: + +```bash +npm run test +``` + +Build for production with: + +```bash +npm run build +``` + +## Documentation Map + +Use these pages to learn each part of the React UI: + +- [Environment Variables](./environment-variables.md): runtime configuration, `dynamic-env.json`, Vite variables, and Studio-generated defaults. +- [Authorization](./authorization.md): OIDC, Authorization Code flow with PKCE, auth provider, hooks, and route guards. +- [Localization](./localization.md): i18next, local JSON resources, ABP localization keys, and request culture. +- [Permission Management](./permission-management.md): fetching granted policies, `usePermissions()`, route protection, and conditional UI. +- [HTTP Requests](./http-requests.md): Axios setup, interceptors, typed API modules, and TanStack Query usage. +- [Customization](./customization.md): changing pages, themes, sidebar items, user menu entries, and shadcn/ui components. +- [Components](./components/index.md): component architecture, UI primitives, layout components, forms, and routing. +- [Unit Testing](./unit-testing.md): Vitest, React Testing Library, examples, and test workflow. +- [Admin Console](./admin-console.md): the `Volo.Abp.AdminConsole` package, `/admin-console/*` hosting, module discovery, and optional modules. + +## See Also + +- [ABP Studio](../../../studio/index.md) +- [ABP CLI](../../../cli/index.md) +- [Authorization](../../../framework/fundamentals/authorization/index.md) +- [Localization](../../../framework/fundamentals/localization.md) diff --git a/docs/en/framework/ui/react/localization.md b/docs/en/framework/ui/react/localization.md new file mode 100644 index 0000000000..64298278f0 --- /dev/null +++ b/docs/en/framework/ui/react/localization.md @@ -0,0 +1,158 @@ +```json +//[doc-seo] +{ + "Description": "Learn how localization works in ABP React UI applications with i18next and ABP application configuration." +} +``` + +# Localization + +ABP React UI templates use [i18next](https://www.i18next.com/) with [react-i18next](https://react.i18next.com/). The generated app includes local JSON resources and integrates with ABP application configuration through the `@volo/abp-app-config` packages. + +## Localization Files + +The main React app stores client-side translations under `src/locales/`. + +```text +src/ +├── locales/ +│ └── en.json +└── lib/ + └── i18n/ + └── i18n.ts +``` + +The default `i18n.ts` imports the English resource and registers it: + +```ts +import i18n from 'i18next' +import { initReactI18next } from 'react-i18next' +import en from '@/locales/en.json' + +i18n.use(initReactI18next).init({ + resources: { + en: { translation: en }, + }, + lng: 'en', + fallbackLng: 'en', + keySeparator: false, + nsSeparator: false, + interpolation: { + escapeValue: false, + }, +}) +``` + +`keySeparator` and `nsSeparator` are disabled so ABP-style keys such as `AbpIdentity::Users` and `Menu:Home` can be used directly. + +## Using Localized Text + +Use `useTranslation()` from `react-i18next` in components: + +```tsx +import { useTranslation } from 'react-i18next' + +export function BooksTitle() { + const { t } = useTranslation() + + return

{t('Menu:Books')}

+} +``` + +ABP localization keys commonly use the `ResourceName::Key` format: + +```tsx +{t('AbpIdentity::Users')} +{t('AbpAccount::Login')} +{t('AbpUi::SavedSuccessfully')} +``` + +Application-specific menu keys may use names like `Menu:Home` or `Menu:Books`. + +## Adding a Translation + +Add the key to `src/locales/en.json`: + +```json +{ + "Menu:Reports": "Reports", + "Reports": "Reports" +} +``` + +Then use it from a component: + +```tsx +const { t } = useTranslation() + +return

{t('Reports')}

+``` + +## Adding a Language + +Create a new JSON file, for example `src/locales/tr.json`: + +```json +{ + "Menu:Reports": "Raporlar", + "Reports": "Raporlar" +} +``` + +Register it in `src/lib/i18n/i18n.ts`: + +```ts +import en from '@/locales/en.json' +import tr from '@/locales/tr.json' + +i18n.use(initReactI18next).init({ + resources: { + en: { translation: en }, + tr: { translation: tr }, + }, + lng: 'en', + fallbackLng: 'en', +}) +``` + +If you add a language selector, call `i18n.changeLanguage('tr')` when the user chooses Turkish. + +## Server-Side ABP Localization + +ABP's backend localization system is still the source of truth for server-defined resources, validation messages, exception messages, and module texts. The React app uses ABP application configuration through `@volo/abp-app-config` / `@volo/abp-react-app-config` for auth and configuration data, and these packages can include localization resources when configured to do so. + +The main template currently creates the app configuration client with: + +```ts +export const appConfig = createAbpReactAppConfig({ + baseUrl: () => getApiUrl(), + includeLocalizationResources: false, +}) +``` + +Because `includeLocalizationResources` is disabled in the main React template, UI text is normally loaded from `src/locales/*.json`. If you enable server-provided localization resources, make sure your UI initialization merges them into i18next before rendering localized components. + +## Request Culture + +The shared Axios client sends the active i18next language with each request: + +```ts +if (i18n?.language) { + config.headers['Accept-Language'] = + config.headers['Accept-Language'] ?? i18n.language +} +``` + +This lets backend responses, validation messages, and exception messages use the selected culture when the server supports it. + +## Admin Console Localization + +The Admin Console has its own React app and localization setup. In layered and single-layer templates, it is served from the `Volo.Abp.AdminConsole` package. In microservice templates, it is generated as `apps/react-admin-console/`. + +The Admin Console host can expose available languages through `AdminConsole:LocalizationLanguages`, and `/admin-console/api/config` returns the normalized language list. + +## See Also + +- [React UI](./index.md) +- [HTTP Requests](./http-requests.md) +- [Localization](../../../framework/fundamentals/localization.md) diff --git a/docs/en/framework/ui/react/permission-management.md b/docs/en/framework/ui/react/permission-management.md new file mode 100644 index 0000000000..fc009ce5a2 --- /dev/null +++ b/docs/en/framework/ui/react/permission-management.md @@ -0,0 +1,171 @@ +```json +//[doc-seo] +{ + "Description": "Learn how permissions are fetched, stored, checked, and applied in ABP React UI applications." +} +``` + +# Permission Management + +ABP permissions are defined on the server side and are exposed to the React app through ABP application configuration. The React template uses those permissions to protect routes, hide sidebar items, and conditionally render UI actions. + +For the server-side permission system, see [Authorization](../../../framework/fundamentals/authorization/index.md). + +## Packages + +The React template uses: + +| Package | Purpose | +| --- | --- | +| `@volo/abp-app-config` | Framework-agnostic ABP application configuration client. | +| `@volo/abp-react-app-config` | React hooks and adapters for application configuration. | + +The template creates a shared app configuration client in `src/lib/auth/permissions.ts`: + +```ts +export const appConfig = createAbpReactAppConfig({ + baseUrl: () => getApiUrl(), + includeLocalizationResources: false, +}) +``` + +## Fetching Permissions + +After the user logs in, `AuthProvider` fetches application configuration with the current access token: + +```ts +const user = await authClient.getUserManager().getUser() +if (user && !user.expired) { + await fetchAppConfig(user.access_token ?? null) +} +``` + +`fetchAppConfig` also sends the current tenant ID when one is selected: + +```ts +export async function fetchAppConfig(token: string | null): Promise { + const headers: Record = {} + const tenantId = sessionStorage.getItem('abp_tenant_id') + if (tenantId) headers.__tenant = tenantId + await appConfig.fetchConfig(token, { headers }) +} +``` + +The response includes the current user's granted policies. These are stored by the app configuration client and exposed to React components. + +## Checking Permissions in Components + +Use `usePermissions()` from `src/lib/auth/permissions.ts`: + +```tsx +import { usePermissions } from '@/lib/auth/permissions' + +export function BookActions() { + const { isGranted } = usePermissions() + + return ( + <> + {isGranted('MyProjectName.Books.Edit') && } + {isGranted('MyProjectName.Books.Delete') && } + + ) +} +``` + +The Books page uses this pattern for edit and delete actions: + +```ts +const { isGranted } = usePermissions() +const canEdit = isGranted('MyProjectName.Books.Edit') +const canDelete = isGranted('MyProjectName.Books.Delete') +``` + +## Route Guards + +Routes can require a permission by using `createPermissionGuard`: + +```ts +const booksRoute = createRoute({ + getParentRoute: () => rootRoute, + path: '/books', + component: BooksPage, + beforeLoad: createPermissionGuard('MyProjectName.Books'), +}) +``` + +`createPermissionGuard` runs the authentication guard first, fetches app configuration if needed, and redirects to `/403` when the required policy is not granted. + +```ts +export function createPermissionGuard(requiredPolicy: string) { + return async (context: GuardContext) => { + await authGuard(context) + + if (!appConfig.getSnapshot()?.initialized) { + const user = await userManager.getUser() + await fetchAppConfig(user?.access_token ?? null) + } + + if (!isPolicyGranted(requiredPolicy)) throw redirect({ to: '/403' }) + } +} +``` + +## Sidebar Visibility + +The sidebar reads `routeConfig` and hides items that require missing permissions: + +```ts +export const routeConfig: RouteConfigItem[] = [ + { + path: '/identity/users', + nameKey: 'AbpIdentity::Users', + requiredPolicy: 'AbpIdentity.Users', + }, +] +``` + +The sidebar checks each item: + +```ts +if (item.requiresAuth && !isAuthenticated) return false +if (!item.requiredPolicy) return true +if (!isAuthenticated) return false +return isGranted(item.requiredPolicy) +``` + +Use `requiresAuth` for menu items that only require login. Use `requiredPolicy` when the item should only be visible to users with a specific permission. + +## Compound Policies + +The template's `isPolicyGranted` helper supports simple compound expressions: + +- `PermissionA || PermissionB` +- `PermissionA && PermissionB` + +This is useful for menu entries that should be visible when the user has one of several related module permissions. + +## Where Permissions Are Applied + +The generated React app uses permissions in these places: + +- **Users page**: the `/identity/users` route and sidebar entry require `AbpIdentity.Users`. The page links to the Admin Console for full user and role management. +- **Books page**: the route requires `MyProjectName.Books`; edit and delete actions check `MyProjectName.Books.Edit` and `MyProjectName.Books.Delete`. +- **Admin Console link**: the sidebar entry uses `requiresAuth` because the Admin Console performs its own module and route permission checks. + +The Admin Console applies module-specific permissions for pages such as: + +- Identity users and roles: `AbpIdentity.*`. +- OpenIddict applications and scopes: `OpenIddictPro.Application` and `OpenIddictPro.Scope`. +- Audit Logging UI: `AuditLogging.AuditLogs`. +- Text Template Management: `TextTemplateManagement.*`. +- AI Management: `AIManagement.*`. + +## Multi-Tenancy + +When a tenant is selected, the template stores the tenant ID in `sessionStorage` as `abp_tenant_id`. Permission and API requests send it with the `__tenant` header. This ensures the backend returns permissions and data for the selected tenant context. + +## See Also + +- [Authorization](./authorization.md) +- [HTTP Requests](./http-requests.md) +- [Authorization](../../../framework/fundamentals/authorization/index.md) diff --git a/docs/en/framework/ui/react/unit-testing.md b/docs/en/framework/ui/react/unit-testing.md new file mode 100644 index 0000000000..46a3089eeb --- /dev/null +++ b/docs/en/framework/ui/react/unit-testing.md @@ -0,0 +1,150 @@ +```json +//[doc-seo] +{ + "Description": "Learn how to run and write unit tests in ABP React UI applications with Vitest and React Testing Library." +} +``` + +# Unit Testing React UI + +ABP React UI templates are preconfigured for unit testing. A solution created with ABP Studio v3.0+ or `abp new --modern --ui-framework react` includes Vitest, jsdom, React Testing Library, and jest-dom. + +You can add a test file and run the test command without adding extra test infrastructure. + +## Test Stack + +The React template uses: + +| Package | Purpose | +| --- | --- | +| `vitest` | Test runner and assertion library. | +| `jsdom` | Browser-like DOM environment for component tests. | +| `@testing-library/react` | Render React components and query the DOM like a user. | +| `@testing-library/jest-dom` | Extra DOM assertions such as `toBeInTheDocument`. | + +The template also includes `src/test/setup.ts`, which imports `@testing-library/jest-dom/vitest` and initializes the React i18n setup. + +## Configuration + +The test configuration is in `vitest.config.ts`: + +```ts +import { defineConfig } from 'vitest/config' +import react from '@vitejs/plugin-react' +import path from 'path' + +export default defineConfig({ + plugins: [react()], + test: { + environment: 'jsdom', + setupFiles: ['./src/test/setup.ts'], + include: ['src/**/*.{test,spec}.{ts,tsx}'], + globals: true, + }, + resolve: { + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, +}) +``` + +Tests can import application files with the same `@/` alias used by the app. + +## Running Tests + +Install dependencies once: + +```bash +npm install +``` + +Run tests in watch mode: + +```bash +npm run test +``` + +Run tests once, which is useful for CI: + +```bash +npm run test:run +``` + +The template's `package.json` maps these commands to `vitest` and `vitest run`. + +## Example Test + +The template includes example tests under `src/`. For example, `src/pages/home/HomePage.test.tsx` renders the home page and mocks the authentication hook: + +```tsx +import { describe, it, expect, vi, beforeEach } from 'vitest' +import { render, screen } from '@testing-library/react' +import { HomePage } from './HomePage' +import * as auth from '@/lib/auth/AuthContext' + +vi.mock('@/lib/auth/AuthContext', () => ({ + useAuth: vi.fn(), +})) + +describe('HomePage', () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it('renders login prompt when not authenticated', () => { + vi.mocked(auth.useAuth).mockReturnValue({ + isAuthenticated: false, + isLoading: false, + user: null, + login: vi.fn(), + logout: vi.fn(), + navigateToLogin: vi.fn(), + getAccessToken: vi.fn(), + } as unknown as ReturnType) + + render() + expect(screen.getByText('Welcome')).toBeInTheDocument() + expect(screen.getByRole('button', { name: /login/i })).toBeInTheDocument() + }) +}) +``` + +This style keeps the test focused on visible behavior. Dependencies that would require real authentication, network calls, or browser redirects are mocked. + +## Writing a Component Test + +Create a `*.test.tsx` file next to the component: + +```tsx +import { render, screen } from '@testing-library/react' +import { describe, expect, it } from 'vitest' +import { Button } from '@/components/ui/button' + +describe('Button', () => { + it('renders its content', () => { + render() + expect(screen.getByRole('button', { name: 'Save' })).toBeInTheDocument() + }) +}) +``` + +Prefer queries such as `getByRole`, `getByLabelText`, and `getByText` because they describe what the user can see or do. + +## Writing a Service or Hook Test + +For non-component logic, use Vitest directly. The template includes tests for routing guards, permissions, authentication context, and Axios interceptors. + +When testing API code, mock the shared Axios instance or the lower-level dependency instead of calling a real backend. When testing permission behavior, mock the application configuration client or use the exported permission helpers. + +## Interpreting Output + +Vitest reports each test file, failed assertions, stack traces, and a summary of passed/failed tests. In watch mode, it reruns affected tests when files change. In `test:run` mode, Vitest exits with a non-zero status code if any test fails, which makes it suitable for CI pipelines. + +If a component test fails because an ABP service is not initialized, mock the hook or provider used by the component. For example, pages that call `useAuth()` or `usePermissions()` should provide a controlled mock for those hooks unless the test is specifically verifying the provider. + +## See Also + +- [Components](./components/index.md) +- [Authorization](./authorization.md) +- [Permission Management](./permission-management.md) diff --git a/docs/en/modules/openiddict.md b/docs/en/modules/openiddict.md index c1ed40ff9f..910bb2c738 100644 --- a/docs/en/modules/openiddict.md +++ b/docs/en/modules/openiddict.md @@ -303,6 +303,18 @@ PreConfigure(options => - `UpdateAbpClaimTypes(default: true)`: Updates `AbpClaimTypes` to be compatible with the Openiddict claims. - `AddDevelopmentEncryptionAndSigningCertificate(default: true)`: Registers (and generates if necessary) a user-specific development encryption/development signing certificate. This is a certificate used for signing and encrypting the tokens and for **development environment only**. You must set it to **false** for non-development environments. +- `UseDefaultScopesForClientCredentials(default: false)`: When set to `true`, the access token issued for the `client_credentials` grant automatically grants the scopes configured on the client application (permissions prefixed with `oi_scp:`) when the client does not explicitly request any scope. +- `UseDefaultScopesForPassword(default: false)`: When set to `true`, the token response for the `password` grant automatically grants the scopes configured on the client application when the client does not explicitly request any scope. If the configured scopes include `openid`/`profile`/`email`/`roles`, the corresponding `id_token` and claim destinations are affected as well. +- `UseDefaultScopesForTokenExchange(default: false)`: When set to `true`, the token response for the `urn:ietf:params:oauth:grant-type:token-exchange` grant automatically grants the scopes configured on the client application when the client does not explicitly request any scope. If the configured scopes include `openid`/`profile`/`email`/`roles`, the corresponding `id_token` and claim destinations are affected as well. + +Example to enable the default-scope fallback for the `client_credentials` grant: + +```csharp +PreConfigure(options => +{ + options.UseDefaultScopesForClientCredentials = true; +}); +``` > `AddDevelopmentEncryptionAndSigningCertificate` cannot be used in applications deployed on IIS or Azure App Service: trying to use them on IIS or Azure App Service will result in an exception being thrown at runtime (unless the application pool is configured to load a user profile). To avoid that, consider creating self-signed certificates and storing them in the X.509 certificates store of the host machine(s). Please refer to: https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html#registering-a-development-certificate diff --git a/docs/en/release-info/migration-guides/abp-10-0.md b/docs/en/release-info/migration-guides/abp-10-0.md index 334adb2f4f..f3afb68d46 100644 --- a/docs/en/release-info/migration-guides/abp-10-0.md +++ b/docs/en/release-info/migration-guides/abp-10-0.md @@ -133,4 +133,28 @@ See the [Add failure retry policy to InboxProcessor](https://github.com/abpframe Starting from **ABP 10.0**, the [`HideErrors`](../../framework/fundamentals/caching#Available-Options) option of `AbpDistributedCacheOptions` is **disabled by default in the development environment**. By default, ABP hides and logs cache server errors to keep the application running even when the cache is unavailable. -However, in the **development environment**, errors are no longer hidden so that developers can immediately detect and fix **any cache server issues** (such as connection, configuration, or runtime errors). +However, in the **development environment**, errors are no longer hidden so that developers can immediately detect and fix **any cache server issues** (such as connection, configuration, or runtime errors). + +### Angular `LOGO_APP_NAME_TOKEN` May Need Explicit Provider in Module-based Apps + +In ABP v10, the logo/app-name binding moved to the `provideLogo(withEnvironmentOptions(...))` API from `@abp/ng.theme.shared`. + +For standalone Angular applications, configuring `provideLogo(withEnvironmentOptions(environment))` in `app.config.ts` is enough. + +For NgModule-based applications, some setups may still show the literal `ProjectName` text (the default value of `LOGO_APP_NAME_TOKEN`) instead of `environment.application.name`. In that case, provide the token explicitly in your module providers: + +```ts +import { LOGO_APP_NAME_TOKEN } from '@abp/ng.theme.shared'; +import { environment } from '../environments/environment'; + +@NgModule({ + // ... + providers: [ + // ... + { provide: LOGO_APP_NAME_TOKEN, useValue: environment.application.name }, + ], +}) +export class AppModule {} +``` + +For logo customization/replacement details, see the [Component Replacement](../../framework/ui/angular/component-replacement.md#how-to-replace-logocomponent) documentation. diff --git a/docs/en/release-info/migration-guides/abp-10-1.md b/docs/en/release-info/migration-guides/abp-10-1.md index ad0db21a37..2c973c28bb 100644 --- a/docs/en/release-info/migration-guides/abp-10-1.md +++ b/docs/en/release-info/migration-guides/abp-10-1.md @@ -60,6 +60,20 @@ ABP now targets Angular v21 (up from v20). For existing Angular projects, apply providers: [provideZoneChangeDetection(), ...appConfig.providers], }).catch(err => console.error(err)); ``` + + If you are using a module-based structure instead of a standalone one, update the providers in `app.module.ts`: + ```ts + @NgModule({ + declarations: [AppComponent], + providers: [ + //... + provideZoneChangeDetection(), + ], + bootstrap: [AppComponent], + }) + export class AppModule {} + ``` + - **tsconfig.json:** Align with the new property formats to avoid build issues: ```json /* angular/tsconfig.json */ diff --git a/docs/en/studio/release-notes.md b/docs/en/studio/release-notes.md index 985c1f7a64..dcfa904fe0 100644 --- a/docs/en/studio/release-notes.md +++ b/docs/en/studio/release-notes.md @@ -9,7 +9,28 @@ This document contains **brief release notes** for each ABP Studio release. Release notes only include **major features** and **visible enhancements**. Therefore, they don't include all the development done in the related version. -## 2.2.7 (2026-04-20) Latest +## 3.0.1 (2026-05-06) Latest + +* Enhanced Project Wizard: Fixed the optional module selection step for a smoother project setup experience +* React Admin Console Improvements: Resolved identified issues in the React administration templates for better stability +* MacOS Performance: Optimized the internal build pipeline for a more reliable experience on Apple devices +* Stability Fixes: Improved core UI components to ensure parameter consistency across updates + +## 3.0.0 (2026-05-06) + +* Introducing ABP AI Agent: A next-generation smart assistant to accelerate your development +* Enhanced ABP Coding Agent: Smarter code generation and guidance integrated directly into your workflow +* Modern UI Redesign: New "Bento-style" dashboard and a streamlined single sidebar for better focus +* Drag & Drop Support: Easily open your projects by dragging .sln, .slnx, or .abpsln files into the app +* Improved React Templates: Optimized authentication, local debugging, and a new "Thin UI" layered template option +* CMS Kit Newsletter Integration: Ready-to-use newsletter component for public websites +* Faster CLI Experience: Simplified abp login process and improved help output for better usability +* Enhanced Solution Runner: Smarter project management and more reliable configuration handling +* Simplified Project Structure: Legacy systems renamed to "Classic" for a cleaner transition to modern architectures +* System Stability: Significant reduction in background noise/errors and optimized performance +* Global Platform Update: Fully updated to the latest underlying framework versions (v10.3.0) + +## 2.2.7 (2026-04-20) * Improved Blazor WebApp template setup for easier tiered application development * Added application version tracking in analytics events @@ -24,38 +45,38 @@ This document contains **brief release notes** for each ABP Studio release. Rele ## 2.2.6 (2026-04-08) -- Disable Scriban 7.0 cumulative output limit for template rendering +* Disable Scriban 7.0 cumulative output limit for template rendering ## 2.2.5 (2026-04-08) -- Upgraded GPT-5 → GPT-5.4 and improved AI management (providers, blob storage, CLI options) -- Fixed critical build issues (MongoDB, MAUI) and improved overall stability -- Enhanced monitoring (HTTP requests & exceptions) -- Added DBMS auto-detection from connection string -- Upgraded to ABP 10.2 and Scriban 7.0.0 -- Improved developer experience and telemetry (PostHog) -- Minor UI fixes and workflow adjustments (manual build trigger) +* Upgraded GPT-5 → GPT-5.4 and improved AI management (providers, blob storage, CLI options) +* Fixed critical build issues (MongoDB, MAUI) and improved overall stability +* Enhanced monitoring (HTTP requests & exceptions) +* Added DBMS auto-detection from connection string +* Upgraded to ABP 10.2 and Scriban 7.0.0 +* Improved developer experience and telemetry (PostHog) +* Minor UI fixes and workflow adjustments (manual build trigger) ## 2.2.4 (2026-03-25) -- Add `Template Create and Build` workflow -- Disable NuGetAudit in template common.props to prevent CLI deadlock during initial migration +* Add `Template Create and Build` workflow +* Disable NuGetAudit in template common.props to prevent CLI deadlock during initial migration ## 2.2.3 (2026-03-24) -- Fix PostHog environment detection +* Fix PostHog environment detection ## 2.2.1 (2026-02-20) -- Fix tiered Blazor WebApp template HttpApi reference -- Add LeptonX theme templates AuthServer and HttpApi projects -- Enable razor runtime compilation on templates -- Configure HttpClientFactoryOptions for CLI client -- Bump ABP to 10.1.1 and LeptonX to 5.1.1 -- Blazor & Angular UIs: Add AI Management option to the Startup Templates (app-nolayers, app, ms templates) -- Handle docker container start failures in solution runner -- Fix import module version dropdown ordering -- Add PostHog integration for Studio and CLI +* Fix tiered Blazor WebApp template HttpApi reference +* Add LeptonX theme templates AuthServer and HttpApi projects +* Enable razor runtime compilation on templates +* Configure HttpClientFactoryOptions for CLI client +* Bump ABP to 10.1.1 and LeptonX to 5.1.1 +* Blazor & Angular UIs: Add AI Management option to the Startup Templates (app-nolayers, app, ms templates) +* Handle docker container start failures in solution runner +* Fix import module version dropdown ordering +* Add PostHog integration for Studio and CLI ## 2.2.1 (2026-02-20) diff --git a/docs/en/studio/version-mapping.md b/docs/en/studio/version-mapping.md index 2dcdda868f..209413d5dd 100644 --- a/docs/en/studio/version-mapping.md +++ b/docs/en/studio/version-mapping.md @@ -11,8 +11,8 @@ This document provides a general overview of the relationship between various ve | **ABP Studio Version** | **ABP Version of Startup Template** | |------------------------|---------------------------| -| 2.2.7 | 10.3.0 | -| 2.2.5 - 2.2.6 | 10.2.0 | +| 2.2.7 - 3.0.1 | 10.3.0 | +| 2.2.5 - 2.2.6 | 10.2.0 | | 2.2.2 - 2.2.4 | 10.1.1 | | 2.2.1 | 10.1.0 | | 2.1.5 - 2.1.9 | 10.0.2 | diff --git a/docs/en/tutorials/modular-crm/part-08.md b/docs/en/tutorials/modular-crm/part-08.md index f2739a53bb..2d911f93ec 100644 --- a/docs/en/tutorials/modular-crm/part-08.md +++ b/docs/en/tutorials/modular-crm/part-08.md @@ -176,8 +176,20 @@ Now, you know the fundamental principles and mechanics of building sophisticated ## Download the Source Code +{{if UI == "MVC"}} + +You can download the completed sample solution [here](https://github.com/abpframework/abp-samples/tree/master/ModularCRM). + +{{else if UI == "BlazorWebApp"}} + You can download the completed sample solution [here](https://github.com/abpframework/abp-samples/tree/master/ModularCRM-BlazorWebApp). +{{else if UI == "NG"}} + +You can download the completed sample solution [here](https://github.com/abpframework/abp-samples/tree/master/NG.ModularCRM). + +{{end}} + ## See Also See the following sections for additional resources. diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Extensions/TagHelperOutputExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Extensions/TagHelperOutputExtensions.cs index 40ca23a8f1..7b1b4372b5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Extensions/TagHelperOutputExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Extensions/TagHelperOutputExtensions.cs @@ -1,11 +1,17 @@ using Microsoft.AspNetCore.Razor.TagHelpers; +using System; using System.IO; +using System.Linq; using System.Text.Encodings.Web; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; public static class TagHelperOutputExtensions { + // ASCII whitespace per the HTML5 spec, used to tokenize space-separated + // attribute values such as aria-describedby. + private static readonly char[] HtmlAsciiWhitespace = { ' ', '\t', '\n', '\r', '\f' }; + public static string Render(this TagHelperOutput output, HtmlEncoder htmlEncoder) { using (var writer = new StringWriter()) @@ -14,4 +20,35 @@ public static class TagHelperOutputExtensions return writer.ToString(); } } + + /// + /// Appends an id token to the space-separated aria-describedby attribute, + /// preserving any tokens that were already present (e.g. provided by the consumer) + /// and skipping the token when it is already in the list. + /// + public static void AppendAriaDescribedby(this TagHelperOutput output, string token) + { + if (string.IsNullOrEmpty(token)) + { + return; + } + + var existing = output.Attributes + .FirstOrDefault(a => string.Equals(a.Name, "aria-describedby", StringComparison.OrdinalIgnoreCase)) + ?.Value?.ToString(); + + if (string.IsNullOrWhiteSpace(existing)) + { + output.Attributes.SetAttribute("aria-describedby", token); + return; + } + + var tokens = existing.Split(HtmlAsciiWhitespace, StringSplitOptions.RemoveEmptyEntries); + if (tokens.Any(t => t == token)) + { + return; + } + + output.Attributes.SetAttribute("aria-describedby", existing + " " + token); + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index f40ff1030b..f8994a462c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -88,10 +88,10 @@ public class AbpInputTagHelperService : AbpTagHelperService var (inputTag, isCheckBox) = await GetInputTagHelperOutputAsync(context, output); context.Items[nameof(IsOutputHidden)] = IsOutputHidden(inputTag); - var inputHtml = inputTag.Render(_encoder); var label = await GetLabelAsHtmlAsync(context, output, inputTag, isCheckBox); var info = GetInfoAsHtml(context, output, inputTag, isCheckBox); var validation = isCheckBox ? "" : await GetValidationAsHtmlAsync(context, output, inputTag); + var inputHtml = inputTag.Render(_encoder); return (GetContent(context, output, label, inputHtml, validation, info, isCheckBox), isCheckBox); } @@ -259,15 +259,14 @@ public class AbpInputTagHelperService : AbpTagHelperService } var idAttr = inputTagHelperOutput.Attributes.FirstOrDefault(a => a.Name == "id"); + var idValue = idAttr?.Value?.ToString(); - if (idAttr == null) + if (string.IsNullOrEmpty(idValue)) { return; } - var infoText = _tagHelperLocalizer.GetLocalizedText(idAttr.Value + "InfoText", TagHelper.AspFor.ModelExplorer); - - inputTagHelperOutput.Attributes.Add("aria-describedby", infoText); + inputTagHelperOutput.AppendAriaDescribedby(idValue + "InfoText"); } protected virtual bool IsInputCheckbox(TagHelperContext context, TagHelperOutput output, TagHelperAttributeList attributes) @@ -356,14 +355,18 @@ public class AbpInputTagHelperService : AbpTagHelperService } var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); + var idValue = idAttr?.Value?.ToString(); var localizedText = _tagHelperLocalizer.GetLocalizedText(text, TagHelper.AspFor.ModelExplorer); var div = new TagBuilder("div"); - div.Attributes.Add("id", idAttr?.Value + "InfoText"); div.AddCssClass("form-text"); div.InnerHtml.Append(localizedText); - inputTag.Attributes.Add("aria-describedby", idAttr?.Value + "InfoText"); + if (!string.IsNullOrEmpty(idValue)) + { + div.Attributes.Add("id", idValue + "InfoText"); + inputTag.AppendAriaDescribedby(idValue + "InfoText"); + } return div.ToHtmlString(); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index c411d571f4..42d85cfb74 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -73,10 +73,10 @@ public class AbpSelectTagHelperService : AbpTagHelperService protected virtual async Task GetFormInputGroupAsHtmlAsync(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) { var selectTag = await GetSelectTagAsync(context, output, childContent); - var selectAsHtml = selectTag.Render(_encoder); var label = await GetLabelAsHtmlAsync(context, output, selectTag); var validation = await GetValidationAsHtmlAsync(context, output, selectTag); var infoText = GetInfoAsHtml(context, output, selectTag); + var selectAsHtml = selectTag.Render(_encoder); return TagHelper.FloatingLabel ? selectAsHtml + Environment.NewLine + label + Environment.NewLine + infoText + Environment.NewLine + validation : label + Environment.NewLine + selectAsHtml + Environment.NewLine + infoText + Environment.NewLine + validation; @@ -216,15 +216,14 @@ public class AbpSelectTagHelperService : AbpTagHelperService } var idAttr = inputTagHelperOutput.Attributes.FirstOrDefault(a => a.Name == "id"); + var idValue = idAttr?.Value?.ToString(); - if (idAttr == null) + if (string.IsNullOrEmpty(idValue)) { return; } - var infoText = _tagHelperLocalizer.GetLocalizedText(idAttr.Value + "InfoText", TagHelper.AspFor.ModelExplorer); - - inputTagHelperOutput.Attributes.Add("aria-describedby", infoText); + inputTagHelperOutput.AppendAriaDescribedby(idValue + "InfoText"); } protected virtual string GetInfoAsHtml(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag) @@ -249,14 +248,20 @@ public class AbpSelectTagHelperService : AbpTagHelperService } var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); + var idValue = idAttr?.Value?.ToString(); var localizedText = _tagHelperLocalizer.GetLocalizedText(text, TagHelper.AspFor.ModelExplorer); - var small = new TagBuilder("small"); - small.Attributes.Add("id", idAttr?.Value?.ToString() + "InfoText"); - small.AddCssClass("form-text"); - small.InnerHtml.Append(localizedText); + var div = new TagBuilder("div"); + div.AddCssClass("form-text"); + div.InnerHtml.Append(localizedText); + + if (!string.IsNullOrEmpty(idValue)) + { + div.Attributes.Add("id", idValue + "InfoText"); + inputTag.AppendAriaDescribedby(idValue + "InfoText"); + } - return small.ToHtmlString(); + return div.ToHtmlString(); } protected virtual List GetSelectItemsFromEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RequirePermissionsSimpleBatchStateChecker.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RequirePermissionsSimpleBatchStateChecker.cs index ad6c9b989e..0957f51666 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RequirePermissionsSimpleBatchStateChecker.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RequirePermissionsSimpleBatchStateChecker.cs @@ -11,15 +11,21 @@ namespace Volo.Abp.Authorization.Permissions; public class RequirePermissionsSimpleBatchStateChecker : SimpleBatchStateCheckerBase where TState : IHasSimpleStateCheckers { - public static RequirePermissionsSimpleBatchStateChecker Current => _current.Value!; - private static readonly AsyncLocal> _current = new AsyncLocal>(); - - private readonly List> _models; - - static RequirePermissionsSimpleBatchStateChecker() + public static RequirePermissionsSimpleBatchStateChecker Current { - _current.Value = new RequirePermissionsSimpleBatchStateChecker(); + get + { + if (_current.Value == null) + { + _current.Value = new RequirePermissionsSimpleBatchStateChecker(); + } + + return _current.Value; + } } + private static readonly AsyncLocal?> _current = new AsyncLocal?>(); + + private readonly List> _models; public RequirePermissionsSimpleBatchStateChecker() { diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireDynamicBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireDynamicBackgroundWorkerManager.cs index a9b9026606..d54e37c534 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireDynamicBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Hangfire/Volo/Abp/BackgroundWorkers/Hangfire/HangfireDynamicBackgroundWorkerManager.cs @@ -13,7 +13,11 @@ using Volo.Abp.Hangfire; namespace Volo.Abp.BackgroundWorkers.Hangfire; [Dependency(ReplaceServices = true)] -public class HangfireDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerManager, ISingletonDependency +public class HangfireDynamicBackgroundWorkerManager : + IDynamicBackgroundWorkerManager, + ISupportsRuntimeRegistration, + ISupportsCronScheduling, + ISingletonDependency { protected IServiceProvider ServiceProvider { get; } protected IDynamicBackgroundWorkerHandlerRegistry HandlerRegistry { get; } diff --git a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzDynamicBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzDynamicBackgroundWorkerManager.cs index 5a729ad974..2f098d6ab4 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzDynamicBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzDynamicBackgroundWorkerManager.cs @@ -10,7 +10,11 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.BackgroundWorkers.Quartz; [Dependency(ReplaceServices = true)] -public class QuartzDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerManager, ISingletonDependency +public class QuartzDynamicBackgroundWorkerManager : + IDynamicBackgroundWorkerManager, + ISupportsRuntimeRegistration, + ISupportsCronScheduling, + ISingletonDependency { public const string DynamicWorkerNameKey = "AbpDynamicWorkerName"; diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/DefaultDynamicBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/DefaultDynamicBackgroundWorkerManager.cs index 439e61de21..62dce443a8 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/DefaultDynamicBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/DefaultDynamicBackgroundWorkerManager.cs @@ -10,7 +10,10 @@ using Volo.Abp.Threading; namespace Volo.Abp.BackgroundWorkers; -public class DefaultDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerManager, ISingletonDependency +public class DefaultDynamicBackgroundWorkerManager : + IDynamicBackgroundWorkerManager, + ISupportsRuntimeRegistration, + ISingletonDependency { protected IServiceProvider ServiceProvider { get; } public ILogger Logger { get; set; } @@ -39,11 +42,11 @@ public class DefaultDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerMan schedule.Validate(); - if (schedule.Period == null) + if (!schedule.CronExpression.IsNullOrWhiteSpace()) { throw new AbpException( - $"The default in-memory background worker manager does not support CronExpression without Period for dynamic worker '{workerName}'. " + - "Please set Period, or use a scheduler-backed provider (Hangfire, Quartz, TickerQ)."); + $"The default in-memory background worker manager does not support CronExpression for dynamic worker '{workerName}'. " + + "Please clear CronExpression and use Period-based scheduling, or use a scheduler-backed provider (Hangfire or Quartz)."); } await _semaphore.WaitAsync(cancellationToken); @@ -102,11 +105,11 @@ public class DefaultDynamicBackgroundWorkerManager : IDynamicBackgroundWorkerMan schedule.Validate(); - if (schedule.Period == null) + if (!schedule.CronExpression.IsNullOrWhiteSpace()) { throw new AbpException( - $"The default in-memory background worker manager does not support CronExpression without Period for dynamic worker '{workerName}'. " + - "Please set Period, or use a scheduler-backed provider (Hangfire, Quartz, TickerQ)."); + $"The default in-memory background worker manager does not support CronExpression for dynamic worker '{workerName}'. " + + "Please clear CronExpression and use Period-based scheduling, or use a scheduler-backed provider (Hangfire or Quartz)."); } await _semaphore.WaitAsync(cancellationToken); diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/IDynamicBackgroundWorkerManager.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/IDynamicBackgroundWorkerManager.cs index 7e625e7c9c..a897549249 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/IDynamicBackgroundWorkerManager.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/IDynamicBackgroundWorkerManager.cs @@ -6,6 +6,12 @@ namespace Volo.Abp.BackgroundWorkers; /// /// Manages dynamic background workers that are registered at runtime /// without requiring a strongly-typed worker class. +/// +/// Implementations may differ in capabilities. Check +/// before calling / / , +/// and before passing +/// . +/// /// public interface IDynamicBackgroundWorkerManager { diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsCronScheduling.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsCronScheduling.cs new file mode 100644 index 0000000000..9160ef368a --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsCronScheduling.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.BackgroundWorkers; + +/// +/// Marks a dynamic background worker manager that supports cron-based scheduling. +/// +public interface ISupportsCronScheduling +{ +} diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsRuntimeRegistration.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsRuntimeRegistration.cs new file mode 100644 index 0000000000..4f343113bf --- /dev/null +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/ISupportsRuntimeRegistration.cs @@ -0,0 +1,8 @@ +namespace Volo.Abp.BackgroundWorkers; + +/// +/// Marks a dynamic background worker manager that supports registering workers at runtime. +/// +public interface ISupportsRuntimeRegistration +{ +} diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/InMemoryDynamicBackgroundWorker.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/InMemoryDynamicBackgroundWorker.cs index bab468a655..7bffb3895a 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/InMemoryDynamicBackgroundWorker.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/InMemoryDynamicBackgroundWorker.cs @@ -1,10 +1,12 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; using Volo.Abp.Threading; namespace Volo.Abp.BackgroundWorkers; +[DisableConventionalRegistration] public class InMemoryDynamicBackgroundWorker : AsyncPeriodicBackgroundWorkerBase { public string WorkerName { get; } diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker.cs index 24089e2364..66d484f7f9 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker.cs @@ -11,15 +11,21 @@ namespace Volo.Abp.Features; public class RequireFeaturesSimpleBatchStateChecker : SimpleBatchStateCheckerBase where TState : IHasSimpleStateCheckers { - public static RequireFeaturesSimpleBatchStateChecker Current => _current.Value!; - private static readonly AsyncLocal> _current = new(); - - private readonly List> _models; - - static RequireFeaturesSimpleBatchStateChecker() + public static RequireFeaturesSimpleBatchStateChecker Current { - _current.Value = new RequireFeaturesSimpleBatchStateChecker(); + get + { + if (_current.Value == null) + { + _current.Value = new RequireFeaturesSimpleBatchStateChecker(); + } + + return _current.Value; + } } + private static readonly AsyncLocal?> _current = new(); + + private readonly List> _models; public RequireFeaturesSimpleBatchStateChecker() { diff --git a/framework/src/Volo.Abp.MudBlazorUI/AbpMudCrudPageBase.cs b/framework/src/Volo.Abp.MudBlazorUI/AbpMudCrudPageBase.cs index cd97bc07dc..7943003eeb 100644 --- a/framework/src/Volo.Abp.MudBlazorUI/AbpMudCrudPageBase.cs +++ b/framework/src/Volo.Abp.MudBlazorUI/AbpMudCrudPageBase.cs @@ -375,7 +375,7 @@ public abstract class AbpMudCrudPageBase< if (_createDialog != null) { - await _createDialog.ShowAsync(); + await InvokeAsync(() => _createDialog.ShowAsync()); } } catch (Exception ex) @@ -384,13 +384,14 @@ public abstract class AbpMudCrudPageBase< } } - protected virtual async Task CloseCreateDialogAsync() + protected virtual Task CloseCreateDialogAsync() { NewEntity = new TCreateViewModel(); if (_createDialog != null) { - await _createDialog.CloseAsync(); + return InvokeAsync(() => _createDialog.CloseAsync()); } + return Task.CompletedTask; } protected virtual async Task OpenEditDialogAsync(TListViewModel entity) @@ -406,7 +407,7 @@ public abstract class AbpMudCrudPageBase< if (_editDialog != null) { - await _editDialog.ShowAsync(); + await InvokeAsync(() => _editDialog.ShowAsync()); } } catch (Exception ex) @@ -440,12 +441,13 @@ public abstract class AbpMudCrudPageBase< return ObjectMapper.Map(updateViewModel); } - protected virtual async Task CloseEditDialogAsync() + protected virtual Task CloseEditDialogAsync() { if (_editDialog != null) { - await _editDialog.CloseAsync(); + return InvokeAsync(() => _editDialog.CloseAsync()); } + return Task.CompletedTask; } protected virtual async Task CreateEntityAsync() diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor.cs index 14f834b10e..0efd289d64 100644 --- a/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor.cs +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor.cs @@ -61,7 +61,7 @@ public partial class AbpMudExtensibleDataGrid : ComponentBase { if (_dataGrid != null && ServerData != null) { - await _dataGrid.ReloadServerData(); + await InvokeAsync(() => _dataGrid.ReloadServerData()); } } diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor.cs index 8afef98fb2..07ba3a3bed 100644 --- a/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor.cs +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/MudEntityAction.razor.cs @@ -69,7 +69,7 @@ public partial class MudEntityAction : ComponentBase { if (await UiMessageService.Confirm(ConfirmationMessage())) { - await InvokeAsync(async () => await Clicked.InvokeAsync()); + await InvokeAsync(() => Clicked.InvokeAsync()); } } else diff --git a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor.cs b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor.cs index a9b75b99b5..7fbb7d08c5 100644 --- a/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor.cs +++ b/framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudLookupExtensionProperty.razor.cs @@ -58,7 +58,7 @@ public partial class MudLookupExtensionProperty if (firstRender) { LookupItems = await GetLookupItemsAsync(string.Empty); - StateHasChanged(); + await InvokeAsync(StateHasChanged); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/TagHelpers/Form/AbpInputTagHelperService_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/TagHelpers/Form/AbpInputTagHelperService_Tests.cs index 33e2e35bec..31ced995cb 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/TagHelpers/Form/AbpInputTagHelperService_Tests.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/TagHelpers/Form/AbpInputTagHelperService_Tests.cs @@ -1,9 +1,14 @@ +#nullable enable + using System.Collections.Generic; +using System.Linq; +using System.Reflection; using System.Text.Encodings.Web; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Localization; using Shouldly; using Xunit; @@ -45,6 +50,109 @@ public class AbpInputTagHelperService_Tests service.LastGroupHtml.ShouldContain("mb-3"); } + [Fact] + public async Task Info_text_should_be_rendered_as_div_with_form_text_class() + { + var service = new TestAbpInputTagHelperServiceForInfo(); + var tagHelper = new AbpInputTagHelper(service) + { + AspFor = CreateModelExpression(), + InfoText = "Description" + }; + + var output = CreateOutput(); + + await tagHelper.ProcessAsync(CreateContext(), output); + + service.LastGroupHtml.ShouldContain("
a.Name == "aria-describedby").ToList(); + ariaDescribedby.Count.ShouldBe(1); + ariaDescribedby[0].Value.ToString().ShouldBe("TestInputInfoText"); + } + private static TagHelperContext CreateContext() { return new TagHelperContext( @@ -69,6 +177,21 @@ public class AbpInputTagHelperService_Tests metadataProvider.GetModelExplorerForType(typeof(string), null)); } + private static ModelExpression CreateModelExpressionWithInputInfoText() + { + var metadataProvider = new EmptyModelMetadataProvider(); + var modelExplorer = metadataProvider + .GetModelExplorerForType(typeof(TestModelWithInputInfoText), null) + .GetExplorerForProperty(nameof(TestModelWithInputInfoText.TestInput)); + return new ModelExpression(nameof(TestModelWithInputInfoText.TestInput), modelExplorer); + } + + private class TestModelWithInputInfoText + { + [InputInfoText("Description from attribute")] + public string TestInput { get; set; } = string.Empty; + } + private sealed class TestAbpInputTagHelperService : AbpInputTagHelperService { private readonly string _inputTypeName; @@ -119,4 +242,75 @@ public class AbpInputTagHelperService_Tests suppress = false; } } + + private sealed class TestAbpInputTagHelperServiceForInfo : AbpInputTagHelperService + { + private readonly string? _inputId; + private readonly string? _existingAriaDescribedby; + + public string LastGroupHtml { get; private set; } = string.Empty; + + public TagHelperOutput? LastInputTag { get; private set; } + + public TestAbpInputTagHelperServiceForInfo(string? inputId = "TestInput", string? existingAriaDescribedby = null) + : base(null!, HtmlEncoder.Default, new FakeTagHelperLocalizer()) + { + _inputId = inputId; + _existingAriaDescribedby = existingAriaDescribedby; + } + + protected override Task<(TagHelperOutput, bool)> GetInputTagHelperOutputAsync(TagHelperContext context, TagHelperOutput output) + { + var attributes = new TagHelperAttributeList + { + { "type", "text" }, + { "class", "form-control" } + }; + if (!string.IsNullOrEmpty(_inputId)) + { + attributes.Add("id", _inputId); + } + if (!string.IsNullOrEmpty(_existingAriaDescribedby)) + { + attributes.Add("aria-describedby", _existingAriaDescribedby); + } + + LastInputTag = new TagHelperOutput( + "input", + attributes, + (_, _) => Task.FromResult(new DefaultTagHelperContent())) + { + TagMode = TagMode.SelfClosing + }; + + AddInfoTextId(LastInputTag); + + return Task.FromResult((LastInputTag, false)); + } + + protected override Task GetLabelAsHtmlAsync(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag, bool isCheckbox) + { + return Task.FromResult(string.Empty); + } + + protected override Task GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag) + { + return Task.FromResult(string.Empty); + } + + protected override void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order, out bool suppress) + { + LastGroupHtml = html; + suppress = false; + } + } + + private sealed class FakeTagHelperLocalizer : IAbpTagHelperLocalizer + { + public string GetLocalizedText(string text, ModelExplorer explorer) => text; + + public IStringLocalizer? GetLocalizerOrNull(ModelExplorer explorer) => null; + + public IStringLocalizer? GetLocalizerOrNull(Assembly assembly) => null; + } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/TagHelpers/Form/AbpSelectTagHelperService_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/TagHelpers/Form/AbpSelectTagHelperService_Tests.cs new file mode 100644 index 0000000000..9c2e90ca25 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/TagHelpers/Form/AbpSelectTagHelperService_Tests.cs @@ -0,0 +1,246 @@ +#nullable enable + +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text.Encodings.Web; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Localization; +using Shouldly; +using Xunit; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; + +public class AbpSelectTagHelperService_Tests +{ + [Fact] + public async Task Info_text_should_be_rendered_as_div_with_form_text_class() + { + var service = new TestAbpSelectTagHelperService(); + var tagHelper = new AbpSelectTagHelper(service) + { + AspFor = CreateModelExpression(), + InfoText = "Description" + }; + + var output = CreateOutput(); + + await tagHelper.ProcessAsync(CreateContext(), output); + + service.LastGroupHtml.ShouldContain("
a.Name == "aria-describedby").ToList(); + ariaDescribedby.Count.ShouldBe(1); + ariaDescribedby[0].Value.ToString().ShouldBe("TestSelectInfoText"); + } + + private static TagHelperContext CreateContext() + { + return new TagHelperContext( + new TagHelperAttributeList(), + new Dictionary(), + "test"); + } + + private static TagHelperOutput CreateOutput() + { + return new TagHelperOutput( + "abp-select", + new TagHelperAttributeList(), + (_, _) => Task.FromResult(new DefaultTagHelperContent())); + } + + private static ModelExpression CreateModelExpression() + { + var metadataProvider = new EmptyModelMetadataProvider(); + return new ModelExpression( + "TestSelect", + metadataProvider.GetModelExplorerForType(typeof(string), null)); + } + + private static ModelExpression CreateModelExpressionWithInputInfoText() + { + var metadataProvider = new EmptyModelMetadataProvider(); + var modelExplorer = metadataProvider + .GetModelExplorerForType(typeof(TestModelWithInputInfoText), null) + .GetExplorerForProperty(nameof(TestModelWithInputInfoText.TestSelect)); + return new ModelExpression(nameof(TestModelWithInputInfoText.TestSelect), modelExplorer); + } + + private class TestModelWithInputInfoText + { + [InputInfoText("Description from attribute")] + public string TestSelect { get; set; } = string.Empty; + } + + private sealed class TestAbpSelectTagHelperService : AbpSelectTagHelperService + { + private readonly string? _selectId; + private readonly string? _existingAriaDescribedby; + + public string LastGroupHtml { get; private set; } = string.Empty; + + public TagHelperOutput? LastSelectTag { get; private set; } + + public TestAbpSelectTagHelperService(string? selectId = "TestSelect", string? existingAriaDescribedby = null) + : base(null!, HtmlEncoder.Default, new FakeTagHelperLocalizer(), null!, null!) + { + _selectId = selectId; + _existingAriaDescribedby = existingAriaDescribedby; + } + + protected override Task GetSelectTagAsync(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) + { + var attributes = new TagHelperAttributeList(); + if (!string.IsNullOrEmpty(_selectId)) + { + attributes.Add("id", _selectId); + } + if (!string.IsNullOrEmpty(_existingAriaDescribedby)) + { + attributes.Add("aria-describedby", _existingAriaDescribedby); + } + + LastSelectTag = new TagHelperOutput( + "select", + attributes, + (_, _) => Task.FromResult(new DefaultTagHelperContent())) + { + TagMode = TagMode.StartTagAndEndTag + }; + + AddInfoTextId(LastSelectTag); + + return Task.FromResult(LastSelectTag); + } + + protected override Task GetLabelAsHtmlAsync(TagHelperContext context, TagHelperOutput output, TagHelperOutput selectTag) + { + return Task.FromResult(string.Empty); + } + + protected override Task GetValidationAsHtmlAsync(TagHelperContext context, TagHelperOutput output, TagHelperOutput selectTag) + { + return Task.FromResult(string.Empty); + } + + protected override void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order, out bool suppress) + { + LastGroupHtml = html; + suppress = false; + } + } + + private sealed class FakeTagHelperLocalizer : IAbpTagHelperLocalizer + { + public string GetLocalizedText(string text, ModelExplorer explorer) => text; + + public IStringLocalizer? GetLocalizerOrNull(ModelExplorer explorer) => null; + + public IStringLocalizer? GetLocalizerOrNull(Assembly assembly) => null; + } +} diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj b/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj index 9a7119a6a9..f1deb2761a 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj @@ -13,6 +13,7 @@ + diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/AbpAuthorizationTestModule.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/AbpAuthorizationTestModule.cs index 15ec4e0641..70a3bf1aa0 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/AbpAuthorizationTestModule.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/AbpAuthorizationTestModule.cs @@ -5,6 +5,7 @@ using Volo.Abp.Authorization.TestServices.Resources; using Volo.Abp.Autofac; using Volo.Abp.DynamicProxy; using Volo.Abp.ExceptionHandling; +using Volo.Abp.Features; using Volo.Abp.Modularity; namespace Volo.Abp.Authorization; @@ -12,6 +13,7 @@ namespace Volo.Abp.Authorization; [DependsOn(typeof(AbpAutofacModule))] [DependsOn(typeof(AbpAuthorizationModule))] [DependsOn(typeof(AbpExceptionHandlingModule))] +[DependsOn(typeof(AbpFeaturesModule))] public class AbpAuthorizationTestModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/Authorization_Tests.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/Authorization_Tests.cs index a32939fa53..33058e5468 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/Authorization_Tests.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/Authorization_Tests.cs @@ -69,7 +69,8 @@ public class Authorization_Tests : AuthorizationTestBase [Fact] public async Task Should_Permission_Definition_GetGroup() { - (await _permissionDefinitionManager.GetGroupsAsync()).Count.ShouldBe(1); + var groups = await _permissionDefinitionManager.GetGroupsAsync(); + groups.ShouldContain(g => g.Name == "TestGroup"); } [Fact] diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/RequirePermissionsSimpleBatchStateChecker_Tests.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/RequirePermissionsSimpleBatchStateChecker_Tests.cs index d52718fd50..6bcc214623 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/RequirePermissionsSimpleBatchStateChecker_Tests.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/RequirePermissionsSimpleBatchStateChecker_Tests.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using Shouldly; using Volo.Abp.Authorization.Permissions; @@ -56,6 +57,21 @@ public class RequirePermissionsSimpleBatchStateChecker_Tests : AuthorizationTest result[myStateEntities[3]].ShouldBeTrue(); } + [Fact] + public async Task Current_Should_Not_Be_Null_In_Fresh_ExecutionContext() + { + _ = RequirePermissionsSimpleBatchStateChecker.Current; + + Task> task; + using (ExecutionContext.SuppressFlow()) + { + task = Task.Run(() => RequirePermissionsSimpleBatchStateChecker.Current); + } + + var current = await task; + current.ShouldNotBeNull(); + } + class MyStateEntity : IHasSimpleStateCheckers { public List> StateCheckers { get; } @@ -75,4 +91,14 @@ public class RequirePermissionsSimpleBatchStateChecker_Tests : AuthorizationTest StateCheckers = new List>(); } } + + class MyStateEntity3 : IHasSimpleStateCheckers + { + public List> StateCheckers { get; } + + public MyStateEntity3() + { + StateCheckers = new List>(); + } + } } diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/StaticPermissionDefinitionStore_Tests.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/StaticPermissionDefinitionStore_Tests.cs index 19ab829ba1..a2d7f43b13 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/StaticPermissionDefinitionStore_Tests.cs +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/StaticPermissionDefinitionStore_Tests.cs @@ -1,7 +1,10 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; using Shouldly; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Authorization.TestServices.Resources; +using Volo.Abp.StaticDefinitions; using Xunit; namespace Volo.Abp.Authorization; @@ -84,4 +87,37 @@ public class StaticPermissionDefinitionStore_Tests : AuthorizationTestBase permissions.ShouldContain(x => x.Name == "MyResourcePermission7" && x.ResourceName == TestEntityResource2.ResourceName); } + + [Fact] + public async Task Should_Rebuild_Definitions_In_Fresh_ExecutionContext_After_Cache_Clear() + { + var groupCache = GetRequiredService, List)>>(); + var definitionCache = GetRequiredService>>(); + + await groupCache.ClearAsync(); + await definitionCache.ClearAsync(); + + // Touch the type initializer (if any) on the test ExecutionContext first, mirroring + // the production scenario where startup pre-warms it on a different ExecutionContext. + _ = await _store.GetOrNullAsync("FeatureGatedPermission"); + + await groupCache.ClearAsync(); + await definitionCache.ClearAsync(); + + PermissionDefinition permission = null; + Task task; + using (ExecutionContext.SuppressFlow()) + { + task = Task.Run(async () => + { + permission = await _store.GetOrNullAsync("FeatureGatedPermission"); + }); + } + await task; + + permission.ShouldNotBeNull(); + permission.Name.ShouldBe("FeatureGatedPermission"); + } } diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/FeatureGatedTestPermissionDefinitionProvider.cs b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/FeatureGatedTestPermissionDefinitionProvider.cs new file mode 100644 index 0000000000..0fcfe7c259 --- /dev/null +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo/Abp/Authorization/TestServices/FeatureGatedTestPermissionDefinitionProvider.cs @@ -0,0 +1,15 @@ +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Features; + +namespace Volo.Abp.Authorization.TestServices; + +public class FeatureGatedTestPermissionDefinitionProvider : PermissionDefinitionProvider +{ + public override void Define(IPermissionDefinitionContext context) + { + var group = context.AddGroup("FeatureGatedTestGroup"); + + group.AddPermission("FeatureGatedPermission") + .RequireFeatures("FeatureGatedTestFeature"); + } +} diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/DynamicBackgroundWorkerManager_Tests.cs b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/DynamicBackgroundWorkerManager_Tests.cs index a61c99fdc1..955b2104dd 100644 --- a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/DynamicBackgroundWorkerManager_Tests.cs +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/DynamicBackgroundWorkerManager_Tests.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Shouldly; +using Volo.Abp; using Volo.Abp.BackgroundJobs; using Volo.Abp.BackgroundWorkers; using Xunit; @@ -20,6 +21,13 @@ public class DynamicBackgroundWorkerManager_Tests : BackgroundJobsTestBase _dynamicWorkerManager = GetRequiredService(); } + [Fact] + public void Should_Report_Provider_Capabilities_Using_Marker_Interfaces() + { + (_dynamicWorkerManager is ISupportsRuntimeRegistration).ShouldBeTrue(); + (_dynamicWorkerManager is ISupportsCronScheduling).ShouldBeFalse(); + } + [Fact] public async Task Should_Register_Dynamic_Worker() { @@ -235,6 +243,49 @@ public class DynamicBackgroundWorkerManager_Tests : BackgroundJobsTestBase }); } + [Fact] + public async Task Should_Throw_When_CronExpression_Is_Set() + { + var workerName = "dynamic-worker-" + Guid.NewGuid(); + + await Assert.ThrowsAsync(async () => + { + await _dynamicWorkerManager.AddAsync( + workerName, + new DynamicBackgroundWorkerSchedule + { + Period = 1000, + CronExpression = "0 */5 * * * *" + }, + (_, _) => Task.CompletedTask + ); + }); + } + + [Fact] + public async Task Should_Throw_When_CronExpression_Is_Set_On_UpdateSchedule() + { + var workerName = "dynamic-worker-" + Guid.NewGuid(); + + await _dynamicWorkerManager.AddAsync( + workerName, + new DynamicBackgroundWorkerSchedule { Period = 1000 }, + (_, _) => Task.CompletedTask + ); + + await Assert.ThrowsAsync(async () => + { + await _dynamicWorkerManager.UpdateScheduleAsync( + workerName, + new DynamicBackgroundWorkerSchedule + { + Period = 1000, + CronExpression = "0 */5 * * * *" + } + ); + }); + } + [Fact] public async Task Should_Continue_Running_After_Handler_Throws_Exception() { diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/InMemoryDynamicBackgroundWorker_Registration_Tests.cs b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/InMemoryDynamicBackgroundWorker_Registration_Tests.cs new file mode 100644 index 0000000000..677efbbc5e --- /dev/null +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo/Abp/BackgroundWorkers/InMemoryDynamicBackgroundWorker_Registration_Tests.cs @@ -0,0 +1,37 @@ +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Xunit; + +namespace Volo.Abp.BackgroundWorkers; + +public class InMemoryDynamicBackgroundWorker_Registration_Tests +{ + // Reproduces the original failure: ASP.NET Core in Development enables ValidateOnBuild, + // and InMemoryDynamicBackgroundWorker has a `string workerName` constructor parameter + // that DI cannot resolve. Without [DisableConventionalRegistration] this throws: + // Unable to resolve service for type 'System.String' while attempting to activate + // 'Volo.Abp.BackgroundWorkers.InMemoryDynamicBackgroundWorker'. + [Fact] + public async Task BuildServiceProvider_With_ValidateOnBuild_Should_Not_Throw() + { + using var application = await AbpApplicationFactory.CreateAsync(); + + var act = () => application.Services.BuildServiceProvider( + new ServiceProviderOptions { ValidateOnBuild = true }); + + act.ShouldNotThrow(); + } + + // Verifies the fix: InMemoryDynamicBackgroundWorker is created on demand by + // DefaultDynamicBackgroundWorkerManager (`new InMemoryDynamicBackgroundWorker(...)`) + // and must stay out of the conventional registration loop. + [Fact] + public async Task InMemoryDynamicBackgroundWorker_Should_Not_Be_Registered_As_Service() + { + using var application = await AbpApplicationFactory.CreateAsync(); + + application.Services.ShouldNotContain(d => d.ServiceType == typeof(InMemoryDynamicBackgroundWorker)); + } +} diff --git a/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker_Tests.cs b/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker_Tests.cs index 2ea3f2916b..b0775e70d2 100644 --- a/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker_Tests.cs +++ b/framework/test/Volo.Abp.Features.Tests/Volo/Abp/Features/RequireFeaturesSimpleBatchStateChecker_Tests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using Shouldly; using Volo.Abp.MultiTenancy; @@ -84,6 +85,21 @@ public class RequireFeaturesSimpleBatchStateChecker_Tests : FeatureTestBase } } + [Fact] + public async Task Current_Should_Not_Be_Null_In_Fresh_ExecutionContext() + { + _ = RequireFeaturesSimpleBatchStateChecker.Current; + + Task> task; + using (ExecutionContext.SuppressFlow()) + { + task = Task.Run(() => RequireFeaturesSimpleBatchStateChecker.Current); + } + + var current = await task; + current.ShouldNotBeNull(); + } + class MyStateEntity : IHasSimpleStateCheckers { public List> StateCheckers { get; } @@ -103,4 +119,14 @@ public class RequireFeaturesSimpleBatchStateChecker_Tests : FeatureTestBase StateCheckers = new List>(); } } + + class MyStateEntity3 : IHasSimpleStateCheckers + { + public List> StateCheckers { get; } + + public MyStateEntity3() + { + StateCheckers = new List>(); + } + } } 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 5d3c510a36..7c289e8c34 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": "~10.4.0-rc.1", - "@abp/prismjs": "~10.4.0-rc.1", - "@abp/highlight.js": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~10.4.0-rc.2", + "@abp/prismjs": "~10.4.0-rc.2", + "@abp/highlight.js": "~10.4.0-rc.2" } } diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock index 60465b8133..abdd7e717d 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,204 +2,204 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== + dependencies: + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/clipboard@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.1.tgz#f1b9435fbacdd2515450a44030f63e1ad4d80353" - integrity sha512-aMer6rFiy09n6fFy48DDEdvhxKAS27GarFH3o/z52qyhYKyc+NKdcxaKyvpXXYmuQE0l1Ss5EIILyR/BJdJjuA== +"@abp/clipboard@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.2.tgz#6cdb71282ca31f0aeb902d3188f8b5a626934970" + integrity sha512-9eWL6tqK4uZTdaRBx0UBKqWR3A6jXNS91uiNmRIce4gPYao++lpx3hlQtq4WttvTs6QD3P7OBlSy4pjBdggNIw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" clipboard "^2.0.11" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/highlight.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-10.4.0-rc.1.tgz#f194b3997be014ccea5bed87afeb0349f9eee247" - integrity sha512-Zz4fzZWrHJVZhnOsPjrb/K+i5/WXqXQIQWrO6gLuCD0KK7SZxAplpkD2N6G96RDJaD6DwBrcb+h39F7AH5wcjw== +"@abp/highlight.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-10.4.0-rc.2.tgz#0e98ae1dd3b14a77794d95ab707008c629c28c05" + integrity sha512-ZoZPvC3RDFktIZb8UjiapKkYLioT4jANR70P6dWosXMUteHu9kfAllXvyMHk9/DQ0A2y7bqTh5CfmxRh8WSguQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@highlightjs/cdn-assets" "~11.11.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/prismjs@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.1.tgz#0f221d1d1602903da4012651727589b57b8adb68" - integrity sha512-CWoALCQprneoOmtoqHQK4iOKS4NUGsoHRcUhryzb8EqawXNRD2BXdgVwA/fDiwaVD2qn5EkcEIgOzchWMn8I8w== +"@abp/prismjs@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.2.tgz#a17284bd233b048f6be7bf31a7a7fc6af2a63057" + integrity sha512-lqIT3RUvhHNyy/DcTi/w+tXs02NT1yhY7b1pzm+mOWH9wBEOpEMtqFTHfX/oQpj8VRV3Ye/NDpWAZd11+4EMzQ== dependencies: - "@abp/clipboard" "~10.4.0-rc.1" - "@abp/core" "~10.4.0-rc.1" + "@abp/clipboard" "~10.4.0-rc.2" + "@abp/core" "~10.4.0-rc.2" prismjs "^1.30.0" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== 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 c7f2df2906..1f7278093d 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": "~10.4.0-rc.1", - "@abp/prismjs": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2", + "@abp/prismjs": "~10.4.0-rc.2" }, "devDependencies": {} } diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock index aec14948af..ad994c3e61 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,203 +2,203 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.1.tgz#18fa308c73a90f05dc460f85a0ec154f22706efb" - integrity sha512-AVl2q3wZ9erurV+FG5HiubOI1tU67ParPrvXPIbEbaQL8a6xJ1Qgyok8F0mpcesOqDjOIuEcA+EEjoylY2PSdw== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.2.tgz#77d3ea3f4cccd0cda7c9cf7c4ca3e136e106e385" + integrity sha512-+zvkAFm1D1SXdZGdKjibn1yqIAYp8xNYccnipPrc5b+4xxvH8QaihymT4Z/g/XPT484wdDk3mq8G1Z3COPxPgg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== + dependencies: + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/clipboard@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.1.tgz#f1b9435fbacdd2515450a44030f63e1ad4d80353" - integrity sha512-aMer6rFiy09n6fFy48DDEdvhxKAS27GarFH3o/z52qyhYKyc+NKdcxaKyvpXXYmuQE0l1Ss5EIILyR/BJdJjuA== +"@abp/clipboard@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.2.tgz#6cdb71282ca31f0aeb902d3188f8b5a626934970" + integrity sha512-9eWL6tqK4uZTdaRBx0UBKqWR3A6jXNS91uiNmRIce4gPYao++lpx3hlQtq4WttvTs6QD3P7OBlSy4pjBdggNIw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" clipboard "^2.0.11" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/prismjs@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.1.tgz#0f221d1d1602903da4012651727589b57b8adb68" - integrity sha512-CWoALCQprneoOmtoqHQK4iOKS4NUGsoHRcUhryzb8EqawXNRD2BXdgVwA/fDiwaVD2qn5EkcEIgOzchWMn8I8w== +"@abp/prismjs@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.2.tgz#a17284bd233b048f6be7bf31a7a7fc6af2a63057" + integrity sha512-lqIT3RUvhHNyy/DcTi/w+tXs02NT1yhY7b1pzm+mOWH9wBEOpEMtqFTHfX/oQpj8VRV3Ye/NDpWAZd11+4EMzQ== dependencies: - "@abp/clipboard" "~10.4.0-rc.1" - "@abp/core" "~10.4.0-rc.1" + "@abp/clipboard" "~10.4.0-rc.2" + "@abp/core" "~10.4.0-rc.2" prismjs "^1.30.0" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== 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 65d7802bc6..229ba8e292 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": "~10.4.0-rc.1", - "@abp/blogging": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2", + "@abp/blogging": "~10.4.0-rc.2" } } diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index 000fa4e37c..969af1b3db 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock +++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock @@ -2,229 +2,229 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.1.tgz#18fa308c73a90f05dc460f85a0ec154f22706efb" - integrity sha512-AVl2q3wZ9erurV+FG5HiubOI1tU67ParPrvXPIbEbaQL8a6xJ1Qgyok8F0mpcesOqDjOIuEcA+EEjoylY2PSdw== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.2.tgz#77d3ea3f4cccd0cda7c9cf7c4ca3e136e106e385" + integrity sha512-+zvkAFm1D1SXdZGdKjibn1yqIAYp8xNYccnipPrc5b+4xxvH8QaihymT4Z/g/XPT484wdDk3mq8G1Z3COPxPgg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== + dependencies: + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/blogging@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-10.4.0-rc.1.tgz#3bbf9d064de42a2eabde3b4bca25b62d8ae0d00c" - integrity sha512-Gtd/MjUJG5ptgUBYEJJhLCg2lsef1rFDviBdQ/QwKKfAZ/51mf9Nc3rgj3flDwr7RzDQGKEWou0lCuJpQyNw+A== +"@abp/blogging@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-10.4.0-rc.2.tgz#634d8fd72242a0449b48a76c586e4bb2b5e9451c" + integrity sha512-MfLzWqnxmfs0WRKTu+49zmOrVo4a7OoVxRq8Exj7uB2rJVGYeSLbCNU/Ty7FTPjW/cszadMJUi2tssHXO7tQkg== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" - "@abp/owl.carousel" "~10.4.0-rc.1" - "@abp/prismjs" "~10.4.0-rc.1" - "@abp/tui-editor" "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" + "@abp/owl.carousel" "~10.4.0-rc.2" + "@abp/prismjs" "~10.4.0-rc.2" + "@abp/tui-editor" "~10.4.0-rc.2" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/clipboard@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.1.tgz#f1b9435fbacdd2515450a44030f63e1ad4d80353" - integrity sha512-aMer6rFiy09n6fFy48DDEdvhxKAS27GarFH3o/z52qyhYKyc+NKdcxaKyvpXXYmuQE0l1Ss5EIILyR/BJdJjuA== +"@abp/clipboard@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.2.tgz#6cdb71282ca31f0aeb902d3188f8b5a626934970" + integrity sha512-9eWL6tqK4uZTdaRBx0UBKqWR3A6jXNS91uiNmRIce4gPYao++lpx3hlQtq4WttvTs6QD3P7OBlSy4pjBdggNIw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" clipboard "^2.0.11" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/owl.carousel@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-10.4.0-rc.1.tgz#3ece87d55c36752b6a12534cfc4ecb61fa1f9c4d" - integrity sha512-/ZO00Rw3zl7z+rj+PtMyazqFTcLzRumVn1Ar4dQpJkUk5luMBZzdRktpPzcO1HNCGIT01rp5CRQ3btATS0tzWA== +"@abp/owl.carousel@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-10.4.0-rc.2.tgz#57afe9137ccd24e7930050e722034348d5cec587" + integrity sha512-JFPEtPoAoKgqloRYbtcAtLbL8Cq9eR8EjYDEGGRRco5Q1kj25849CduE5woFLD2op0HbBQR0esYenPmYojZ6Dw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" owl.carousel "^2.3.4" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/prismjs@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.1.tgz#0f221d1d1602903da4012651727589b57b8adb68" - integrity sha512-CWoALCQprneoOmtoqHQK4iOKS4NUGsoHRcUhryzb8EqawXNRD2BXdgVwA/fDiwaVD2qn5EkcEIgOzchWMn8I8w== +"@abp/prismjs@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.2.tgz#a17284bd233b048f6be7bf31a7a7fc6af2a63057" + integrity sha512-lqIT3RUvhHNyy/DcTi/w+tXs02NT1yhY7b1pzm+mOWH9wBEOpEMtqFTHfX/oQpj8VRV3Ye/NDpWAZd11+4EMzQ== dependencies: - "@abp/clipboard" "~10.4.0-rc.1" - "@abp/core" "~10.4.0-rc.1" + "@abp/clipboard" "~10.4.0-rc.2" + "@abp/core" "~10.4.0-rc.2" prismjs "^1.30.0" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/tui-editor@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-10.4.0-rc.1.tgz#b56ca2ee01f7d561a022c1b76bdd00e44742a1fb" - integrity sha512-wMtCMjOYupO4dHNqLT2qpBOoH0NGeK3zlnBmOCaVWrYCDySFLpcDhLdpNDyQXK1DZHGSbEWfPbygS50xaav/aQ== +"@abp/tui-editor@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-10.4.0-rc.2.tgz#22e2fcf7f2ab02507a8f3ed159044f1d14bfd875" + integrity sha512-+xwOazOVxJTPGW+Fn+Gwwj94rzS5rCArqzPNQJ5mE87ZJ9/qK0yygiMqDgA9fomEc2vrvtXWPZYuF4/r2/PQ/g== dependencies: - "@abp/jquery" "~10.4.0-rc.1" - "@abp/prismjs" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" + "@abp/prismjs" "~10.4.0-rc.2" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== 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 75aa1d54df..18f0278717 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": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2" } } diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock index 2651d59d20..008b25c437 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock @@ -2,186 +2,186 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.1.tgz#18fa308c73a90f05dc460f85a0ec154f22706efb" - integrity sha512-AVl2q3wZ9erurV+FG5HiubOI1tU67ParPrvXPIbEbaQL8a6xJ1Qgyok8F0mpcesOqDjOIuEcA+EEjoylY2PSdw== +"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.2.tgz#77d3ea3f4cccd0cda7c9cf7c4ca3e136e106e385" + integrity sha512-+zvkAFm1D1SXdZGdKjibn1yqIAYp8xNYccnipPrc5b+4xxvH8QaihymT4Z/g/XPT484wdDk3mq8G1Z3COPxPgg== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== dependencies: just-compare "^2.3.0" diff --git a/modules/cms-kit/.abpstudio/state.json b/modules/cms-kit/.abpstudio/state.json deleted file mode 100644 index b0ef88d2f2..0000000000 --- a/modules/cms-kit/.abpstudio/state.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "selectedKubernetesProfile": null, - "solutionRunner": { - "selectedProfile": null, - "targetFrameworks": [], - "applicationsStartingWithoutBuild": [], - "applicationsWithoutAutoRefreshBrowserOnRestart": [], - "applicationBatchStartStates": [], - "folderBatchStartStates": [] - } -} \ No newline at end of file diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index 0745e7f632..f840ba0cdb 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": "~10.4.0-rc.1", - "@abp/ng.identity": "~10.3.0", - "@abp/ng.setting-management": "~10.3.0", - "@abp/ng.tenant-management": "~10.3.0", - "@abp/ng.theme.basic": "~10.3.0", + "@abp/ng.account": "~10.4.0-rc.2", + "@abp/ng.identity": "~10.4.0-rc.1", + "@abp/ng.setting-management": "~10.4.0-rc.2", + "@abp/ng.tenant-management": "~10.4.0-rc.2", + "@abp/ng.theme.basic": "~10.4.0-rc.1", "@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 b6746d0c74..e68d854ebe 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": ">=10.4.0-rc.1", - "@abp/ng.theme.shared": ">=10.4.0-rc.1" + "@abp/ng.core": ">=10.4.0-rc.2", + "@abp/ng.theme.shared": ">=10.4.0-rc.2" }, "dependencies": { "tslib": "^2.0.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json index 9ea171fee3..d8f8e2f865 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": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock index 2651d59d20..008b25c437 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock @@ -2,186 +2,186 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.1.tgz#18fa308c73a90f05dc460f85a0ec154f22706efb" - integrity sha512-AVl2q3wZ9erurV+FG5HiubOI1tU67ParPrvXPIbEbaQL8a6xJ1Qgyok8F0mpcesOqDjOIuEcA+EEjoylY2PSdw== +"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.2.tgz#77d3ea3f4cccd0cda7c9cf7c4ca3e136e106e385" + integrity sha512-+zvkAFm1D1SXdZGdKjibn1yqIAYp8xNYccnipPrc5b+4xxvH8QaihymT4Z/g/XPT484wdDk3mq8G1Z3COPxPgg== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== 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 2d5365e6c9..26556e2652 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": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock index 2651d59d20..008b25c437 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock @@ -2,186 +2,186 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.1.tgz#18fa308c73a90f05dc460f85a0ec154f22706efb" - integrity sha512-AVl2q3wZ9erurV+FG5HiubOI1tU67ParPrvXPIbEbaQL8a6xJ1Qgyok8F0mpcesOqDjOIuEcA+EEjoylY2PSdw== +"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.2.tgz#77d3ea3f4cccd0cda7c9cf7c4ca3e136e106e385" + integrity sha512-+zvkAFm1D1SXdZGdKjibn1yqIAYp8xNYccnipPrc5b+4xxvH8QaihymT4Z/g/XPT484wdDk3mq8G1Z3COPxPgg== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== 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 f7ddac0480..8779090b1f 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": "~10.4.0-rc.1", - "@abp/cms-kit": "10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2", + "@abp/cms-kit": "10.4.0-rc.2" } } diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index ab06573712..448b82003f 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -2,294 +2,294 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.1.tgz#18fa308c73a90f05dc460f85a0ec154f22706efb" - integrity sha512-AVl2q3wZ9erurV+FG5HiubOI1tU67ParPrvXPIbEbaQL8a6xJ1Qgyok8F0mpcesOqDjOIuEcA+EEjoylY2PSdw== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.2.tgz#77d3ea3f4cccd0cda7c9cf7c4ca3e136e106e385" + integrity sha512-+zvkAFm1D1SXdZGdKjibn1yqIAYp8xNYccnipPrc5b+4xxvH8QaihymT4Z/g/XPT484wdDk3mq8G1Z3COPxPgg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== + dependencies: + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/clipboard@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.1.tgz#f1b9435fbacdd2515450a44030f63e1ad4d80353" - integrity sha512-aMer6rFiy09n6fFy48DDEdvhxKAS27GarFH3o/z52qyhYKyc+NKdcxaKyvpXXYmuQE0l1Ss5EIILyR/BJdJjuA== +"@abp/clipboard@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.2.tgz#6cdb71282ca31f0aeb902d3188f8b5a626934970" + integrity sha512-9eWL6tqK4uZTdaRBx0UBKqWR3A6jXNS91uiNmRIce4gPYao++lpx3hlQtq4WttvTs6QD3P7OBlSy4pjBdggNIw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" clipboard "^2.0.11" -"@abp/cms-kit.admin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-10.4.0-rc.1.tgz#d59bca5c6fa4de34a09fc751a3355c0da61f4f56" - integrity sha512-Hoa2toc2+WrmHWLxuU360rc6ucC0U+aqOe8wCLaK5uDydgFKfum/ZfnnDlQKme8Y36sJSdQJzQSW3lRsIUKw5g== +"@abp/cms-kit.admin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-10.4.0-rc.2.tgz#fc48f420a8362521eee64cef7b4fab3f478d4041" + integrity sha512-ID0v2kUDFKf+dCGaOb3YLv8UkTnfGtUxIa3Xv3SoJUaCeiW/EbUZX/LTBOtCoe61EckfLw7ye+cpThVCODmvpg== dependencies: - "@abp/codemirror" "~10.4.0-rc.1" - "@abp/jstree" "~10.4.0-rc.1" - "@abp/markdown-it" "~10.4.0-rc.1" - "@abp/slugify" "~10.4.0-rc.1" - "@abp/tui-editor" "~10.4.0-rc.1" - "@abp/uppy" "~10.4.0-rc.1" + "@abp/codemirror" "~10.4.0-rc.2" + "@abp/jstree" "~10.4.0-rc.2" + "@abp/markdown-it" "~10.4.0-rc.2" + "@abp/slugify" "~10.4.0-rc.2" + "@abp/tui-editor" "~10.4.0-rc.2" + "@abp/uppy" "~10.4.0-rc.2" -"@abp/cms-kit.public@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-10.4.0-rc.1.tgz#fae5e919809986e8624304f2843c254836000ea0" - integrity sha512-kDzetGtSIPsfmFZRVc+VOTGnsqehZqVniJfZOYQS2Wk7k62NBE0euY6kXiL06XSwYTN506EW/JAvTVdOsTgWwg== +"@abp/cms-kit.public@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-10.4.0-rc.2.tgz#59084743233abf797ba60b2d594e9a6d6923604a" + integrity sha512-BtBfxK8nQZgXlKMBt9m1M/iEtOtF1cPQsHj+o66cDEJ3BD2Ew2BxHzlW0bZpu4/a4F5lDidW8Pnagbz934cXtg== dependencies: - "@abp/highlight.js" "~10.4.0-rc.1" - "@abp/star-rating-svg" "~10.4.0-rc.1" + "@abp/highlight.js" "~10.4.0-rc.2" + "@abp/star-rating-svg" "~10.4.0-rc.2" -"@abp/cms-kit@10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-10.4.0-rc.1.tgz#a0845f9d064214eddd045c49411959c29d1163bf" - integrity sha512-RRhknky8hrD6/oubscNy1faC7LI1/NnSV4c8GbiHDR0u2oma2Q2VfPi0z3EfnJZrgsNATj8IFRiQfGMaTA//6A== +"@abp/cms-kit@10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-10.4.0-rc.2.tgz#d73883226dcf6c324ec7685818355ebb826252d0" + integrity sha512-fbyJ/CWWdVwJc/59n2u41ScsfRxvB53m9G6mGWPTxC4pyokFUHNkjr8O0TdNaiXiZGZKZCEF4uptF3CptoI8rA== dependencies: - "@abp/cms-kit.admin" "~10.4.0-rc.1" - "@abp/cms-kit.public" "~10.4.0-rc.1" + "@abp/cms-kit.admin" "~10.4.0-rc.2" + "@abp/cms-kit.public" "~10.4.0-rc.2" -"@abp/codemirror@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-10.4.0-rc.1.tgz#a5e40f42b3ad38c32829d689128dc559209dc57a" - integrity sha512-AD6oIBJOxXZEg1h8psyENVHvLb4YO/9cgUJcYLl3GZ1ZoUYiTo8FNQqY2LqqmVyLzI0MsrtmVnfNcnIq7eQRmg== +"@abp/codemirror@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-10.4.0-rc.2.tgz#60fa9ffe5be0ce0cb5fa419316eae26bd3023108" + integrity sha512-nixjVgxjP8pXLat5nSXKz/AJSYhOyoVZzwtqK9AU9Xj5mnn6XdnIL0Yhps+oLSX74Drbfn/haBPKulCou8FbCQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" codemirror "^5.65.1" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/highlight.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-10.4.0-rc.1.tgz#f194b3997be014ccea5bed87afeb0349f9eee247" - integrity sha512-Zz4fzZWrHJVZhnOsPjrb/K+i5/WXqXQIQWrO6gLuCD0KK7SZxAplpkD2N6G96RDJaD6DwBrcb+h39F7AH5wcjw== +"@abp/highlight.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-10.4.0-rc.2.tgz#0e98ae1dd3b14a77794d95ab707008c629c28c05" + integrity sha512-ZoZPvC3RDFktIZb8UjiapKkYLioT4jANR70P6dWosXMUteHu9kfAllXvyMHk9/DQ0A2y7bqTh5CfmxRh8WSguQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@highlightjs/cdn-assets" "~11.11.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/jstree@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-10.4.0-rc.1.tgz#d069a188b2b861d00dc990762ed6673128902c17" - integrity sha512-Z9guxmoAUg9KaJTnI0g0Xmh7I3O1LUVnCNiw0UTXYTx/Lj9q1hmZNVu4gtKdtUH0m7+clQay1Im1+AK9pJn7pg== +"@abp/jstree@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-10.4.0-rc.2.tgz#67889b03529df1c4b4eb0bb6a1ec71fc5c2f3e3b" + integrity sha512-mFCViFBdPuhYgcaSV4e+3Uusda+opHDGKmzcu8VqSp7dvAdBV01p2xddyAD6MdW6dukpLMydvTO+YCaa72ep9A== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jstree "^3.3.17" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/markdown-it@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-10.4.0-rc.1.tgz#5f0638b3662804fb14970ef8e62e484bd2e5b8d7" - integrity sha512-XrRxB6x4aQPFSunCNs3PmkzFwMD0sBVP31yGtVkz5zpKqmMWehcpOAJ1Z9TYNB/oEV7yuInFsNz04Ug133pcqw== +"@abp/markdown-it@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-10.4.0-rc.2.tgz#6e5ef4dc241f95dc74bb62c0f285d7aca81238a3" + integrity sha512-574qe5KnrxyVcG5Nz5syo7e8goXfKuAUC1X9QbQmnhj+RdNIKUaIdaRplO+D9XNlspqAWO475zbONOIuB0flzw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" markdown-it "^14.1.0" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/prismjs@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.1.tgz#0f221d1d1602903da4012651727589b57b8adb68" - integrity sha512-CWoALCQprneoOmtoqHQK4iOKS4NUGsoHRcUhryzb8EqawXNRD2BXdgVwA/fDiwaVD2qn5EkcEIgOzchWMn8I8w== +"@abp/prismjs@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.2.tgz#a17284bd233b048f6be7bf31a7a7fc6af2a63057" + integrity sha512-lqIT3RUvhHNyy/DcTi/w+tXs02NT1yhY7b1pzm+mOWH9wBEOpEMtqFTHfX/oQpj8VRV3Ye/NDpWAZd11+4EMzQ== dependencies: - "@abp/clipboard" "~10.4.0-rc.1" - "@abp/core" "~10.4.0-rc.1" + "@abp/clipboard" "~10.4.0-rc.2" + "@abp/core" "~10.4.0-rc.2" prismjs "^1.30.0" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/slugify@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-10.4.0-rc.1.tgz#074bf48017201f1575e522fb93968762594a6416" - integrity sha512-S95dj/zi0lOvG3Ys9vpe7AEezUDdcXKdwMjTk9NHyZAWyWo/x2715MfowQb4Dk9nTAkz1B4LAWevpiOAbVN0+g== +"@abp/slugify@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-10.4.0-rc.2.tgz#5f6cb78687cab9be4de12a096eb3e3d13797e551" + integrity sha512-+X8Qs8yB+qQNzSCtOxTClGnTQMss5ogKotPqx+ztG19qn30YcxVOmlPXzDFFkMYO++xxoZh8Ny9RIYaNxiKNfA== dependencies: slugify "^1.6.6" -"@abp/star-rating-svg@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-10.4.0-rc.1.tgz#840b7f09248f2cc29a0d4fb6c349fec8ee11f2d9" - integrity sha512-OrqGeusiHiCMpccaFnvZuw9t8RhQz5nUHfSDQ5fu4jKBHTyQOrKyISktaZOsoNoM+SJMEr+rQ5hBE6+N81JzsQ== +"@abp/star-rating-svg@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-10.4.0-rc.2.tgz#f5534ed85fa5001fefb778ee0ad61d4000ff52e3" + integrity sha512-ol5LaDvf3hhpYz/Jpdk/5SwSwLfd9KhW5Si/SKZG43ie+M7xcU1AMhGJjOccx4iBV7s5HjGwwmy+I6+fik02yg== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" star-rating-svg "^3.5.0" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/tui-editor@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-10.4.0-rc.1.tgz#b56ca2ee01f7d561a022c1b76bdd00e44742a1fb" - integrity sha512-wMtCMjOYupO4dHNqLT2qpBOoH0NGeK3zlnBmOCaVWrYCDySFLpcDhLdpNDyQXK1DZHGSbEWfPbygS50xaav/aQ== +"@abp/tui-editor@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-10.4.0-rc.2.tgz#22e2fcf7f2ab02507a8f3ed159044f1d14bfd875" + integrity sha512-+xwOazOVxJTPGW+Fn+Gwwj94rzS5rCArqzPNQJ5mE87ZJ9/qK0yygiMqDgA9fomEc2vrvtXWPZYuF4/r2/PQ/g== dependencies: - "@abp/jquery" "~10.4.0-rc.1" - "@abp/prismjs" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" + "@abp/prismjs" "~10.4.0-rc.2" -"@abp/uppy@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-10.4.0-rc.1.tgz#07fd0fd7761c3728d65c3a069a1dabdaff7f38b0" - integrity sha512-3Ha7vmwMPT7VrXKbADPNVLC6RX6aIa7tF2NTk3QK7VXtY4DoHONna0cr8EliCX0XsqWdYnP9AzqIESdHiMD7vA== +"@abp/uppy@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-10.4.0-rc.2.tgz#ce33d8c0dc17c48fd61472432776c8e8037d40bc" + integrity sha512-O89y2r7WsfvPwG9E9MLdIZlSuzsW2Z6b0mN6hlDIni1LQEYFAACnzyO95Iq04a37e7TwqSPp+JwZ93n7UL3ltw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" uppy "^5.1.2" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== dependencies: just-compare "^2.3.0" diff --git a/modules/docs/.abpstudio/state.json b/modules/docs/.abpstudio/state.json deleted file mode 100644 index fefde3c294..0000000000 --- a/modules/docs/.abpstudio/state.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "selectedKubernetesProfile": null, - "solutionRunner": { - "selectedProfile": "Default", - "targetFrameworks": [], - "applicationsStartingWithoutBuild": [], - "applicationBatchStartStates": [ - { - "profile": "Default", - "applicationOrFolder": "VoloDocs.Web", - "value": 0 - } - ], - "folderBatchStartStates": [] - } -} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index c7786d4a93..07a3f1100c 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": "~10.4.0-rc.1", - "@abp/docs": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2", + "@abp/docs": "~10.4.0-rc.2" } } diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index 68d485b7eb..2cd36e5670 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2,222 +2,222 @@ # yarn lockfile v1 -"@abp/anchor-js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-10.4.0-rc.1.tgz#9a03be2465267d6bb4b6803cac07a9cda18390d9" - integrity sha512-yn1NV/a8Z7404sghCEImpgzyafEO1EQ1DrYK5mDzn9RYiXlZoEj+OBT4O2X4HkzBjb1xg9KMq532QHi5O1IW/Q== +"@abp/anchor-js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-10.4.0-rc.2.tgz#d099cc8e7128743b4f3471db1be5669b01886eed" + integrity sha512-TuPCyIZl9yNTb26StwACswZsrhcukOTSsox5oLjKFukDd9cavmPnuK9aXc1ngGL1PsxUlE8x6df4exWXIhFr2w== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" anchor-js "^5.0.0" -"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.1.tgz#18fa308c73a90f05dc460f85a0ec154f22706efb" - integrity sha512-AVl2q3wZ9erurV+FG5HiubOI1tU67ParPrvXPIbEbaQL8a6xJ1Qgyok8F0mpcesOqDjOIuEcA+EEjoylY2PSdw== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== +"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.2.tgz#77d3ea3f4cccd0cda7c9cf7c4ca3e136e106e385" + integrity sha512-+zvkAFm1D1SXdZGdKjibn1yqIAYp8xNYccnipPrc5b+4xxvH8QaihymT4Z/g/XPT484wdDk3mq8G1Z3COPxPgg== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== + dependencies: + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/clipboard@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.1.tgz#f1b9435fbacdd2515450a44030f63e1ad4d80353" - integrity sha512-aMer6rFiy09n6fFy48DDEdvhxKAS27GarFH3o/z52qyhYKyc+NKdcxaKyvpXXYmuQE0l1Ss5EIILyR/BJdJjuA== +"@abp/clipboard@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-10.4.0-rc.2.tgz#6cdb71282ca31f0aeb902d3188f8b5a626934970" + integrity sha512-9eWL6tqK4uZTdaRBx0UBKqWR3A6jXNS91uiNmRIce4gPYao++lpx3hlQtq4WttvTs6QD3P7OBlSy4pjBdggNIw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" clipboard "^2.0.11" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/docs@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-10.4.0-rc.1.tgz#1cfaf7acc4ff6e277250377d5a1d76442e3af1f5" - integrity sha512-tvNMlsUaxytRKZNmQovBs5CuvGXw8E6CUuuEtpJIkYO3SGyHrGwvvlL3xvHTmaj6cywdgVAPCROwOVxNe0wBkw== +"@abp/docs@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-10.4.0-rc.2.tgz#2e4758c509311885223bf71a33ae5934c0080698" + integrity sha512-4CmVRQFI/AW806oKLvjzKTtelduScaaeEZwgPd22WsXMqlVEA5DJQmfdQ1hMc2yHICt8cCgrMfAALcOqOPmxDg== dependencies: - "@abp/anchor-js" "~10.4.0-rc.1" - "@abp/clipboard" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" - "@abp/prismjs" "~10.4.0-rc.1" + "@abp/anchor-js" "~10.4.0-rc.2" + "@abp/clipboard" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" + "@abp/prismjs" "~10.4.0-rc.2" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/prismjs@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.1.tgz#0f221d1d1602903da4012651727589b57b8adb68" - integrity sha512-CWoALCQprneoOmtoqHQK4iOKS4NUGsoHRcUhryzb8EqawXNRD2BXdgVwA/fDiwaVD2qn5EkcEIgOzchWMn8I8w== +"@abp/prismjs@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-10.4.0-rc.2.tgz#a17284bd233b048f6be7bf31a7a7fc6af2a63057" + integrity sha512-lqIT3RUvhHNyy/DcTi/w+tXs02NT1yhY7b1pzm+mOWH9wBEOpEMtqFTHfX/oQpj8VRV3Ye/NDpWAZd11+4EMzQ== dependencies: - "@abp/clipboard" "~10.4.0-rc.1" - "@abp/core" "~10.4.0-rc.1" + "@abp/clipboard" "~10.4.0-rc.2" + "@abp/core" "~10.4.0-rc.2" prismjs "^1.30.0" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== dependencies: just-compare "^2.3.0" diff --git a/modules/identity/.abpstudio/state.json b/modules/identity/.abpstudio/state.json deleted file mode 100644 index 11b53dd162..0000000000 --- a/modules/identity/.abpstudio/state.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "selectedRunnerProfile": null, - "selectedKubernetesProfile": null -} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityErrorCodes.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityErrorCodes.cs index 4710c62f90..0495679a5f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityErrorCodes.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityErrorCodes.cs @@ -11,6 +11,7 @@ public static class IdentityErrorCodes public const string UsersCanNotChangeTwoFactor = "Volo.Abp.Identity:010007"; public const string CanNotChangeTwoFactor = "Volo.Abp.Identity:010008"; public const string YouCannotDelegateYourself = "Volo.Abp.Identity:010009"; + public const string OrganizationUnitParentTenantMismatch = "Volo.Abp.Identity:010010"; public const string ClaimNameExist = "Volo.Abp.Identity:010021"; public const string CanNotUpdateStaticClaimType = "Volo.Abp.Identity:010022"; public const string CanNotDeleteStaticClaimType = "Volo.Abp.Identity:010023"; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json index 71b858f834..2d7450ae44 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "لا يمكنك تغيير إعداد العاملين.", "Volo.Abp.Identity:010008": "لا يجوز تغيير إعداد عاملين.", "Volo.Abp.Identity:010009": "لا يمكنك تفويض نفسك.", + "Volo.Abp.Identity:010010": "الوحدة التنظيمية الأصل ('{ParentId}') غير موجودة أو تنتمي إلى مستأجر آخر.", "Volo.Abp.Identity:010021": "الاسم {0} موجود بالفعل.", "Volo.Abp.Identity:010022": "لا يمكن تحديث نوع المطابقة.", "Volo.Abp.Identity:010023": "لا يمكن حذف نوع المطابقة.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json index e84320059e..b5613814e1 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Nastavení dvou faktorů nemůžete změnit.", "Volo.Abp.Identity:010008": "Není povoleno měnit nastavení dvou faktorů.", "Volo.Abp.Identity:010009": "Nemůžete delegovat své vlastní oprávnění.", + "Volo.Abp.Identity:010010": "Nadřazená organizační jednotka ('{ParentId}') neexistuje nebo patří jinému tenantovi.", "Volo.Abp.Identity:010021": "Název '{0}' již existuje.", "Volo.Abp.Identity:010022": "Nelze aktualizovat statický typ deklarace.", "Volo.Abp.Identity:010023": "Nelze smazat statický typ deklarace.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json index 4064866f00..8118160f2a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Sie können Ihre Zwei-Faktor-Einstellung nicht ändern.", "Volo.Abp.Identity:010008": "Die Zwei-Faktor-Einstellung dürfen nicht geändert werden.", "Volo.Abp.Identity:010009": "Sie können sich nicht selbst delegieren.", + "Volo.Abp.Identity:010010": "Die übergeordnete Organisationseinheit ('{ParentId}') existiert nicht oder gehört zu einem anderen Mandanten.", "Volo.Abp.Identity:010021": "Der Name existiert bereits {0}", "Volo.Abp.Identity:010022": "Der Name kann nicht aktualisiert werden.", "Volo.Abp.Identity:010023": "Der Name kann nicht gelöscht werden.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json index ba610a993a..1a1e10714d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json @@ -76,6 +76,7 @@ "Volo.Abp.Identity:010007": "Δεν μπορείτε να αλλάξετε τη ρύθμιση δύο παραγόντων.", "Volo.Abp.Identity:010008": "Δεν επιτρέπεται η αλλαγή της ρύθμισης δύο παραγόντων.", "Volo.Abp.Identity:010009": "Δεν μπορείτε να αναθέσετε την εξουσιοδότησή σας σε εσάς ίδιο.", + "Volo.Abp.Identity:010010": "Η γονική μονάδα οργάνωσης ('{ParentId}') δεν υπάρχει ή ανήκει σε διαφορετικό μισθωτή.", "Volo.Abp.Identity:010021": "Το όνομα '{0}' υπάρχει ήδη.", "Volo.Abp.Identity:010022": "Δεν μπορείτε να ενημερώσετε ένα στατικό τύπο δήλωσης.", "Volo.Abp.Identity:010023": "Δεν μπορείτε να διαγράψετε ένα στατικό τύπο δήλωσης.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json index 9f10e1f188..3318b5cf19 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json @@ -76,6 +76,7 @@ "Volo.Abp.Identity:010007": "You can't change your two factor setting.", "Volo.Abp.Identity:010008": "Changing the two factor setting is not allowed.", "Volo.Abp.Identity:010009": "You cannot delegate yourself!", + "Volo.Abp.Identity:010010": "The parent organisation unit ('{ParentId}') does not exist, or it belongs to a different tenant.", "Volo.Abp.Identity:010021": "Name exist: '{0}'", "Volo.Abp.Identity:010022": "Can not update a static ClaimType.", "Volo.Abp.Identity:010023": "Can not delete a static ClaimType.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json index 0deb6a4b56..3a6e9e18ca 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "You can't change your two factor setting.", "Volo.Abp.Identity:010008": "It's not allowed to change two factor setting.", "Volo.Abp.Identity:010009": "You can not delegate yourself.", + "Volo.Abp.Identity:010010": "The parent organization unit ('{ParentId}') does not exist, or it belongs to a different tenant.", "Volo.Abp.Identity:010021": "Name exist: '{0}'.", "Volo.Abp.Identity:010022": "Can not update a static ClaimType.", "Volo.Abp.Identity:010023": "Can not delete a static ClaimType.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json index a2a9414214..afc75eec4a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "No puedes cambiar tu configuración de autentificación de dos pasos.", "Volo.Abp.Identity:010008": "No está permitido cambiar la configuración de autenticación de dos pasos.", "Volo.Abp.Identity:010009": "No puedes delegar tu propia cuenta!", + "Volo.Abp.Identity:010010": "La unidad organizativa padre ('{ParentId}') no existe o pertenece a otro inquilino.", "Volo.Abp.Identity:010021": "Ya existe un con el nombre '{0}'", "Volo.Abp.Identity:010022": "No se puede actualizar un tipo de reclamación estática.", "Volo.Abp.Identity:010023": "No se puede borrar un tipo de reclamación estática.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json index e9a1911b52..e6229c5a4d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "شما نمی توانید تنظیمات دو مرحله ای خود را تغییر دهید.", "Volo.Abp.Identity:010008": "تغییر دادن تنظیمات دو مرحله ای مجاز نمی باشد.", "Volo.Abp.Identity:010009": "شما نمی توانید خودتان را معرفی کنید.", + "Volo.Abp.Identity:010010": "واحد سازمانی والد ('{ParentId}') وجود ندارد یا متعلق به مستاجر دیگری است.", "Volo.Abp.Identity:010021": "نام {0} قبلاً استفاده گردیده است.", "Volo.Abp.Identity:010022": "نمی توان نام نقش/وظیفه را تغییر داد.", "Volo.Abp.Identity:010023": "نمی توان نقش/وظیفه را حذف کرد.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json index 2a37974cbb..2adeb4b309 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Et voi muuttaa kahden tekijän asetusta.", "Volo.Abp.Identity:010008": "Kahden tekijän asetusta ei saa muuttaa.", "Volo.Abp.Identity:010009": "Et voi delegoida itseäsi.", + "Volo.Abp.Identity:010010": "Ylätason organisaatioyksikköä ('{ParentId}') ei ole olemassa tai se kuuluu toiselle vuokralaiselle.", "Volo.Abp.Identity:010021": "{0} on jo olemassa.", "Volo.Abp.Identity:010022": "Staattista väittämätunnusta ei voi päivittää.", "Volo.Abp.Identity:010023": "Staattista väittämätunnusta ei voi poistaa.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json index 323bb5927a..9028def61b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Vous ne pouvez pas modifier votre paramètre à deux facteurs.", "Volo.Abp.Identity:010008": "Il n’est pas permis de changer deux facteurs de réglage.", "Volo.Abp.Identity:010009": "Vous ne pouvez pas vous déléguer vous-même.", + "Volo.Abp.Identity:010010": "L'unité d'organisation parente ('{ParentId}') n'existe pas ou appartient à un autre locataire.", "Volo.Abp.Identity:010021": "Le nom '{0}' existe déjà.", "Volo.Abp.Identity:010022": "Vous ne pouvez pas modifier un type de revendication statique.", "Volo.Abp.Identity:010023": "Vous ne pouvez pas supprimer un type de revendication statique.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json index 0d5fca3dde..976610c38d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "आप अपनी दो कारक सेटिंग नहीं बदल सकते।", "Volo.Abp.Identity:010008": "इसे दो कारक सेटिंग बदलने की अनुमति नहीं है।", "Volo.Abp.Identity:010009": "आप अपने आप को अधिकृत नहीं कर सकते हैं!", + "Volo.Abp.Identity:010010": "मूल संगठन इकाई ('{ParentId}') मौजूद नहीं है या किसी अन्य किरायेदार की है।", "Volo.Abp.Identity:010021": "नाम '{0}' पहले से ही लिया गया है।", "Volo.Abp.Identity:010022": "स्थैतिक भूमिकाओं का नाम नहीं बदला जा सकता है।", "Volo.Abp.Identity:010023": "स्थैतिक भूमिकाओं को हटाया नहीं जा सकता।", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json index 0e73aa5f1e..6fa68f1102 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Ne možete promijeniti postavku dva faktora.", "Volo.Abp.Identity:010008": "Nije dopušteno mijenjati postavke dvofaktorske autentifikacije.", "Volo.Abp.Identity:010009": "Ne možete delegirati sami sebi.", + "Volo.Abp.Identity:010010": "Nadređena organizacijska jedinica ('{ParentId}') ne postoji ili pripada drugom najmoprimcu.", "Volo.Abp.Identity:010021": "Naziv '{0}' već postoji.", "Volo.Abp.Identity:010022": "Ne možete ažurirati statički tip deklaracije.", "Volo.Abp.Identity:010023": "Ne možete izbrisati statički tip deklaracije.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json index 730a831d23..4891880abb 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Nem változtathatja meg a kétlépcsős bejelentkezés beállítását.", "Volo.Abp.Identity:010008": "Kétlépcsős bejelentkezés beállítás megváltoztatása nem megengedett.", "Volo.Abp.Identity:010009": "Nem adhatja át a saját jogosultságait.", + "Volo.Abp.Identity:010010": "A szülő szervezeti egység ('{ParentId}') nem létezik, vagy egy másik bérlőhöz tartozik.", "Volo.Abp.Identity:010021": "'{0}' nevű már létezik.", "Volo.Abp.Identity:010022": "Nem lehet frissíteni a statikus jogosultság típusát.", "Volo.Abp.Identity:010023": "Nem lehet törölni a statikus jogosultság típusát.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json index da53a10657..a934b3235e 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Þú getur ekki breytt tveggja þátta stillingu þinni.", "Volo.Abp.Identity:010008": "Það er ekki leyfilegt að breyta tvíþátta stillingu.", "Volo.Abp.Identity:010009": "Þú getur ekki delegað þér sjálfum.", + "Volo.Abp.Identity:010010": "Yfirskipulagseiningin ('{ParentId}') er ekki til eða tilheyrir öðrum leigjanda.", "Volo.Abp.Identity:010021": "Nafnið '{0}' er þegar í notkun.", "Volo.Abp.Identity:010022": "Ekki er hægt að breyta static hlutverk.", "Volo.Abp.Identity:010023": "Ekki er hægt að eyða static hlutverkum.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json index 163ff98754..869392ac23 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Non puoi modificare l'impostazione dei due fattori.", "Volo.Abp.Identity:010008": "Non è consentito modificare l'impostazione a due fattori.", "Volo.Abp.Identity:010009": "Non puoi delegare te stesso.", + "Volo.Abp.Identity:010010": "L'unità organizzativa padre ('{ParentId}') non esiste o appartiene a un altro tenant.", "Volo.Abp.Identity:010021": "Il nome '{0}' è già in uso.", "Volo.Abp.Identity:010022": "Non puoi modificare il tipo di richiesta statica.", "Volo.Abp.Identity:010023": "Non puoi eliminare il tipo di richiesta statica.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json index 9836137c80..daa3f8b129 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "U kunt uw instelling voor tweefactor authenticatie niet wijzigen.", "Volo.Abp.Identity:010008": "Het is niet toegestaan om de instelling van tweefactor authenticatie te wijzigen.", "Volo.Abp.Identity:010009": "U kunt uzelf niet delegeren.", + "Volo.Abp.Identity:010010": "De bovenliggende organisatie-eenheid ('{ParentId}') bestaat niet of behoort tot een andere tenant.", "Volo.Abp.Identity:010021": "Er bestaat al een met de naam '{0}'.", "Volo.Abp.Identity:010022": "Kan de naam van een statische claim niet wijzigen.", "Volo.Abp.Identity:010023": "Kan de naam van een statische claim niet verwijderen.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json index 18f33d89c1..0f222bf42c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Nie możesz zmienić ustawienia dwóch czynników.", "Volo.Abp.Identity:010008": "Nie wolno zmieniać ustawienia dwuczynnikowego.", "Volo.Abp.Identity:010009": "Nie możesz delegować swoich uprawnień.", + "Volo.Abp.Identity:010010": "Nadrzędna jednostka organizacyjna ('{ParentId}') nie istnieje lub należy do innego dzierżawcy.", "Volo.Abp.Identity:010021": "Nazwa '{0}' już istnieje.", "Volo.Abp.Identity:010022": "Nie można zmienić typu statycznej deklaracji.", "Volo.Abp.Identity:010023": "Nie można usunąć typu statycznej deklaracji.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json index cd796edbde..76ab7ea4cb 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Você não pode alterar sua configuração de dois fatores.", "Volo.Abp.Identity:010008": "Não é permitido alterar a configuração de dois fatores.", "Volo.Abp.Identity:010009": "Você não pode delegar a si mesmo.", + "Volo.Abp.Identity:010010": "A unidade organizacional pai ('{ParentId}') não existe ou pertence a outro inquilino.", "Volo.Abp.Identity:010021": "Já existe um(a) {0} com o nome.", "Volo.Abp.Identity:010022": "Não é possível alterar o tipo de declaração estática.", "Volo.Abp.Identity:010023": "Não é possível excluir o tipo de declaração estática.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json index 3ebc98d179..f9c624a977 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Nu vă puteţi schimba setările de autentificare în doi paşi.", "Volo.Abp.Identity:010008": "Nu este permisă modificarea setărilor autentificării în doi paşi.", "Volo.Abp.Identity:010009": "Nu vă puteţi delega singur.", + "Volo.Abp.Identity:010010": "Unitatea organizațională părinte ('{ParentId}') nu există sau aparține unui alt chiriaș.", "Volo.Abp.Identity:010021": "Numele '{0}' este deja luat.", "Volo.Abp.Identity:010022": "Nu poate fi schimbată tipul de declaraţie statică.", "Volo.Abp.Identity:010023": "Nu poate fi ştersă declaraţia statică.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json index f9ddb814d4..5056ad34f2 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Вы не можете изменить настройку двух факторов.", "Volo.Abp.Identity:010008": "Изменение двухфакторной настройки не допускается.", "Volo.Abp.Identity:010009": "Вы не можете делегировать свои собственные права.", + "Volo.Abp.Identity:010010": "Родительское организационное подразделение ('{ParentId}') не существует или принадлежит другому арендатору.", "Volo.Abp.Identity:010021": "Имя '{0}' уже существует.", "Volo.Abp.Identity:010022": "Невозможно изменить тип статической декларации.", "Volo.Abp.Identity:010023": "Невозможно удалить тип статической декларации.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json index 26486aa6ab..1609ec94db 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Dvojfaktorové nastavenie nie je možné zmeniť.", "Volo.Abp.Identity:010008": "Dvojfaktorové nastavenie nie je povolené zmeniť.", "Volo.Abp.Identity:010009": "Nemôžete delegovať svoje vlastné oprávnenia.", + "Volo.Abp.Identity:010010": "Nadradená organizačná jednotka ('{ParentId}') neexistuje alebo patrí inému nájomcovi.", "Volo.Abp.Identity:010021": "Názov '{0}' sa už používa.", "Volo.Abp.Identity:010022": "Nie je možné zmeniť typ statického oprávnenia.", "Volo.Abp.Identity:010023": "Nie je možné odstrániť typ statického oprávnenia.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json index 8ae2a2f81b..98c3b8c4bf 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Nastavitve dveh faktorjev ne morete spremeniti.", "Volo.Abp.Identity:010008": "Ni dovoljeno spreminjati nastavitve dveh faktorjev.", "Volo.Abp.Identity:010009": "Ne morete delegirati svojih pravic.", + "Volo.Abp.Identity:010010": "Nadrejena organizacijska enota ('{ParentId}') ne obstaja ali pripada drugemu najemniku.", "Volo.Abp.Identity:010021": "Naziv '{0}' že obstaja.", "Volo.Abp.Identity:010022": "Ne morete spremeniti tipa statične deklaracije.", "Volo.Abp.Identity:010023": "Ne morete izbrisati tipa statične deklaracije.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json index aef65e2b11..394c4d0a7e 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sv.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Du kan inte ändra din tvåfaktorsinställning.", "Volo.Abp.Identity:010008": "Det är inte tillåtet att ändra inställningen för två faktorer.", "Volo.Abp.Identity:010009": "Du kan inte delegera dig själv.", + "Volo.Abp.Identity:010010": "Den överordnade organisationsenheten ('{ParentId}') finns inte eller tillhör en annan klient.", "Volo.Abp.Identity:010021": "Namn finns: '{0}'.", "Volo.Abp.Identity:010022": "Kan inte ändra statiskt område.", "Volo.Abp.Identity:010023": "Kan inte ta bort statiskt område.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json index 0a6e4d393c..8e8d678f0a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "İki faktörlü ayarınızı değiştiremezsiniz.", "Volo.Abp.Identity:010008": "İki faktörlü ayarın değiştirilmesine izin verilmez.", "Volo.Abp.Identity:010009": "Kendinizi yetkilendiremezsiniz.", + "Volo.Abp.Identity:010010": "Üst birim ('{ParentId}') mevcut değil veya farklı bir kiracıya ait.", "Volo.Abp.Identity:010021": "{0} isminde bir birim zaten var.", "Volo.Abp.Identity:010022": "Bir statik izin tipi değiştirilemez.", "Volo.Abp.Identity:010023": "Bir statik izin tipi silinemez.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json index 32c1dfe008..46f26b0040 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "Bạn không thể thay đổi cài đặt hai yếu tố của mình.", "Volo.Abp.Identity:010008": "Không được phép thay đổi cài đặt hai yếu tố.", "Volo.Abp.Identity:010009": "Bạn không thể ủy quyền cho chính mình.", + "Volo.Abp.Identity:010010": "Đơn vị tổ chức cha ('{ParentId}') không tồn tại hoặc thuộc về một thuê khác.", "Volo.Abp.Identity:010021": "Tên '{0}' đã tồn tại.", "Volo.Abp.Identity:010022": "Không thể thay đổi kiểu của phát biểu tĩnh.", "Volo.Abp.Identity:010023": "Không thể xóa phát biểu tĩnh.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json index 3a1239ddc7..34045a010b 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "你不能修改你的双因素身份验证设置", "Volo.Abp.Identity:010008": "不允许修改双因素身份验证设置。", "Volo.Abp.Identity:010009": "你不能委托给自己。", + "Volo.Abp.Identity:010010": "父组织单元 ('{ParentId}') 不存在或属于其他租户.", "Volo.Abp.Identity:010021": "名称:'{0}' 已存在", "Volo.Abp.Identity:010022": "不能更改静态声明的类型。", "Volo.Abp.Identity:010023": "不能删除静态声明的类型。", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json index a28cc6c7d4..c54f18c4b2 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json @@ -77,6 +77,7 @@ "Volo.Abp.Identity:010007": "你不能修改你的雙因素身份驗證設置", "Volo.Abp.Identity:010008": "不允許修改雙因素身份驗證設置.", "Volo.Abp.Identity:010009": "你不能委派給自己", + "Volo.Abp.Identity:010010": "父組織單元 ('{ParentId}') 不存在或屬於其他租戶.", "Volo.Abp.Identity:010021": "名稱 '{0}' 已存在.", "Volo.Abp.Identity:010022": "無法更改靜態宣告的類型.", "Volo.Abp.Identity:010023": "無法刪除靜態宣告的類型.", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnitManager.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnitManager.cs index 160e37c900..cb8fa17a77 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnitManager.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnitManager.cs @@ -41,6 +41,8 @@ public class OrganizationUnitManager : DomainService [UnitOfWork] public virtual async Task CreateAsync(OrganizationUnit organizationUnit) { + await ValidateParentTenantAsync(organizationUnit.ParentId, organizationUnit.TenantId); + organizationUnit.Code = await GetNextChildCodeAsync(organizationUnit.ParentId); await ValidateOrganizationUnitAsync(organizationUnit); await OrganizationUnitRepository.InsertAsync(organizationUnit); @@ -107,6 +109,8 @@ public class OrganizationUnitManager : DomainService return; } + await ValidateParentTenantAsync(parentId, organizationUnit.TenantId); + //Should find children before Code change var children = await FindChildrenAsync(id, true); @@ -148,6 +152,21 @@ public class OrganizationUnitManager : DomainService } } + protected virtual async Task ValidateParentTenantAsync(Guid? parentId, Guid? tenantId) + { + if (!parentId.HasValue) + { + return; + } + + var parent = await OrganizationUnitRepository.FindAsync(parentId.Value); + if (parent == null || parent.TenantId != tenantId) + { + throw new BusinessException(IdentityErrorCodes.OrganizationUnitParentTenantMismatch) + .WithData("ParentId", parentId); + } + } + public virtual async Task> FindChildrenAsync(Guid? parentId, bool recursive = false) { if (!recursive) diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/OrganizationUnitManager_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/OrganizationUnitManager_Tests.cs index 5b6ed9af27..43c97a945a 100644 --- a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/OrganizationUnitManager_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/OrganizationUnitManager_Tests.cs @@ -1,11 +1,14 @@ -using Microsoft.AspNetCore.Identity; -using Shouldly; -using System.Linq; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Identity; +using Shouldly; +using System; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Data; using Volo.Abp.Guids; -using Volo.Abp.Uow; -using Xunit; - +using Volo.Abp.MultiTenancy; +using Volo.Abp.Uow; +using Xunit; + namespace Volo.Abp.Identity; public class OrganizationUnitManager_Tests : AbpIdentityDomainTestBase @@ -17,6 +20,8 @@ public class OrganizationUnitManager_Tests : AbpIdentityDomainTestBase private readonly ILookupNormalizer _lookupNormalizer; private readonly IUnitOfWorkManager _unitOfWorkManager; private readonly IGuidGenerator _guidGenerator; + private readonly ICurrentTenant _currentTenant; + private readonly IDataFilter _dataFilter; public OrganizationUnitManager_Tests() { _organizationUnitManager = GetRequiredService(); @@ -26,6 +31,8 @@ public class OrganizationUnitManager_Tests : AbpIdentityDomainTestBase _testData = GetRequiredService(); _unitOfWorkManager = GetRequiredService(); _guidGenerator = GetService(); + _currentTenant = GetRequiredService(); + _dataFilter = GetRequiredService(); } [Fact] @@ -117,4 +124,59 @@ public class OrganizationUnitManager_Tests : AbpIdentityDomainTestBase ou = await _organizationUnitRepository.GetAsync("OU1", includeDetails: true); ou.Roles.FirstOrDefault(r => r.RoleId == adminRole.Id).ShouldBeNull(); } -} + + [Fact] + public async Task Should_Not_Create_Organization_Unit_With_Cross_Tenant_Parent() + { + var hostOu = await _organizationUnitRepository.GetAsync("OU1"); + + using (_currentTenant.Change(Guid.NewGuid())) + { + var newOu = new OrganizationUnit(_guidGenerator.Create(), "Cross", hostOu.Id, _currentTenant.Id); + + var ex = await Assert.ThrowsAsync( + async () => await _organizationUnitManager.CreateAsync(newOu)); + + ex.Code.ShouldBe(IdentityErrorCodes.OrganizationUnitParentTenantMismatch); + } + } + + [Fact] + public async Task Should_Not_Move_Organization_Unit_To_Cross_Tenant_Parent() + { + var hostOu1 = await _organizationUnitRepository.GetAsync("OU1"); + + OrganizationUnit tenantOu; + var tenantId = Guid.NewGuid(); + using (_currentTenant.Change(tenantId)) + { + tenantOu = new OrganizationUnit(_guidGenerator.Create(), "TenantRoot", null, tenantId); + await _organizationUnitManager.CreateAsync(tenantOu); + + var ex = await Assert.ThrowsAsync( + async () => await _organizationUnitManager.MoveAsync(tenantOu.Id, hostOu1.Id)); + + ex.Code.ShouldBe(IdentityErrorCodes.OrganizationUnitParentTenantMismatch); + } + } + + [Fact] + public async Task Should_Reject_Cross_Tenant_Parent_When_Multi_Tenancy_Filter_Disabled() + { + var hostOu = await _organizationUnitRepository.GetAsync("OU1"); + + using (_dataFilter.Disable()) + { + var tenantId = Guid.NewGuid(); + using (_currentTenant.Change(tenantId)) + { + var newOu = new OrganizationUnit(_guidGenerator.Create(), "Cross", hostOu.Id, tenantId); + + var ex = await Assert.ThrowsAsync( + async () => await _organizationUnitManager.CreateAsync(newOu)); + + ex.Code.ShouldBe(IdentityErrorCodes.OrganizationUnitParentTenantMismatch); + } + } + } +} diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddict.Demo.Server.csproj b/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddict.Demo.Server.csproj index 09a185919a..2bc17b4f7c 100644 --- a/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddict.Demo.Server.csproj +++ b/modules/openiddict/app/OpenIddict.Demo.Server/OpenIddict.Demo.Server.csproj @@ -68,6 +68,10 @@ runtime; build; native; contentfiles; analyzers compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native + + runtime; build; native; contentfiles; analyzers + compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native + diff --git a/modules/openiddict/app/OpenIddict.Demo.Server/package.json b/modules/openiddict/app/OpenIddict.Demo.Server/package.json index 2d5365e6c9..26556e2652 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": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2" } } diff --git a/modules/openiddict/app/angular/package.json b/modules/openiddict/app/angular/package.json index 9e8655baf6..429bd3e4d0 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": "~10.4.0-rc.1", - "@abp/ng.components": "~10.4.0-rc.1", - "@abp/ng.core": "~10.4.0-rc.1", - "@abp/ng.oauth": "~10.4.0-rc.1", - "@abp/ng.identity": "~10.4.0-rc.1", - "@abp/ng.setting-management": "~10.4.0-rc.1", - "@abp/ng.tenant-management": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", - "@abp/ng.theme.lepton-x": "~5.4.0-rc.1", + "@abp/ng.account": "~10.4.0-rc.2", + "@abp/ng.components": "~10.4.0-rc.2", + "@abp/ng.core": "~10.4.0-rc.2", + "@abp/ng.oauth": "~10.4.0-rc.2", + "@abp/ng.identity": "~10.4.0-rc.2", + "@abp/ng.setting-management": "~10.4.0-rc.2", + "@abp/ng.tenant-management": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", + "@abp/ng.theme.lepton-x": "~5.4.0-rc.2", "@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": "~10.4.0-rc.1", + "@abp/ng.schematics": "~10.4.0-rc.2", "@angular-devkit/build-angular": "^15.0.1", "@angular-eslint/builder": "~15.1.0", "@angular-eslint/eslint-plugin": "~15.1.0", diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs index 3a9c8109fc..48496874d0 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictAspNetCoreModule.cs @@ -25,9 +25,16 @@ public class AbpOpenIddictAspNetCoreModule : AbpModule Configure(options => { + options.ClaimsPrincipalHandlers.Add(); options.ClaimsPrincipalHandlers.Add(); }); + var preActions = context.Services.GetPreConfigureActions(); + Configure(options => + { + preActions.Configure(options); + }); + Configure(options => { options.ViewLocationFormats.Add("/Volo/Abp/OpenIddict/Views/{1}/{0}.cshtml"); diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs index 3339b6d376..f0c2415fb2 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/AbpOpenIddictOptions.cs @@ -25,4 +25,33 @@ public class AbpOpenIddictAspNetCoreOptions /// Set the url of the select account page. /// public string SelectAccountPage { get; set; } = "~/Account/SelectAccount"; + + /// + /// When set to true, the access token issued for the client_credentials grant + /// automatically includes the scopes configured on the client application (permissions + /// prefixed with oi_scp:) when the client does not explicitly request any scope. + /// Default: false. + /// + public bool UseDefaultScopesForClientCredentials { get; set; } + + /// + /// When set to true, the token response for the password grant automatically + /// grants the scopes configured on the client application (permissions prefixed with + /// oi_scp:) when the client does not explicitly request any scope. If the configured + /// scopes include openid/profile/email/roles, the corresponding + /// id_token and claim destinations are affected as well. + /// Default: false. + /// + public bool UseDefaultScopesForPassword { get; set; } + + /// + /// When set to true, the token response for the + /// urn:ietf:params:oauth:grant-type:token-exchange grant automatically grants the + /// scopes configured on the client application (permissions prefixed with oi_scp:) + /// when the client does not explicitly request any scope. If the configured scopes include + /// openid/profile/email/roles, the corresponding id_token and + /// claim destinations are affected as well. + /// Default: false. + /// + public bool UseDefaultScopesForTokenExchange { get; set; } } diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Claims/AbpDefaultScopesHandler.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Claims/AbpDefaultScopesHandler.cs new file mode 100644 index 0000000000..82ab4d3bb2 --- /dev/null +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Claims/AbpDefaultScopesHandler.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Immutable; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; +using OpenIddict.Abstractions; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.OpenIddict; + +public class AbpDefaultScopesHandler : IAbpOpenIddictClaimsPrincipalHandler, ITransientDependency +{ + public ILogger Logger { get; set; } + = NullLogger.Instance; + + public virtual async Task HandleAsync(AbpOpenIddictClaimsPrincipalHandlerContext context) + { + var options = context.ScopeServiceProvider + .GetRequiredService>().Value; + + var request = context.OpenIddictRequest; + if (!IsDefaultScopesEnabled(request, options)) + { + return; + } + + if (!context.Principal.GetScopes().IsDefaultOrEmpty) + { + return; + } + + var clientId = request.ClientId; + if (string.IsNullOrEmpty(clientId)) + { + return; + } + + var applicationManager = context.ScopeServiceProvider.GetRequiredService(); + var scopeManager = context.ScopeServiceProvider.GetRequiredService(); + + var application = await applicationManager.FindByClientIdAsync(clientId); + if (application == null) + { + return; + } + + var permissions = await applicationManager.GetPermissionsAsync(application); + var prefix = OpenIddictConstants.Permissions.Prefixes.Scope; + + var scopes = permissions + .Where(p => p.StartsWith(prefix, StringComparison.Ordinal)) + .Select(p => p[prefix.Length..]) + .ToImmutableArray(); + + if (scopes.IsDefaultOrEmpty) + { + return; + } + + Logger.LogDebug( + "Injecting default scopes for client {ClientId} (grant_type {GrantType}): {Scopes}", + clientId, + request.GrantType, + string.Join(", ", scopes)); + + context.Principal.SetScopes(scopes); + context.Principal.SetResources(await scopeManager.ListResourcesAsync(scopes).ToListAsync()); + } + + protected virtual bool IsDefaultScopesEnabled(OpenIddictRequest request, AbpOpenIddictAspNetCoreOptions options) + { + if (request.IsClientCredentialsGrantType()) + { + return options.UseDefaultScopesForClientCredentials; + } + + if (request.IsPasswordGrantType()) + { + return options.UseDefaultScopesForPassword; + } + + if (request.IsTokenExchangeGrantType()) + { + return options.UseDefaultScopesForTokenExchange; + } + + return false; + } +} 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 47a1b398c1..e4fd8fca83 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": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2" } } 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 2651d59d20..008b25c437 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/yarn.lock @@ -2,186 +2,186 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.1.tgz#18fa308c73a90f05dc460f85a0ec154f22706efb" - integrity sha512-AVl2q3wZ9erurV+FG5HiubOI1tU67ParPrvXPIbEbaQL8a6xJ1Qgyok8F0mpcesOqDjOIuEcA+EEjoylY2PSdw== +"@abp/aspnetcore.mvc.ui.theme.basic@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-10.4.0-rc.2.tgz#77d3ea3f4cccd0cda7c9cf7c4ca3e136e106e385" + integrity sha512-+zvkAFm1D1SXdZGdKjibn1yqIAYp8xNYccnipPrc5b+4xxvH8QaihymT4Z/g/XPT484wdDk3mq8G1Z3COPxPgg== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared" "~10.4.0-rc.2" -"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.1.tgz#f9cbda73efc56197c743ac4e2c9524da7e1682fe" - integrity sha512-yoDFLJ7K+P7hdW1jXV0dFjQCLcjF9k32/ev/BBvd7GBjnnQLHI/IuAv94YnzxXZWgOjkD53FXeACAgD1zMzypQ== +"@abp/aspnetcore.mvc.ui.theme.shared@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-10.4.0-rc.2.tgz#ab4bd8d5d4a3491f1666a34f3c48d961bb1d67f8" + integrity sha512-f5WcdNAi1CsMbb0yzllTOD757d4hP+FrmjwZax67QSw91e6uDK6huxn//UIOGTKKPQM7gsy6Ov46/D4UiWQRmQ== dependencies: - "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.1" - "@abp/bootstrap" "~10.4.0-rc.1" - "@abp/bootstrap-datepicker" "~10.4.0-rc.1" - "@abp/bootstrap-daterangepicker" "~10.4.0-rc.1" - "@abp/datatables.net-bs5" "~10.4.0-rc.1" - "@abp/font-awesome" "~10.4.0-rc.1" - "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.1" - "@abp/lodash" "~10.4.0-rc.1" - "@abp/luxon" "~10.4.0-rc.1" - "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.1" - "@abp/moment" "~10.4.0-rc.1" - "@abp/select2" "~10.4.0-rc.1" - "@abp/sweetalert2" "~10.4.0-rc.1" - "@abp/timeago" "~10.4.0-rc.1" - -"@abp/aspnetcore.mvc.ui@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.1.tgz#cda847fd8a2d331c24981fe88abffa217a525add" - integrity sha512-zY6IKhneigrsui1qwM8VUzHTtVbg5s9GeqadF35um/yHYxrAC0rsx4luR9bafRWRTzprIhpzMwpHeVuXqoPcZQ== + "@abp/aspnetcore.mvc.ui" "~10.4.0-rc.2" + "@abp/bootstrap" "~10.4.0-rc.2" + "@abp/bootstrap-datepicker" "~10.4.0-rc.2" + "@abp/bootstrap-daterangepicker" "~10.4.0-rc.2" + "@abp/datatables.net-bs5" "~10.4.0-rc.2" + "@abp/font-awesome" "~10.4.0-rc.2" + "@abp/jquery-validation-unobtrusive" "~10.4.0-rc.2" + "@abp/lodash" "~10.4.0-rc.2" + "@abp/luxon" "~10.4.0-rc.2" + "@abp/malihu-custom-scrollbar-plugin" "~10.4.0-rc.2" + "@abp/moment" "~10.4.0-rc.2" + "@abp/select2" "~10.4.0-rc.2" + "@abp/sweetalert2" "~10.4.0-rc.2" + "@abp/timeago" "~10.4.0-rc.2" + +"@abp/aspnetcore.mvc.ui@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-10.4.0-rc.2.tgz#5916af13a18dfe97d83e3282187ec81df51d0a11" + integrity sha512-hptwcUxq/IyL/jDPt2H7mcukaStTNNCOK2P785RHmTiT6t6YZSh1gTnJkjQkyxZLelilNbXY9jlIB//2ZHZsmw== dependencies: ansi-colors "^4.1.3" -"@abp/bootstrap-datepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.1.tgz#cdee114e71352453f714e706da8461595f812195" - integrity sha512-ff85lSLGlw0BQiTlR4/ww6D7iZzmAaj1N9D6wcA58dUXUKWJqxRba1scEkSFNzjszqC6wY8CBereYcT8h/iBCA== +"@abp/bootstrap-datepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-10.4.0-rc.2.tgz#5178d87e00144715c3d8ff6f561cb04e04d3615c" + integrity sha512-6D+YCEAkrQBTPzAF+87AsB9iCewz1WEaZ707bSzcKGAComYSv04/vWmTXWiYBYJlYWj9wzPYyGU4+Xb+p8L73g== dependencies: bootstrap-datepicker "^1.10.1" -"@abp/bootstrap-daterangepicker@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.1.tgz#13f5f19b67b6ed21e934b2cffe82eb96c9989fd0" - integrity sha512-oaQ3ngFyVNsO3iJAZWW6IoG12Fz6qmoGupXC9mtkVpwL/u9g5v5q5xWtwpqyNMt3z57tBFG9M+lmcyDHQpp2+w== +"@abp/bootstrap-daterangepicker@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-10.4.0-rc.2.tgz#e7f5f776542393a79573912c970279b65cb92d78" + integrity sha512-6fRgqgkh1gn2Ign9vQbEzP7G3fNyeLU7zpnixUxKLmBr0STo0vtf8CPG7c6CDLEwbXqdQy2wFE7pTlj61fOJzg== dependencies: - "@abp/moment" "~10.4.0-rc.1" + "@abp/moment" "~10.4.0-rc.2" bootstrap-daterangepicker "^3.1.0" -"@abp/bootstrap@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.1.tgz#ecc25cdb3d49f0fead1f0917e1539e9d22435170" - integrity sha512-c6jCoXQPpi29jRtWGzoHg2ky7omd9cFjgouXZ/aoLnNLbARFd1R1rgkAi9cdsLtpYpDiLOlukVUBRM7ebC/4Ig== +"@abp/bootstrap@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-10.4.0-rc.2.tgz#734ef046f238b80bea5851091e00afd2f6d9bb13" + integrity sha512-/RqQ7M352TL8dU+R2qKr3C2PVyPNHIa3QNYcUI3/G4PFrY50hIIgW5jDoptaZZ1RkijjFyMyhh4DKTHuKtSzkA== dependencies: - "@abp/core" "~10.4.0-rc.1" - "@abp/popper.js" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" + "@abp/popper.js" "~10.4.0-rc.2" bootstrap "^5.3.8" -"@abp/core@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.1.tgz#a78a29a8f30b75741bef039abd437fabd6e51a66" - integrity sha512-2qnVnaRWpZmg5HV62M7HayRYK3kVsmX+W2SAHvoV6ti5GRHcJl0KUbZB/Z7W4ZtAs3eDt0VCE9HaYs6MGXxZTg== +"@abp/core@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-10.4.0-rc.2.tgz#2de1844bb1e06fe74c32b1519e228401752e0575" + integrity sha512-yvJLhebmo17T0lgOcq02EtslbZuMzdeQ/r5brNtxFWIX2l1vQye3jd1uCYQqSR6X7lv/GbZbygxd6AHZo7V8Qw== dependencies: - "@abp/utils" "~10.4.0-rc.1" + "@abp/utils" "~10.4.0-rc.2" -"@abp/datatables.net-bs5@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.1.tgz#b7bcd3b55faeb1b1932efbd5dcb75bf4eac362ed" - integrity sha512-cW/ANToZxem3qiv38qTHIjIzpz58ictcKAdwcobL1rGUoa7CSfQDzcAjSmKK/uYxgWnd3Ph7PaN4IQQlzQcRQw== +"@abp/datatables.net-bs5@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-10.4.0-rc.2.tgz#5ee12d5735a149ecfe43c2153260189342e31b8f" + integrity sha512-1GXj/A0jjCbPtFM2r+ERnIJDlpTDRoj4ZkVkEJs20vHYvXzA/zh5efp5tP/As5Xie8+pTsh8XN7eK3IynJXa/g== dependencies: - "@abp/datatables.net" "~10.4.0-rc.1" + "@abp/datatables.net" "~10.4.0-rc.2" datatables.net-bs5 "^2.3.4" -"@abp/datatables.net@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.1.tgz#c664a5bafc8357d59baeee5340aa9ca0662f5d9c" - integrity sha512-C1qHyqL+Viw9MfG4B8wF3kyE6NqeB1COfbWiXsk1y4hH8mu8m5b226YaqPYi9DrhU5N0QZ0UvG34GkTLEWK++Q== +"@abp/datatables.net@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-10.4.0-rc.2.tgz#e8696867580e16766c123d5e3e6f424f2e165af6" + integrity sha512-Ah1oO9MIfAY3s50xvuRhfc0nS44+AoCQuOUbdHLRWQrzNaw6mETqYRCYF7CWajUdvCzV+O002cYr6U8iVfjSWw== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" datatables.net "^2.3.4" -"@abp/font-awesome@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.1.tgz#add06f0f6727ab1de815783103f19d28a30befe1" - integrity sha512-5o4bIjfNO7NfpkD5dVqgx52sJ2cs3pOZQY0XgrEaZrFKNrQwdkbQMu48wS2R4l3ntSKFj1rMB0OxInkG8vx6uQ== +"@abp/font-awesome@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-10.4.0-rc.2.tgz#83a3e8b47ef0e9b466cb786dfd7f34abe4a945f4" + integrity sha512-/Mzzcp8CANHWx+d7PZmZJvNBfnRj4E0+/eaXGK8I/vqGtiot0rXoHkgB+Mg4y83dJgPcBwDW9BEv8Q9gGEgswg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@fortawesome/fontawesome-free" "^7.0.1" -"@abp/jquery-validation-unobtrusive@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.1.tgz#96dff826f5c806f85b28fab477e6414af781a18f" - integrity sha512-5GkSNcHSz9opzqrzWphJhUNrBlpIZxk07ialo5gvIFV0/cC2jTDGe/7u3QKb1ZpDkjT/M66YL7kHrlpqLuPW6g== +"@abp/jquery-validation-unobtrusive@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-10.4.0-rc.2.tgz#d595ba387bff99fa7e7c3a9d416c1f7692c73760" + integrity sha512-lqZh5Y7Wk96pzykdZd6Z3TaQo5KnkV3ZDMqJIhc/Rfu5ReLGS+dqsLlA/2S7ZTtuaJMEerSX6g3M7v1QGRQPvQ== dependencies: - "@abp/jquery-validation" "~10.4.0-rc.1" + "@abp/jquery-validation" "~10.4.0-rc.2" jquery-validation-unobtrusive "^4.0.0" -"@abp/jquery-validation@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.1.tgz#510fcb3ffda2cb9ac12c66ae757f6e9742e4b6a7" - integrity sha512-vAlCcHMM/gbLuoTrDLGIU52GS70B+SjRwSEj4VSzvdnisjxz+6d+lfZWUYpLF2HO8pIEf5NQ/Dx76YudpK6TeQ== +"@abp/jquery-validation@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-10.4.0-rc.2.tgz#1b8231a256c34566960fc53749acdd596d4b0d4e" + integrity sha512-axnYg2zd3v9mxWW3eePnqQV6/j56hgR949ppopa5aGmv4pQwBkeY4qhOzAkKWwhZ/R7PB+zDygBX4UGAABR8GQ== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" jquery-validation "^1.21.0" -"@abp/jquery@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.1.tgz#f26ea65b0feb7786bf8a42b3e3503f7d5a65a650" - integrity sha512-UThaMvuQYpLuGLIBN1nU2oueCxacZbxVVGfAXtpibTzbRriLIYI6Ed4gdfZAwM3vyjOU/Ukyb6jdpBHbguLaaQ== +"@abp/jquery@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-10.4.0-rc.2.tgz#f3ecd9b874c44409f3fa287b3735eb05327cf8b8" + integrity sha512-F9ntMu+SyfzGyOU6t/ymSdzv1StQT6iazZZCtzWPz6zVZcQfE2h/KU1tIoVy3QQylBVGM5jUbYtBgLUN7izKlw== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" jquery "~3.7.1" -"@abp/lodash@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.1.tgz#8b192052f19b889e8f5ba06e79af64813b78d7ae" - integrity sha512-p9Uk5spfVoDb8k9rnG7lYSMpj4Z0S6B0Bbmn/l5sxpME4VLZDi/uAhCWUhJjxG5+Sl9or5Es9LWzXL0HLLi1VQ== +"@abp/lodash@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-10.4.0-rc.2.tgz#5acfdd1c3d6b21531fa70ba1665c5115df7855fd" + integrity sha512-iSkNvwp7W74flDm3hv6gsIP1ie9rNsI95/TbgZN1yBEU+GC27zl2vDcUJuIZvl1GZOxGQWrVNNGsTPzemokXKQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" lodash "^4.18.1" -"@abp/luxon@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.1.tgz#ba962f9221a9dab1dc20b270c6878b21c7c62282" - integrity sha512-XLrb53lwTNYYaGd+Jg5TIMl/BjCAF7Wx/tWawvpCG14nMEaSQapL3n3a0w3ptTCTyQiQq310SjX7I6sitpkOuA== +"@abp/luxon@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-10.4.0-rc.2.tgz#ca5bd2e4f8c92303b9d1a3e557d02f04596efd6c" + integrity sha512-W5Y0TO1/CUEpquBZ2jg7FzbXgiw10Ik+a5wXupRXHKHNFhLG4gSh1l+w0Olvoxx0OwmKWztBHqDsSoMXrizcgA== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" luxon "^3.7.2" -"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.1.tgz#de55092d711aac0ac13d9a4e25a2b3d5e1b28554" - integrity sha512-HN1mf4AVnUZSWqn5hHAovZRwGG0jUgWA4k5JeCPdX2icKkKCZY6kAWi7uuqJoGVYyQiiqnakJpt/B6ODEjHNwA== +"@abp/malihu-custom-scrollbar-plugin@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-10.4.0-rc.2.tgz#d3732924171865e626b1cfd3a5fc995da1143ba6" + integrity sha512-fxagBRXD3Ukn3ZrhiadMl76GjEou66eBCsJoIbHHM+6MQKXcxr7LzktbPAo2W2TllyQVvQvVv8g/MpR2ZtpOZQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/moment@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.1.tgz#80efe607a2a4e8a776eb319430d385b986d671c6" - integrity sha512-E44muWdbSNbpK4tlthWFkJNoIY1zFlteqnpNfs7cCiAbBCJXIjoF9Zo1QujEabMIFTGfoFUiHJy85Zi1WWADgA== +"@abp/moment@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-10.4.0-rc.2.tgz#321f2117460f74b0e00a823098c3495aabfde676" + integrity sha512-5xUjKagARURtCB3bPcj5rcZDKlwDzZoEdC5nE637u2DJwhHPRKSAL6sJN1NrouOZnSrv8QWp4YptwbjigRYeHA== dependencies: moment "^2.30.1" -"@abp/popper.js@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.1.tgz#cbc9fc7e6fa3401dc113dd4fbb7202844b177d13" - integrity sha512-HK8eLvueEREP1Y8XeiyJDLN/3Z1dlqGM2GSyeN8GDSV8bUXDX9WZ53nbl+vCRqM4NFiE+oz+5SXArMzm+54UHQ== +"@abp/popper.js@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-10.4.0-rc.2.tgz#d0ae71c8ac1edc20ae1c3e77b9d314e2374fbb70" + integrity sha512-VmXHdbbWjh5qiNQoxvr0geGMoKWAby+COB+ymHEiBjSXfL6Cg0W6R5kZEAZFGhtXImXqjzUxphWF/97CGvS4Zg== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" "@popperjs/core" "^2.11.8" -"@abp/select2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.1.tgz#5aee7a1ba18bc50fafc312fa79c77d4ae7fb9f18" - integrity sha512-59E34PMvB5PdFkJ/cIq5aLQDTCpq9Zj/vNuwd0X74KUAM3A9zySwL5qjjCsrIqYVfjWitA/fr2AzwQG1xPnWIA== +"@abp/select2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-10.4.0-rc.2.tgz#38dd0ed5ce9ffcec24f8c5932303bd78d6afcb35" + integrity sha512-7WSECOwknIPNDOJUYOrs+k6lMLn9HPwaO1kz0594F2D0q/G2UzNE+aDiJ0DnWUVnUOZvKDYfesdG+aaL+Lg8VQ== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" select2 "^4.0.13" -"@abp/sweetalert2@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.1.tgz#f9dcf03b9e0f119b727b15c0e67ce5e85d7736fb" - integrity sha512-fzahaJCz6MfMeWbn2mBklPbuO5aAZdlInPdbd7KXL3qWrN4uBy9Gedgjy7Ohbf6Ca5ZiiPHYAcgYmy3EQ094tA== +"@abp/sweetalert2@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-10.4.0-rc.2.tgz#70828ec8421f0a8e313b7573a999232dae21a664" + integrity sha512-oJXNcLwQmV52sBL/g5ZaDM16TmDgA8h4CxpvG9GapTyIxU/oXtrXDpDeR62eHYSwNsEnBKp1/CiG70N8dDMOag== dependencies: - "@abp/core" "~10.4.0-rc.1" + "@abp/core" "~10.4.0-rc.2" sweetalert2 "^11.23.0" -"@abp/timeago@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.1.tgz#4d83745367d6189fe9f846e166e958775d4d0b67" - integrity sha512-mZp8/lS3yNpjlx7mgVcJhpwUzw3HDtGG6KMMEm12oi0sOY7BborM3HaM9Cw8o+fLDXKQV7DTlU0YuoXJ8zgcoQ== +"@abp/timeago@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-10.4.0-rc.2.tgz#896de9979f7fc9693da5f817e792e26e32d69449" + integrity sha512-BxFpQGg/LUqvRf4wbzCf0fz4ZyU37QKGEUKzUSV9RzNj8VaHuWBIW/OaS2op9D2Z2m94Cq8WQYMFUap0lQP8oA== dependencies: - "@abp/jquery" "~10.4.0-rc.1" + "@abp/jquery" "~10.4.0-rc.2" timeago "^1.6.7" -"@abp/utils@~10.4.0-rc.1": - version "10.4.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.1.tgz#de16d025b5e8c7668cf9a1fb6d709a41543527f7" - integrity sha512-gmr7tA33RX/zPdjxB4aniJpnCpV1tOMPnHTHX1mt9LaLy+jwdxD5HhhMr/ZPTakhZYtOxk3uayzQJMzJ1g0Lbw== +"@abp/utils@~10.4.0-rc.2": + version "10.4.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-10.4.0-rc.2.tgz#7ac5d652c9f4f3e44593c3ce7a89556e09fa2c43" + integrity sha512-+kT1N+E3D1TqvQD2kJqH+EmXUN6xUvSoOAEkDI6kwtfYfjjBWvxaNfy5AnT938qiFkU03npbAB+x/2H3A6St1Q== dependencies: just-compare "^2.3.0" diff --git a/modules/virtual-file-explorer/.abpstudio/state.json b/modules/virtual-file-explorer/.abpstudio/state.json deleted file mode 100644 index b0ef88d2f2..0000000000 --- a/modules/virtual-file-explorer/.abpstudio/state.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "selectedKubernetesProfile": null, - "solutionRunner": { - "selectedProfile": null, - "targetFrameworks": [], - "applicationsStartingWithoutBuild": [], - "applicationsWithoutAutoRefreshBrowserOnRestart": [], - "applicationBatchStartStates": [], - "folderBatchStartStates": [] - } -} \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/package.json b/modules/virtual-file-explorer/app/package.json index 7bc3b2110f..ecf8897fa9 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": "~10.4.0-rc.1", - "@abp/virtual-file-explorer": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2", + "@abp/virtual-file-explorer": "~10.4.0-rc.2" } } diff --git a/npm/lerna.json b/npm/lerna.json index 1b863edc7e..baa67eab41 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 8da141eacf..4e24a29da8 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -48,8 +48,8 @@ }, "private": true, "devDependencies": { - "@abp/ng.theme.lepton-x": "~5.4.0-rc.1", - "@abp/utils": "~10.4.0-rc.1", + "@abp/ng.theme.lepton-x": "~5.4.0-rc.2", + "@abp/utils": "~10.4.0-rc.2", "@angular-devkit/build-angular": "~21.2.0", "@angular-devkit/core": "~21.2.0", "@angular-devkit/schematics": "~21.2.0", diff --git a/npm/ng-packs/packages/account-core/package.json b/npm/ng-packs/packages/account-core/package.json index f1e3e0ad22..276ebbd4c1 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.core": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index 052488d3f3..ebf32ce39f 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.account.core": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/cms-kit/package.json b/npm/ng-packs/packages/cms-kit/package.json index ddbcb2f074..cd8ffe7163 100644 --- a/npm/ng-packs/packages/cms-kit/package.json +++ b/npm/ng-packs/packages/cms-kit/package.json @@ -1,15 +1,15 @@ { "name": "@abp/ng.cms-kit", - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~10.4.0-rc.1", - "@abp/ng.setting-management": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.components": "~10.4.0-rc.2", + "@abp/ng.setting-management": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "@toast-ui/editor": "~3.0.0", "codemirror": "~6.0.0", "tslib": "^2.0.0" diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index ca63910031..0191ac2459 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=10.4.0-rc.1", - "@abp/ng.theme.shared": ">=10.4.0-rc.1" + "@abp/ng.core": ">=10.4.0-rc.2", + "@abp/ng.theme.shared": ">=10.4.0-rc.2" }, "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 411161eced..3f6fce066d 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "~10.4.0-rc.1", + "@abp/utils": "~10.4.0-rc.2", "just-clone": "^6.0.0", "just-compare": "^2.0.0", "ts-toolbelt": "^9.0.0", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 44edf475e2..f75a537070 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "tslib": "^2.0.0" }, "peerDependencies": { diff --git a/npm/ng-packs/packages/generators/package.json b/npm/ng-packs/packages/generators/package.json index de091a9eaa..51dc120c3e 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "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 5c85096e44..fecf6a8a34 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~10.4.0-rc.1", - "@abp/ng.permission-management": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.components": "~10.4.0-rc.2", + "@abp/ng.permission-management": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/oauth/package.json b/npm/ng-packs/packages/oauth/package.json index 00e724cb3a..518f50879b 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~10.4.0-rc.1", - "@abp/utils": "~10.4.0-rc.1", + "@abp/ng.core": "~10.4.0-rc.2", + "@abp/utils": "~10.4.0-rc.2", "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 9ed0d4c456..bc3436e75f 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "tslib": "^2.0.0" }, "peerDependencies": { diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index c60e162ed2..70719702a7 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "author": "", "schematics": "./collection.json", "dependencies": { diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 02ccdbe3cf..8b0a426747 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.components": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.components": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "tslib": "^2.0.0" }, "peerDependencies": { diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index c525d14e8c..7aa0f8fe23 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.feature-management": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "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 d56b7a9b9e..de8fe2916a 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.account.core": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.account.core": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "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 236863efbb..8f06c2b890 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~10.4.0-rc.1", + "@abp/ng.core": "~10.4.0-rc.2", "@fortawesome/fontawesome-free": "^6.0.0", "@ng-bootstrap/ng-bootstrap": "~20.0.0", "@ngx-validate/core": "^0.2.0", diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index 0ea7dd2bde..70a9ed8ddb 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "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 2e69091fb6..40c5f902b9 100644 --- a/npm/packs/aspnetcore.components.server.basictheme/package.json +++ b/npm/packs/aspnetcore.components.server.basictheme/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/aspnetcore.components.server.basictheme", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.components.server.theming": "~10.4.0-rc.1" + "@abp/aspnetcore.components.server.theming": "~10.4.0-rc.2" }, "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 f10105ff2a..3729e5a20e 100644 --- a/npm/packs/aspnetcore.components.server.theming/package.json +++ b/npm/packs/aspnetcore.components.server.theming/package.json @@ -1,12 +1,12 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/aspnetcore.components.server.theming", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/bootstrap": "~10.4.0-rc.1", - "@abp/font-awesome": "~10.4.0-rc.1" + "@abp/bootstrap": "~10.4.0-rc.2", + "@abp/font-awesome": "~10.4.0-rc.2" }, "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 3e3eaef28e..6bf58353a1 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~10.4.0-rc.2" }, "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 5c0bf1ac8c..260f089415 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "repository": { "type": "git", @@ -10,20 +10,20 @@ "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~10.4.0-rc.1", - "@abp/bootstrap": "~10.4.0-rc.1", - "@abp/bootstrap-datepicker": "~10.4.0-rc.1", - "@abp/bootstrap-daterangepicker": "~10.4.0-rc.1", - "@abp/datatables.net-bs5": "~10.4.0-rc.1", - "@abp/font-awesome": "~10.4.0-rc.1", - "@abp/jquery-validation-unobtrusive": "~10.4.0-rc.1", - "@abp/lodash": "~10.4.0-rc.1", - "@abp/luxon": "~10.4.0-rc.1", - "@abp/malihu-custom-scrollbar-plugin": "~10.4.0-rc.1", - "@abp/moment": "~10.4.0-rc.1", - "@abp/select2": "~10.4.0-rc.1", - "@abp/sweetalert2": "~10.4.0-rc.1", - "@abp/timeago": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui": "~10.4.0-rc.2", + "@abp/bootstrap": "~10.4.0-rc.2", + "@abp/bootstrap-datepicker": "~10.4.0-rc.2", + "@abp/bootstrap-daterangepicker": "~10.4.0-rc.2", + "@abp/datatables.net-bs5": "~10.4.0-rc.2", + "@abp/font-awesome": "~10.4.0-rc.2", + "@abp/jquery-validation-unobtrusive": "~10.4.0-rc.2", + "@abp/lodash": "~10.4.0-rc.2", + "@abp/luxon": "~10.4.0-rc.2", + "@abp/malihu-custom-scrollbar-plugin": "~10.4.0-rc.2", + "@abp/moment": "~10.4.0-rc.2", + "@abp/select2": "~10.4.0-rc.2", + "@abp/sweetalert2": "~10.4.0-rc.2", + "@abp/timeago": "~10.4.0-rc.2" }, "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 274dbd3b12..966552599a 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": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "lockfileVersion": 1, "requires": true, "packages": { diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index bc3d811f03..b9e8bc0198 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/aspnetcore.mvc.ui", "repository": { "type": "git", diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index ad29f8e337..ccee255849 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~10.4.0-rc.1", - "@abp/owl.carousel": "~10.4.0-rc.1", - "@abp/prismjs": "~10.4.0-rc.1", - "@abp/tui-editor": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.shared": "~10.4.0-rc.2", + "@abp/owl.carousel": "~10.4.0-rc.2", + "@abp/prismjs": "~10.4.0-rc.2", + "@abp/tui-editor": "~10.4.0-rc.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 7431262294..2cbace0f66 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/bootstrap-datepicker", "repository": { "type": "git", diff --git a/npm/packs/bootstrap-daterangepicker/package.json b/npm/packs/bootstrap-daterangepicker/package.json index 539e80d423..31ac058457 100644 --- a/npm/packs/bootstrap-daterangepicker/package.json +++ b/npm/packs/bootstrap-daterangepicker/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/bootstrap-daterangepicker", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/moment": "~10.4.0-rc.1", + "@abp/moment": "~10.4.0-rc.2", "bootstrap-daterangepicker": "^3.1.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index 1df8f0dac7..e31f70802b 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/bootstrap", "repository": { "type": "git", @@ -10,8 +10,8 @@ "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", - "@abp/popper.js": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", + "@abp/popper.js": "~10.4.0-rc.2", "bootstrap": "^5.3.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index fc1f0f17b6..6373db6a7d 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 173e5f3898..06600826fe 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "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 1910acf9c7..a78b6b4e77 100644 --- a/npm/packs/cms-kit.admin/package.json +++ b/npm/packs/cms-kit.admin/package.json @@ -1,16 +1,16 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/cms-kit.admin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~10.4.0-rc.1", - "@abp/jstree": "~10.4.0-rc.1", - "@abp/markdown-it": "~10.4.0-rc.1", - "@abp/slugify": "~10.4.0-rc.1", - "@abp/tui-editor": "~10.4.0-rc.1", - "@abp/uppy": "~10.4.0-rc.1" + "@abp/codemirror": "~10.4.0-rc.2", + "@abp/jstree": "~10.4.0-rc.2", + "@abp/markdown-it": "~10.4.0-rc.2", + "@abp/slugify": "~10.4.0-rc.2", + "@abp/tui-editor": "~10.4.0-rc.2", + "@abp/uppy": "~10.4.0-rc.2" }, "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 0962159734..dae2cebd32 100644 --- a/npm/packs/cms-kit.public/package.json +++ b/npm/packs/cms-kit.public/package.json @@ -1,12 +1,12 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/cms-kit.public", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/highlight.js": "~10.4.0-rc.1", - "@abp/star-rating-svg": "~10.4.0-rc.1" + "@abp/highlight.js": "~10.4.0-rc.2", + "@abp/star-rating-svg": "~10.4.0-rc.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cms-kit/package.json b/npm/packs/cms-kit/package.json index 8376769e7d..c92e0b673c 100644 --- a/npm/packs/cms-kit/package.json +++ b/npm/packs/cms-kit/package.json @@ -1,12 +1,12 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/cms-kit", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/cms-kit.admin": "~10.4.0-rc.1", - "@abp/cms-kit.public": "~10.4.0-rc.1" + "@abp/cms-kit.admin": "~10.4.0-rc.2", + "@abp/cms-kit.public": "~10.4.0-rc.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index 936dda5a2c..6b878ba10d 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "codemirror": "^5.65.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index b541e81076..60d7323bb6 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/core", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/utils": "~10.4.0-rc.1" + "@abp/utils": "~10.4.0-rc.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index 3621f421c5..935fd224a9 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "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 32223b292f..ac8aa50a4b 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/datatables.net-bs4", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/datatables.net": "~10.4.0-rc.1", + "@abp/datatables.net": "~10.4.0-rc.2", "datatables.net-bs4": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net-bs5/package.json b/npm/packs/datatables.net-bs5/package.json index 56cc3e0d55..9aa0cd52f5 100644 --- a/npm/packs/datatables.net-bs5/package.json +++ b/npm/packs/datatables.net-bs5/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/datatables.net-bs5", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~10.4.0-rc.1", + "@abp/datatables.net": "~10.4.0-rc.2", "datatables.net-bs5": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index 79f414b04c..39d03b479e 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/datatables.net", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~10.4.0-rc.1", + "@abp/jquery": "~10.4.0-rc.2", "datatables.net": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index 3bed584fb9..384cc53455 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~10.4.0-rc.1", - "@abp/clipboard": "~10.4.0-rc.1", - "@abp/malihu-custom-scrollbar-plugin": "~10.4.0-rc.1", - "@abp/popper.js": "~10.4.0-rc.1", - "@abp/prismjs": "~10.4.0-rc.1" + "@abp/anchor-js": "~10.4.0-rc.2", + "@abp/clipboard": "~10.4.0-rc.2", + "@abp/malihu-custom-scrollbar-plugin": "~10.4.0-rc.2", + "@abp/popper.js": "~10.4.0-rc.2", + "@abp/prismjs": "~10.4.0-rc.2" }, "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 297d868b61..8f1f18bfa7 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "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 3604b7d391..ac8383e8af 100644 --- a/npm/packs/flag-icons/package.json +++ b/npm/packs/flag-icons/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/flag-icons", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index 457dba2299..4afc64510c 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/font-awesome", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "@fortawesome/fontawesome-free": "^7.0.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 9a8ebaeff5..c1c30f59dd 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "@highlightjs/cdn-assets": "~11.11.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 3977307920..9493d827a9 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/jquery-form", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~10.4.0-rc.1", + "@abp/jquery": "~10.4.0-rc.2", "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 5de2b45014..cb7de6c01d 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/jquery-validation-unobtrusive", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~10.4.0-rc.1", + "@abp/jquery-validation": "~10.4.0-rc.2", "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 130955fe52..7371ee6884 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/jquery-validation", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~10.4.0-rc.1", + "@abp/jquery": "~10.4.0-rc.2", "jquery-validation": "^1.21.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 24184ea086..b965a04598 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/jquery", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "jquery": "~3.7.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index 1ea57ec888..f10444c359 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~10.4.0-rc.1", + "@abp/jquery": "~10.4.0-rc.2", "jstree": "^3.3.17" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 1bc78e7a36..a848aa9cf4 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/lodash", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "lodash": "^4.18.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index 0cbbea7152..9656ec45e7 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/luxon", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "luxon": "^3.7.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index 551ddf68b5..4a9897a916 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/malihu-custom-scrollbar-plugin", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "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 447065b70a..6231c69651 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "markdown-it": "^14.1.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/moment/package.json b/npm/packs/moment/package.json index efd3258a25..c331c46ed1 100644 --- a/npm/packs/moment/package.json +++ b/npm/packs/moment/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/moment", "repository": { "type": "git", diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index c26fae88bb..064dd8e1c5 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 53584d6e3d..a19549fd5a 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "@popperjs/core": "^2.11.8" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index 9f627c5896..2856b22332 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~10.4.0-rc.1", - "@abp/core": "~10.4.0-rc.1", + "@abp/clipboard": "~10.4.0-rc.2", + "@abp/core": "~10.4.0-rc.2", "prismjs": "^1.30.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/qrcode/package.json b/npm/packs/qrcode/package.json index 3a3e29e913..ac79ff274d 100644 --- a/npm/packs/qrcode/package.json +++ b/npm/packs/qrcode/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/qrcode", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1" + "@abp/core": "~10.4.0-rc.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index 54bfaf9d5a..470ed050f2 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/select2", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index effaf2dc94..334a336d93 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "@microsoft/signalr": "~9.0.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/slugify/package.json b/npm/packs/slugify/package.json index 89450a8e86..f1cb808437 100644 --- a/npm/packs/slugify/package.json +++ b/npm/packs/slugify/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "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 715eeebaef..d2bb3f9ad6 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~10.4.0-rc.1", + "@abp/jquery": "~10.4.0-rc.2", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/sweetalert2/package.json b/npm/packs/sweetalert2/package.json index e69bcabdd0..91399a31bc 100644 --- a/npm/packs/sweetalert2/package.json +++ b/npm/packs/sweetalert2/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/sweetalert2", "publishConfig": { "access": "public" @@ -10,7 +10,7 @@ "directory": "npm/packs/sweetalert2" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "sweetalert2": "^11.23.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index 82bf1c9a83..8a054aaa0d 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/timeago", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~10.4.0-rc.1", + "@abp/jquery": "~10.4.0-rc.2", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index d1c4862c51..d4efe1fb8e 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/toastr", "repository": { "type": "git", @@ -10,7 +10,7 @@ "access": "public" }, "dependencies": { - "@abp/jquery": "~10.4.0-rc.1", + "@abp/jquery": "~10.4.0-rc.2", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 5e3f2ba977..6e65112ad0 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,12 +1,12 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~10.4.0-rc.1", - "@abp/prismjs": "~10.4.0-rc.1" + "@abp/jquery": "~10.4.0-rc.2", + "@abp/prismjs": "~10.4.0-rc.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index c982d9afcb..60fc941d7c 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "uppy": "^5.1.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index b2d7ce054c..3f018f43dc 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "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 521104729d..50c6a8b576 100644 --- a/npm/packs/vee-validate/package.json +++ b/npm/packs/vee-validate/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/vee-validate", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/vue": "~10.4.0-rc.1", + "@abp/vue": "~10.4.0-rc.2", "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 9ecd377bd2..6e7bcba222 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~10.4.0-rc.1", - "@abp/prismjs": "~10.4.0-rc.1" + "@abp/clipboard": "~10.4.0-rc.2", + "@abp/prismjs": "~10.4.0-rc.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", "homepage": "https://abp.io", diff --git a/npm/packs/vue/package.json b/npm/packs/vue/package.json index 606be58223..06d354e7ea 100644 --- a/npm/packs/vue/package.json +++ b/npm/packs/vue/package.json @@ -1,5 +1,5 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/vue", "publishConfig": { "access": "public" diff --git a/npm/packs/zxcvbn/package.json b/npm/packs/zxcvbn/package.json index 2c5e580b57..e43f2d8786 100644 --- a/npm/packs/zxcvbn/package.json +++ b/npm/packs/zxcvbn/package.json @@ -1,11 +1,11 @@ { - "version": "10.4.0-rc.1", + "version": "10.4.0-rc.2", "name": "@abp/zxcvbn", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~10.4.0-rc.1", + "@abp/core": "~10.4.0-rc.2", "zxcvbn": "^4.4.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431", diff --git a/nupkg/0 b/nupkg/0 index 0cfbf08886..ec635144f6 100644 --- a/nupkg/0 +++ b/nupkg/0 @@ -1 +1 @@ -2 +9 diff --git a/nupkg/push_packages.ps1 b/nupkg/push_packages.ps1 index 5b37c22572..f192c2a560 100644 --- a/nupkg/push_packages.ps1 +++ b/nupkg/push_packages.ps1 @@ -13,7 +13,9 @@ $failedPackages = @() $totalProjectsCount = $projects.length $nugetUrl = "https://api.nuget.org/v3/index.json" $maxQuotaRetryCount = 3 -$quotaRetryDelaysInSeconds = @(30, 60, 120) +$defaultQuotaRetryDelaysInSeconds = @(30, 60, 120) +$maxPushesPerHour = 250 # NuGet.org rate limit (conservative). Set 0 to disable. +$pushTimestamps = [System.Collections.Generic.List[datetime]]::new() $failedPackagesFilePath = Join-Path $packFolder "failed-packages.txt" Set-Location $packFolder if (Test-Path $failedPackagesFilePath) { Remove-Item $failedPackagesFilePath -Force } @@ -29,6 +31,25 @@ foreach($project in $projects) { if ($nugetPackageExists) { + # Sliding-window rate limiter: ensure we don't exceed $maxPushesPerHour pushes per hour + if ($maxPushesPerHour -gt 0) + { + $windowStart = (Get-Date).AddHours(-1) + $recentPushes = $pushTimestamps | Where-Object { $_ -gt $windowStart } + $pushTimestamps = [System.Collections.Generic.List[datetime]]$recentPushes + + if ($pushTimestamps.Count -ge $maxPushesPerHour) + { + $waitUntil = $pushTimestamps[0].AddHours(1) + $waitSeconds = [int]([math]::Ceiling(($waitUntil - (Get-Date)).TotalSeconds)) + 1 + if ($waitSeconds -gt 0) + { + Write-Warning "Rate limit: $($pushTimestamps.Count) pushes in the last hour (limit: $maxPushesPerHour). Pausing $waitSeconds seconds until the window resets..." + Start-Sleep -Seconds $waitSeconds + } + } + } + $attempt = 0 $pushSucceeded = $false while ($true) @@ -51,7 +72,17 @@ foreach($project in $projects) { break } - $retryDelay = $quotaRetryDelaysInSeconds[$attempt - 1] + # Parse the retry-after value from the NuGet response if present (e.g. "retry after: 2974s") + $retryAfterMatch = ($pushOutput | Out-String) | Select-String -Pattern 'retry after:\s*(\d+)s' -AllMatches + if ($retryAfterMatch -and $retryAfterMatch.Matches.Count -gt 0) + { + $retryDelay = [int]$retryAfterMatch.Matches[0].Groups[1].Value + } + else + { + $retryDelay = $defaultQuotaRetryDelaysInSeconds[$attempt - 1] + } + Write-Warning "NuGet push returned a 4xx response for $nugetPackageName. Retrying in $retryDelay seconds (retry $attempt/$maxQuotaRetryCount)..." Start-Sleep -Seconds $retryDelay } @@ -62,6 +93,10 @@ foreach($project in $projects) { $errorCount += 1 $failedPackages += $nugetPackageName } + else + { + $pushTimestamps.Add((Get-Date)) + } #Write-Host ("Deleting package from local: " + $nugetPackageName) #Remove-Item $nugetPackageName -Force } 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 9f97e8cdf2..90f80c4eb9 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 bb2f32119b..c067085a72 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 8e8951ff9e..b7e9d15984 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.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip b/source-code/Volo.Abp.BlobStoring.Database.SourceCode/Volo.Abp.BlobStoring.Database.SourceCode.zip index 025e5cb3c9..90539eeefe 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 fa977a3dbc..f3e8ecb378 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 9622713070..ab6e046679 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 0479abe4b5..9bc7d440e9 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 27728ff24e..e1caf43b77 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 4609ce42c8..496c9ec96b 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 2172de4b7e..cef7f0ace0 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 4dd7322f58..233fe8341a 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 33a3afe72b..d9345afdee 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 da1f71fbed..482c4581dd 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 5b2c53cedc..c1bc6d27ab 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.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip b/source-code/Volo.CmsKit.SourceCode/Volo.CmsKit.SourceCode.zip index 61b0b48873..6a2e1310ee 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 5e216094e4..44961e9a85 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 5ceb8ad708..065be6dd98 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": "~10.4.0-rc.1", - "@abp/ng.components": "~10.4.0-rc.1", - "@abp/ng.core": "~10.4.0-rc.1", - "@abp/ng.identity": "~10.4.0-rc.1", - "@abp/ng.oauth": "~10.4.0-rc.1", - "@abp/ng.setting-management": "~10.4.0-rc.1", - "@abp/ng.tenant-management": "~10.4.0-rc.1", - "@abp/ng.theme.lepton-x": "~5.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.account": "~10.4.0-rc.2", + "@abp/ng.components": "~10.4.0-rc.2", + "@abp/ng.core": "~10.4.0-rc.2", + "@abp/ng.identity": "~10.4.0-rc.2", + "@abp/ng.oauth": "~10.4.0-rc.2", + "@abp/ng.setting-management": "~10.4.0-rc.2", + "@abp/ng.tenant-management": "~10.4.0-rc.2", + "@abp/ng.theme.lepton-x": "~5.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "@angular/animations": "~21.2.0", "@angular/aria": "~21.2.0", "@angular/common": "~21.2.0", @@ -37,7 +37,7 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@abp/ng.schematics": "~10.4.0-rc.1", + "@abp/ng.schematics": "~10.4.0-rc.2", "@angular-eslint/builder": "~21.2.0", "@angular-eslint/eslint-plugin": "~21.2.0", "@angular-eslint/eslint-plugin-template": "~21.2.0", diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj index b05d961d02..6ae4b6243b 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/MyCompanyName.MyProjectName.Blazor.Server.Mongo.csproj @@ -20,7 +20,7 @@ - + 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 86b5988147..ba5914c2f9 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": "~5.4.0-rc.1", - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.1" + "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.2", + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index 435af21434..f72a142579 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -20,7 +20,7 @@ - + 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 08a8f091f0..dbbf59cad1 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": "~5.4.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.2" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj index 563b5dbe5b..123afd3d34 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server.Mongo/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.Mongo.csproj @@ -73,7 +73,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj index 47baf21729..ded34186ad 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.WebAssembly/Server/MyCompanyName.MyProjectName.Blazor.WebAssembly.Server.csproj @@ -74,7 +74,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj index d69b149ef8..1c968973ec 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/MyCompanyName.MyProjectName.Host.Mongo.csproj @@ -69,7 +69,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj index 9bbc20ef2b..0e8f220689 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/MyCompanyName.MyProjectName.Host.csproj @@ -70,7 +70,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj index 999640b5c5..e48c588324 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/MyCompanyName.MyProjectName.Mvc.Mongo.csproj @@ -17,7 +17,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj index 18ff1082ac..700d497e7e 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/MyCompanyName.MyProjectName.Mvc.csproj @@ -17,7 +17,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index cdaee5cc07..f2cb08a2eb 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,15 +12,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~10.4.0-rc.1", - "@abp/ng.components": "~10.4.0-rc.1", - "@abp/ng.core": "~10.4.0-rc.1", - "@abp/ng.identity": "~10.4.0-rc.1", - "@abp/ng.oauth": "~10.4.0-rc.1", - "@abp/ng.setting-management": "~10.4.0-rc.1", - "@abp/ng.tenant-management": "~10.4.0-rc.1", - "@abp/ng.theme.lepton-x": "~5.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.account": "~10.4.0-rc.2", + "@abp/ng.components": "~10.4.0-rc.2", + "@abp/ng.core": "~10.4.0-rc.2", + "@abp/ng.identity": "~10.4.0-rc.2", + "@abp/ng.oauth": "~10.4.0-rc.2", + "@abp/ng.setting-management": "~10.4.0-rc.2", + "@abp/ng.tenant-management": "~10.4.0-rc.2", + "@abp/ng.theme.lepton-x": "~5.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "@angular/animations": "~21.2.0", "@angular/aria": "~21.2.0", "@angular/common": "~21.2.0", @@ -37,7 +37,7 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@abp/ng.schematics": "~10.4.0-rc.1", + "@abp/ng.schematics": "~10.4.0-rc.2", "@angular-eslint/builder": "~21.2.0", "@angular-eslint/eslint-plugin": "~21.2.0", "@angular-eslint/eslint-plugin-template": "~21.2.0", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj index 57f69c6f00..f538b21b54 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.AuthServer/MyCompanyName.MyProjectName.AuthServer.csproj @@ -51,7 +51,7 @@ - + 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 3a82d0fed3..92f746b69e 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj index 3001a484c7..355fc507fb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyCompanyName.MyProjectName.Blazor.Server.Tiered.csproj @@ -29,7 +29,7 @@ - + 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 08a8f091f0..dbbf59cad1 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": "~5.4.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.2" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj index b55835b80a..1b9444006c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyCompanyName.MyProjectName.Blazor.Server.csproj @@ -28,7 +28,7 @@ - + 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 08a8f091f0..dbbf59cad1 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": "~5.4.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.2" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj index a8b3c6a25a..f2d15c4652 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered/MyCompanyName.MyProjectName.Blazor.WebApp.Tiered.csproj @@ -32,7 +32,7 @@ - + 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 08a8f091f0..dbbf59cad1 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": "~5.4.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.2" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj index eb4e7f7b7f..1ce1e196e9 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.WebApp/MyCompanyName.MyProjectName.Blazor.WebApp.csproj @@ -29,7 +29,7 @@ - + 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 08a8f091f0..dbbf59cad1 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": "~5.4.0-rc.1", - "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2", + "@abp/aspnetcore.components.server.leptonxlitetheme": "~5.4.0-rc.2" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj index 79a7a24592..b516d5b878 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyCompanyName.MyProjectName.HttpApi.HostWithIds.csproj @@ -26,7 +26,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj index 5838acf766..ca2d593362 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/MyCompanyName.MyProjectName.Web.Host.csproj @@ -28,7 +28,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 7ab7dd1aa9..ab8a7afddd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -49,7 +49,7 @@ - + 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 fd37d55b25..520fcd7a40 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": "~5.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~5.4.0-rc.2" } } diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 6d3e63e889..390d2daee9 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -13,15 +13,15 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~10.4.0-rc.1", - "@abp/ng.components": "~10.4.0-rc.1", - "@abp/ng.core": "~10.4.0-rc.1", - "@abp/ng.identity": "~10.4.0-rc.1", - "@abp/ng.oauth": "~10.4.0-rc.1", - "@abp/ng.setting-management": "~10.4.0-rc.1", - "@abp/ng.tenant-management": "~10.4.0-rc.1", - "@abp/ng.theme.basic": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1", + "@abp/ng.account": "~10.4.0-rc.2", + "@abp/ng.components": "~10.4.0-rc.2", + "@abp/ng.core": "~10.4.0-rc.2", + "@abp/ng.identity": "~10.4.0-rc.2", + "@abp/ng.oauth": "~10.4.0-rc.2", + "@abp/ng.setting-management": "~10.4.0-rc.2", + "@abp/ng.tenant-management": "~10.4.0-rc.2", + "@abp/ng.theme.basic": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2", "@angular/animations": "~21.2.0", "@angular/aria": "~21.2.0", "@angular/common": "~21.2.0", @@ -37,7 +37,7 @@ "zone.js": "~0.15.0" }, "devDependencies": { - "@abp/ng.schematics": "~10.4.0-rc.1", + "@abp/ng.schematics": "~10.4.0-rc.2", "@angular-eslint/builder": "~21.2.0", "@angular-eslint/eslint-plugin": "~21.2.0", "@angular-eslint/eslint-plugin-template": "~21.2.0", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index c5245ba2b4..4355d231a1 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": "~21.2.0", "@angular/core": "~21.2.0", - "@abp/ng.core": "~10.4.0-rc.1", - "@abp/ng.theme.shared": "~10.4.0-rc.1" + "@abp/ng.core": "~10.4.0-rc.2", + "@abp/ng.theme.shared": "~10.4.0-rc.2" }, "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 abd58d1854..2487d353b1 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": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2" } } 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 d9e349ffa9..a76206e820 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": "~10.4.0-rc.1", - "@abp/aspnetcore.components.server.basictheme": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2", + "@abp/aspnetcore.components.server.basictheme": "~10.4.0-rc.2" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 9baca07fec..dc673dea89 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": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2" } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 9baca07fec..dc673dea89 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": "~10.4.0-rc.1" + "@abp/aspnetcore.mvc.ui.theme.basic": "~10.4.0-rc.2" } }