|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 379 KiB |
@ -0,0 +1,213 @@ |
|||||
|
# ABP 10.4.2 Expands Blazor UI Options with MudBlazor Support |
||||
|
|
||||
|
With ABP 10.4.2, new Blazor projects can now use **MudBlazor** (Material Design) as an alternative to the long-standing default, **Blazorise** (Bootstrap 5). Framework, themes (LeptonX / LeptonX Lite / Basic), modules, solution templates, ABP Studio, and ABP Suite all support both libraries side by side. The 10.4.2 packages are live on nuget.org. |
||||
|
|
||||
|
## Why add another Blazor UI library? |
||||
|
|
||||
|
Blazorise has been ABP's default Blazor UI library for years and **remains the default and is fully supported** — existing Blazorise projects can keep moving at their own pace, and upgrading to 10.4 does not change anything for them. |
||||
|
|
||||
|
We added MudBlazor because one Blazor UI choice cannot fit every team: |
||||
|
|
||||
|
- **Design language** — Bootstrap and Material Design serve different audiences, and forcing a single choice does not fit every team |
||||
|
- **Open-source preference** — MudBlazor is MIT-licensed, which works well for teams that want an open-source frontend component stack without extra component-library licensing or compliance overhead |
||||
|
- **Ecosystem fit** — Material Design third-party components (charts, rich text editors, data visualization, and so on) tend to integrate more naturally with a MudBlazor project |
||||
|
|
||||
|
For new projects you can start with MudBlazor right away. Existing Blazorise projects do not need to be rewritten just to switch UI libraries. |
||||
|
|
||||
|
### Who should consider MudBlazor? |
||||
|
|
||||
|
- Teams that want the frontend component stack **fully open source** with no licensing to manage (individual developers, open-source community projects, education / learning settings) |
||||
|
- Organizations with internal **third-party dependency or supply-chain compliance** requirements that prefer MIT-licensed components |
||||
|
- New Blazor projects that want to start with **Material Design** |
||||
|
- Teams already comfortable with the **MudBlazor ecosystem** (charts, rich text, rich UI components) |
||||
|
|
||||
|
## What the MudBlazor option covers |
||||
|
|
||||
|
### Framework core |
||||
|
|
||||
|
`Volo.Abp.MudBlazorUI` provides the MudBlazor implementation of ABP's UI service abstractions, so code written against `IUiMessageService` / `IUiNotificationService` / `IUiPageProgressService` runs unchanged in a MudBlazor project. Key building blocks: |
||||
|
|
||||
|
- `MudBlazorUiMessageService` — `Info` / `Success` / `Warn` / `Error` / `Confirm` rendered through `MudDialog` |
||||
|
- `MudBlazorUiNotificationService` — toast notifications via `MudSnackbar` |
||||
|
- `MudBlazorUiPageProgressService` — top progress bar via `MudProgressLinear` |
||||
|
- `AbpMudCrudPageBase<...>` — the MudBlazor counterpart to Blazorise's `AbpCrudPageBase` |
||||
|
- `AbpMudExtensibleDataGrid<TItem>` — a `MudDataGrid` wrapper integrated with Object Extension and time-zone conversion |
||||
|
- `UiMessageAlert` / `UiNotificationAlert` / `PageAlert` — page-level alert and notification containers |
||||
|
|
||||
|
Theming is split across three hosts — Blazor Server, WebAssembly, and MauiBlazor — each shipped with matching bundling contributors and modules that wire MudBlazor's JS and CSS into the ABP bundle system. |
||||
|
|
||||
|
### Three themes |
||||
|
|
||||
|
- **LeptonX MudBlazor** |
||||
|
- **LeptonX Lite MudBlazor** |
||||
|
- **Basic Theme MudBlazor** |
||||
|
|
||||
|
Each theme's layout adopts MudBlazor components such as `MudAppBar`, `MudDrawer`, `MudNavLink`, and `MudMenu`, while keeping the theme's original color palette, dim / light / system modes, and RTL support. |
||||
|
|
||||
|
 |
||||
|
*LeptonX rendered with MudBlazor* |
||||
|
|
||||
|
 |
||||
|
*LeptonX Lite rendered with MudBlazor* |
||||
|
|
||||
|
 |
||||
|
*Basic Theme rendered with MudBlazor* |
||||
|
|
||||
|
The LeptonX themes reuse the same `lpx-*` CSS classes across both UI libraries, so the overall information architecture, page layout, and theme experience stay consistent with the Blazorise version. Individual controls follow each UI library's own conventions. |
||||
|
|
||||
|
 |
||||
|
*The same LeptonX theme — MudBlazor on the left, Blazorise on the right* |
||||
|
|
||||
|
### Module coverage |
||||
|
|
||||
|
Open-source modules in `abpframework/abp` that ship with a MudBlazor implementation: |
||||
|
|
||||
|
- **Account** |
||||
|
- **Identity** — Users / Roles / OUs / ClaimTypes |
||||
|
- **Permission Management** — parent/child permissions with `MudTreeView` and tri-state `MudCheckBox` |
||||
|
- **Setting Management** — grouped settings with `MudTabs` (including theme switching) |
||||
|
- **Tenant Management** |
||||
|
- **Feature Management** |
||||
|
|
||||
|
Additional MudBlazor implementations available on the Pro side, for example: |
||||
|
|
||||
|
- **Identity Pro** — extra management around Sessions, SecurityLogs, and more |
||||
|
- **OpenIddict Pro** — Application / Scope management |
||||
|
- **Saas** — Tenant / Edition management with a connection-string dialog |
||||
|
- **Audit Logging** — `MudDataGrid` with a detail `MudDialog` |
||||
|
- **Language Management** / **Text Template Management** |
||||
|
- **File Management** / **Chat** / **CMS Kit Pro** |
||||
|
- **AI Management** / **GDPR** / **Payment**, and more |
||||
|
|
||||
|
 |
||||
|
*Identity user management built on `AbpMudExtensibleDataGrid`* |
||||
|
|
||||
|
 |
||||
|
*Permission Management uses `MudTreeView` and tri-state `MudCheckBox` for parent/child permissions* |
||||
|
|
||||
|
 |
||||
|
*Saas module: tenant list with a "New tenant" dialog that includes connection-string editing* |
||||
|
|
||||
|
### Component mapping at a glance |
||||
|
|
||||
|
If you already know Blazorise, here are the most common mappings: |
||||
|
|
||||
|
| Blazorise | MudBlazor | |
||||
|
|-----------|-----------| |
||||
|
| `TextEdit @bind-Text` | `MudTextField @bind-Value` | |
||||
|
| `Select / SelectItem` | `MudSelect / MudSelectItem` | |
||||
|
| `DataGrid` | `MudDataGrid` (wrapped by ABP as `AbpMudExtensibleDataGrid`) | |
||||
|
| `Modal Show()/Hide()` | `MudDialog ShowAsync()/CloseAsync()` | |
||||
|
| `Validations` | `MudForm` + built-in validation | |
||||
|
| `Row / Column ColumnSize.Is6` | `MudGrid / MudItem xs="12" sm="6"` | |
||||
|
| Bootstrap Icons `bi-*` | `Icons.Material.Filled.*` | |
||||
|
|
||||
|
A full mapping table with razor examples lives in the [ABP Blazor UI documentation](https://abp.io/docs/latest/framework/ui/blazor). |
||||
|
|
||||
|
### Supported Blazor project types |
||||
|
|
||||
|
ABP's MudBlazor support covers the Blazor project types you can create and run directly: |
||||
|
|
||||
|
- **Blazor Server** (`-u blazor-server`) |
||||
|
- **Blazor WebAssembly** (`-u blazor`) |
||||
|
- **Blazor WebApp** (`-u blazor-webapp`, including InteractiveAuto) |
||||
|
|
||||
|
### ABP Suite |
||||
|
|
||||
|
ABP Suite detects the solution's UI library and generates the matching CRUD page automatically: |
||||
|
|
||||
|
```csharp |
||||
|
public partial class Books : AbpMudCrudPageBase<IBookAppService, BookDto, Guid, GetBookListInput, CreateUpdateBookDto> |
||||
|
{ |
||||
|
private MudDialog _createDialog; |
||||
|
private MudForm _createFormRef; |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
The razor templates also split by UI library — Blazorise uses `<DataGrid>` + `<Modal>` + `<Validations>`, MudBlazor uses `<MudDataGrid>` + `<MudDialog>` + `<MudForm>`. |
||||
|
|
||||
|
## Choosing between Blazorise and MudBlazor |
||||
|
|
||||
|
Both UI libraries are production-ready and neither is strictly better. Common factors: |
||||
|
|
||||
|
- **Familiarity** — teams comfortable with Bootstrap tend to stay on Blazorise; teams comfortable with Material Design pick MudBlazor |
||||
|
- **Design system** — Bootstrap-style products lean toward Blazorise, Material Design products lean toward MudBlazor |
||||
|
- **Ecosystem** — existing Bootstrap component libraries or design assets fit Blazorise; Material Design third-party components fit MudBlazor more naturally |
||||
|
- **Existing projects** — keep maintaining live Blazorise projects as they are; if you want to try MudBlazor, start a new project with it |
||||
|
- **Licensing** — the two UI libraries have different license terms, so check each library's official license page before making a choice ([Blazorise](https://blazorise.com/license) / [MudBlazor](https://github.com/MudBlazor/MudBlazor/blob/dev/LICENSE)) |
||||
|
|
||||
|
Do not mix the two libraries within a single project — the choice is per solution, not per file. |
||||
|
|
||||
|
## Creating a MudBlazor project in ABP Studio |
||||
|
|
||||
|
### ABP Studio (recommended) |
||||
|
|
||||
|
Open ABP Studio → **New Solution** → pick a template → in the UI configuration step, select **Blazor UI library = MudBlazor**. Everything else works the same as a Blazorise project. After Build & Run you land on a MudBlazor-styled application. |
||||
|
|
||||
|
 |
||||
|
*New Solution wizard: pick MudBlazor for the Blazor UI library* |
||||
|
|
||||
|
 |
||||
|
*Studio Build & Run brings up a MudBlazor + LeptonX dashboard in the embedded browser* |
||||
|
|
||||
|
### CLI |
||||
|
|
||||
|
```bash |
||||
|
# Blazorise (default; --blazor-ui-library can be omitted) |
||||
|
abp new MyApp -u blazor |
||||
|
|
||||
|
# MudBlazor |
||||
|
abp new MyApp -u blazor --blazor-ui-library mudblazor |
||||
|
|
||||
|
# Tiered + WebApp + LeptonX + MudBlazor |
||||
|
abp new MyApp -t app --tiered -u blazor-webapp --blazor-ui-library mudblazor --theme leptonx |
||||
|
|
||||
|
# Microservice + MudBlazor + Blazor Server |
||||
|
abp new MyApp -t microservice -u blazor-server --blazor-ui-library mudblazor |
||||
|
|
||||
|
# Reusable Module + MudBlazor |
||||
|
abp new My.Module -t module -u blazor --blazor-ui-library mudblazor |
||||
|
``` |
||||
|
|
||||
|
Run `abp new --help` for the full option list. |
||||
|
|
||||
|
Suite-generated MudBlazor CRUD pages are covered in the **ABP Suite** section above. |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## Try it out |
||||
|
|
||||
|
```bash |
||||
|
abp new MyMudApp -u blazor-server --blazor-ui-library mudblazor --theme leptonx |
||||
|
``` |
||||
|
|
||||
|
Documentation: |
||||
|
|
||||
|
- [Forms & Validation (MudBlazor)](https://abp.io/docs/latest/framework/ui/blazor/forms-validation?BlazorUI=MudBlazor) |
||||
|
- [LeptonX with MudBlazor](https://abp.io/docs/latest/ui-themes/lepton-x/blazor) |
||||
|
- [Basic Theme MudBlazor variant](https://abp.io/docs/latest/framework/ui/blazor/basic-theme) |
||||
|
- [Page Header (MudBlazor)](https://abp.io/docs/latest/framework/ui/blazor/page-header) |
||||
|
|
||||
|
## FAQ |
||||
|
|
||||
|
**I'm already using Blazorise — will upgrading to 10.4 / 10.4.2 break my project?** |
||||
|
No. Blazorise stays the default, and package paths, type names, and namespaces are fully compatible. Follow the standard ABP upgrade flow. |
||||
|
|
||||
|
**Can I use Blazorise and MudBlazor in the same project?** |
||||
|
We don't recommend it. The UI library is a project-level choice — themes, bundling, and module dependencies all switch with it. Mixing both within a single solution leads to bundle conflicts, duplicated layouts, and similar issues. |
||||
|
|
||||
|
**What about my custom razor pages?** |
||||
|
Your custom Razor pages are tied to the UI library they were built with, so switching libraries means rewriting those pages using the component mapping above. Template-generated pages and module-provided pages don't need to be touched. |
||||
|
|
||||
|
## Wrapping up |
||||
|
|
||||
|
MudBlazor is now a first-class Blazor UI library in ABP. With 10.4.2 released, every related package, theme, template, Studio integration, and Suite generator is in place — you can try it out with a single `abp new` command. |
||||
|
|
||||
|
If you hit a bug, have a suggestion, or want a particular module's MudBlazor UX prioritized, let us know via [GitHub Issues](https://github.com/abpframework/abp/issues) or [abp.io support](https://abp.io/support). |
||||
|
|
||||
|
## References |
||||
|
|
||||
|
- [MudBlazor official site](https://mudblazor.com) |
||||
|
- [ABP Blazor UI documentation](https://abp.io/docs/latest/framework/ui/blazor) |
||||
|
- [ABP LeptonX theme](https://abp.io/themes/leptonx) |
||||
|
- [ABP Studio download](https://abp.io/studio) |
||||