diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index fa9194c962b8..21a623a9ef38 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -80,8 +80,8 @@ body:
id: bug-version
attributes:
label: Version (bug)
- description: With which version are you experiencing the issue? Note that v6 is no longer actively maintained and most bug fixes will be reserved for v7.
- placeholder: 7.x.x
+ description: With which version are you experiencing the issue?
+ placeholder: 8.x.x
validations:
required: true
- type: input
@@ -89,7 +89,7 @@ body:
attributes:
label: Version (working)
description: Did it work on a previous version? If so, which version?
- placeholder: 6.x.x
+ placeholder: 7.x.x
- type: dropdown
id: browsers
attributes:
diff --git a/README.md b/README.md
index dddbdc151e79..efd05175c38c 100644
--- a/README.md
+++ b/README.md
@@ -22,21 +22,21 @@
MudBlazor is an ambitious Material Design component framework for Blazor with an emphasis on ease of use and clear structure. It is perfect for .NET developers who want to rapidly build web applications without having to struggle with CSS and Javascript. MudBlazor, being written entirely in C#, empowers you to adapt, fix or extend the framework. There are plenty of examples in the documentation, which makes understanding and learning MudBlazor very easy.
-## Documentation & Demo
-- [MudBlazor.com](https://mudblazor.com)
-- [Try.MudBlazor.com](https://try.mudblazor.com/)
-
-## Why is MudBlazor so successful?
-- Clean and aesthetic graphic design based on Material Design.
-- Clear and easy to understand structure.
-- Good documentation with many examples and source snippets.
-- All components are written entirely in C#, no JavaScript allowed (except where absolutely necessary).
-- Users can make beautiful apps without needing CSS (but they can of course use CSS too).
-- No dependencies on other component libraries, 100% control over components and features.
-- Stability! We strive for a complete test coverage.
-- Releases often so developers can get their PRs and fixes in a timely fashion.
-
-## Prerequisites
+## ๐ Documentation & Demo
+- ๐ [MudBlazor.com](https://mudblazor.com) โ Full documentation
+- โก [Try.MudBlazor.com](https://try.mudblazor.com/) โ Interactive playground
+
+## ๐ Why is MudBlazor so successful?
+- Aesthetic design that follows Material Design principles.
+- Intuitive, consistent component structure.
+- Rich documentation with tons of examples and code snippets.
+- Fully written in C# with minimal JavaScript.
+- Build beautiful UIs without CSS (but fully customizable when needed).
+- No third-party component dependencies โ maximum flexibility.
+- Strive for stability with extensive test coverage.
+- Frequent releases so devs get their fixes and features fast.
+
+## โ๏ธ Prerequisites
| MudBlazor | .NET | Support |
| :--- | :---: | :---: |
| 1.x.x - 2.0.x | .NET 3.1 | Ended 03/2021 |
@@ -46,58 +46,62 @@ MudBlazor is an ambitious Material Design component framework for Blazor with an
| 8.x.x | [.NET 8](https://dotnet.microsoft.com/download/dotnet/8.0), [.NET 9](https://dotnet.microsoft.com/download/dotnet/9.0) | :heavy_check_mark: |
> [!TIP]
-> If you're updating to a newer version of MudBlazor, make sure to check out the [Migration Guide](https://github.com/MudBlazor/MudBlazor/blob/dev/MIGRATION.md) for detailed instructions on handling breaking changes and new features.
+> Upgrading? Check our [Migration Guide](https://github.com/MudBlazor/MudBlazor/blob/dev/MIGRATION.md) for help with breaking changes.
> [!WARNING]
> 1. Static rendering is not supported - [Learn more](https://learn.microsoft.com/aspnet/core/blazor/components/render-modes).
-> 2. We cannot guarantee compatibility with browsers no longer maintained by their publishers.
-For the best experience, use an up-to-date browser - See [Blazor supported platforms](https://learn.microsoft.com/aspnet/core/blazor/supported-platforms).
+> 2. Older browsers may not be supported. Use a modern, up-to-date browser - [Blazor supported platforms](https://learn.microsoft.com/aspnet/core/blazor/supported-platforms).
-## Stats
+## ๐ Repo Stats

-## Contributing
-๐ Thanks for wanting to contribute!
+## ๐ค Contributing
+Thanks for wanting to contribute! ๐
Contributions from the community are what makes MudBlazor successful.
-If you are familiar with technologies like C#, Blazor, JavaScript, or CSS, and wish to give something back, please consider submitting a pull request!
-We try to merge all non-breaking bugfixes and will deliberate the value of new features for the community.
-Please note there is no guarantee your PR will be merged, so if you want to be sure before investing the work, feel free to [contact the team](https://discord.gg/mudblazor) first.
+If you're comfortable with C#, Blazor, JavaScript, or CSS, we'd love your help!
+Whether it's fixing bugs, adding features, or improving documentation, every contribution counts.
-Check out the [contribution guidelines](/CONTRIBUTING.md) to understand our goals and learn more about the internals of the project.
+We aim to review and merge non-breaking pull requests quickly.
+For larger features or changes, feel free to chat with us [on Discord](https://discord.gg/mudblazor) first to get feedback before diving in.
-## Getting Started
-We have premade templates available at the [MudBlazor.Templates](https://github.com/mudblazor/Templates) repository.
+๐ Check out our [contribution guidelines](/CONTRIBUTING.md) to get started and learn more about how the project works.
-Full installation instructions can be found [on our website](https://mudblazor.com/getting-started/installation).
+## ๐ Getting Started
+We have ready-to-go templates at the [MudBlazor.Templates](https://github.com/mudblazor/Templates) repository, or follow the quick install guide to set things up manually:
-### Quick Installation Guide
-Install Package
+### ๐ ๏ธ Quick Install
+Install Package:
```
dotnet add package MudBlazor
```
-Add the following to `_Imports.razor`
+
+Add to `_Imports.razor`:
```razor
@using MudBlazor
```
-Add the following to the `MainLayout.razor` or `App.razor`
+
+Add to the `MainLayout.razor` or `App.razor`:
```razor
```
-Add the following to your HTML `head` section, it's either `index.html` or `_Layout.cshtml`/`_Host.cshtml`/`App.razor` depending on whether you're running WebAssembly or Server
+
+Add to your HTML `head` section:
```razor
```
-Next, add the following to the default Blazor script at the end of the `body`
+It's either `index.html` or `_Layout.cshtml`/`_Host.cshtml`/`App.razor` depending on whether you're running WebAssembly or Server.
+
+Next, add to the default Blazor script at the end of the `body`:
```razor
```
-Add the following to the relevant sections of `Program.cs`
+Add to the relevant sections of `Program.cs`:
```c#
using MudBlazor.Services;
```
@@ -105,7 +109,10 @@ using MudBlazor.Services;
builder.Services.AddMudServices();
```
-### Usage
+### ๐ Full Setup Guide
+For more details, see the [complete installation guide](https://mudblazor.com/getting-started/installation) on our website.
+
+### ๐ป Example Usage
```razor
MudBlazor is @Text
diff --git a/ROADMAP.md b/ROADMAP.md
index 341c1b968be1..2673dbe9e986 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -1,48 +1,44 @@
# MudBlazor Roadmap
-MudBlazor continues to thrive with millions of downloads on [NuGet](https://www.nuget.org/packages/MudBlazor/) and thousands of members on [Discord](https://discord.gg/mudblazor).
+MudBlazor continues to grow with millions of downloads on [NuGet](https://www.nuget.org/packages/MudBlazor/) and a thriving community on [Discord](https://discord.gg/mudblazor).
-With the recent release of v7, and now v8, we've made significant progress in ensuring the library remains healthy and robust.
-Not only have we introduced countless new features and bug fixes, but we've built a more stable foundation for future development, allowing us to continue moving the project forward to meet the needs of the community.
+With the release of v7 and now v8, we've introduced many new features, fixed long-standing issues, and built a stronger foundation for the future. The focus has been on stability, performance, and evolving with the needs of the community.
-## Migration
+## ๐ Migration
### .NET Lifecycle
-Builds are no longer provided for .NET 6 or .NET 7.
-This change aligns with Microsoft's [.NET support policies](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core) and lets us focus on providing the best support for newer editions.
+We no longer provide updates for .NET 6 or .NET 7.
+This change aligns with Microsoft's [.NET support policies](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core) and lets us focus on newer versions.
-Update your SDK to .NET 8 or .NET 9 to get the latest packages.
+To stay current, update your SDK to .NET 8 or .NET 9.
-### MudBlazor Lifecycle
+### MudBlazor Version Support
-**v8:**
-This is the current recommended version and all new features and development effort will be directed here.
+- **v8**: The current recommended version. All new features and improvements go here.
+- **v7**: We'll continue to accept bug fixes from the community, but no new features.
+- **v6**: Official support ended in January 2025. No further updates will be released.
-**v7:**
-We will continue to accept bugfixes from the community for v7 but no new features will be introduced and we won't accept any requests.
+### Migrating from Older Versions
-**v6:**
-Support for v6 ended 01/2025 and no new patches will be released.
+v7 introduced necessary breaking changes. v8 builds on that with an aim for smoother transitions.
-### Migrating from a Previous Version
+For help with upgrading, check out:
-The release of v7 addressed several long-standing needs for breaking changes and our goal for v8 is to build on that success while ensuring a smoother transition.
+- [v7 Migration Guide](https://github.com/MudBlazor/MudBlazor/issues/8447)
+- [v8 Migration Guide](https://github.com/MudBlazor/MudBlazor/issues/9953)
+- [Built-in Analyzer](https://mudblazor.com/features/analyzers) โ flags removed or renamed parameters
-For help with migrating to a new version, please refer to the [v7.0.0 Migration Guide](https://github.com/MudBlazor/MudBlazor/issues/8447) or [v8.0.0 Migration Guide](https://github.com/MudBlazor/MudBlazor/issues/9953).
-In addition we've created a [built-in analyzer](https://mudblazor.com/features/analyzers) that identifies parameters that have been removed or renamed.
+## ๐ฎ Looking Ahead
-## Looking Ahead
+We're committed to improving MudBlazor, but since it's a community-driven project, we can't promise exact release timelines or specific features.
-We are passionate about improving the library but can't make firm promises about release timelines or specific features as the MudBlazor team is made up of volunteers who contribute to the project in their personal time.
+Our focus is to keep the library stable, performant, and modern. The pace of development depends on volunteer availability, and we appreciate your patience and support as we continue to evolve.
-Our goal is to keep MudBlazor stable, performant, and evolving with thoughtful enhancements, but the pace of development depends on the availability of contributors.
-We appreciate your support as we continue to work on keeping MudBlazor the premiere UI library for Blazor.
+## ๐ค Get Involved
-## Get Involved
+MudBlazor wouldn't be what it is without our amazing community.
+Whether you work with C#, Blazor, JavaScript, CSS, testing, or docs, your contributions are always welcome!
-MudBlazor thrives thanks to our amazing community. Whether you specialize in C#, Blazor, JavaScript, CSS, documentation, testing, or design, your help is always welcome.
-
-If youโre interested in contributing, please check out [our contribution guidelines](https://github.com/MudBlazor/MudBlazor/blob/dev/CONTRIBUTING.md) to get started.
-
-You can also open an issue, start a discussion, or tag a member of the team in relevant GitHub issues to collaborate with us.
+Read our [contribution guide](https://github.com/MudBlazor/MudBlazor/blob/dev/CONTRIBUTING.md) to get started.
+Submit a pull request, open an issue, start a discussion, or tag us on GitHub to collaborate, or hop into [Discord](https://discord.gg/mudblazor) and say hi!
diff --git a/src/MudBlazor.Docs/Pages/Components/Autocomplete/Examples/AutocompletePlaygroundExample.razor b/src/MudBlazor.Docs/Pages/Components/Autocomplete/Examples/AutocompletePlaygroundExample.razor
index e6b687cf8308..c4fcc1d54f16 100644
--- a/src/MudBlazor.Docs/Pages/Components/Autocomplete/Examples/AutocompletePlaygroundExample.razor
+++ b/src/MudBlazor.Docs/Pages/Components/Autocomplete/Examples/AutocompletePlaygroundExample.razor
@@ -16,7 +16,8 @@
Placeholder="@(_placeholder ? "Placeholder" : null)"
HelperText="@(_helperText ? "Helper Text" : null)"
HelperTextOnFocus="_helperTextOnFocus"
- Clearable="_clearable" />
+ Clearable="_clearable"
+ Modal="_modal" />
}
@@ -35,19 +36,21 @@
+
@code {
- string _value;
- Margin _margin;
- bool _dense;
- bool _disabled;
- bool _readonly;
- bool _placeholder;
- bool _helperText;
- bool _helperTextOnFocus;
- bool _clearable;
+ private string _value;
+ private Margin _margin;
+ private bool _dense;
+ private bool _disabled;
+ private bool _readonly;
+ private bool _placeholder;
+ private bool _helperText;
+ private bool _helperTextOnFocus;
+ private bool _clearable;
+ private bool _modal = true;
private string[] _states =
{
@@ -70,7 +73,9 @@
// if text is null or empty, show complete list
if (string.IsNullOrEmpty(value))
+ {
return _states;
+ }
return _states.Where(x => x.Contains(value, StringComparison.InvariantCultureIgnoreCase));
}
diff --git a/src/MudBlazor.Docs/Pages/Components/ChatBubble/ChatPage.razor b/src/MudBlazor.Docs/Pages/Components/ChatBubble/ChatPage.razor
index 23e4187e5993..1ef9addb3203 100644
--- a/src/MudBlazor.Docs/Pages/Components/ChatBubble/ChatPage.razor
+++ b/src/MudBlazor.Docs/Pages/Components/ChatBubble/ChatPage.razor
@@ -1,20 +1,8 @@
-@page "/components/chat"
+๏ปฟ@page "/components/chat"
@page "/components/MudChat"
-
-
-
-
- Warning: This component is currently under development.
-
-
- Breaking changes such as updates to the API, look and feel, or CSS classes, may occur even in minor patch releases.
- Please use it only if you are prepared to adapt your code accordingly and provide feedback or contribute code.
-
-
-
-
+
diff --git a/src/MudBlazor.Docs/Pages/Components/ColorPicker/ColorPickerPage.razor b/src/MudBlazor.Docs/Pages/Components/ColorPicker/ColorPickerPage.razor
index b08640e32634..cfe17c6497d7 100644
--- a/src/MudBlazor.Docs/Pages/Components/ColorPicker/ColorPickerPage.razor
+++ b/src/MudBlazor.Docs/Pages/Components/ColorPicker/ColorPickerPage.razor
@@ -85,6 +85,18 @@
+
+
+
+ By default, the color picker is modal, preventing interaction with other elements while it is open.
+ To allow interactions with other elements, set Modal="false".
+
+
+
+
+
+
+
@@ -124,4 +136,4 @@
-
\ No newline at end of file
+
diff --git a/src/MudBlazor.Docs/Pages/Components/ColorPicker/Examples/ColorPickerInlineModelessExample.razor b/src/MudBlazor.Docs/Pages/Components/ColorPicker/Examples/ColorPickerInlineModelessExample.razor
new file mode 100644
index 000000000000..2a1f90c07bab
--- /dev/null
+++ b/src/MudBlazor.Docs/Pages/Components/ColorPicker/Examples/ColorPickerInlineModelessExample.razor
@@ -0,0 +1,3 @@
+๏ปฟ@namespace MudBlazor.Docs.Examples
+
+
diff --git a/src/MudBlazor.Docs/Pages/Components/DataGrid/DataGridPage.razor b/src/MudBlazor.Docs/Pages/Components/DataGrid/DataGridPage.razor
index 9125f5c337cf..39604c05a081 100644
--- a/src/MudBlazor.Docs/Pages/Components/DataGrid/DataGridPage.razor
+++ b/src/MudBlazor.Docs/Pages/Components/DataGrid/DataGridPage.razor
@@ -96,17 +96,22 @@
- The <MudDataGrid> allows you to group data by column. Setting the Grouping property
- to true will turn on grouping which will add a menu item in the column options to toggle grouping of that column.
- To disable grouping on a column, set its Groupable property to false.
+ The <MudDataGrid> allows you to group data by columns. Setting the Grouping property
+ to true enables grouping, adding a menu item in the column options to toggle grouping for that column.
+ To disable grouping for a specific column, set its Groupable property to false.
+ You can group multiple Column elements at the same time. Options for configuring column grouping include the two-way bindable
+ properties Grouping, GroupExpanded, and GroupByOrder.
+
+ The GroupBy property allows you to define a custom function for grouping a column.
-
-
+
+
+
@@ -182,7 +187,8 @@
The <MudDataGrid> allows you to create hierarchical layouts. To do that the HierarchyColumn has to be added in the Columns definitions.
- You can customize the icon to toggle the RowDetail, disable the toggle button and also initially expand the RowDetail.
+ You can customize the icon to toggle the RowDetail, disable the toggle button and also initially expand the RowDetail. In addition most customization options are available
+ including EnableHeaderToggle that puts a Toggle Icon in the header row to Expand/Collapse all.
diff --git a/src/MudBlazor.Docs/Pages/Components/DataGrid/Examples/DataGridDetailRowExample.razor b/src/MudBlazor.Docs/Pages/Components/DataGrid/Examples/DataGridDetailRowExample.razor
index c957d492fe1e..af055bf87817 100644
--- a/src/MudBlazor.Docs/Pages/Components/DataGrid/Examples/DataGridDetailRowExample.razor
+++ b/src/MudBlazor.Docs/Pages/Components/DataGrid/Examples/DataGridDetailRowExample.razor
@@ -3,10 +3,9 @@
@namespace MudBlazor.Docs.Examples
@inject HttpClient httpClient
-
+
-
+
@@ -33,16 +32,32 @@
@@ -351,4 +351,4 @@
public string CSSVariable { get; set; }
public bool IsHeader { get; set; }
}
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.Docs/Pages/Customization/Globals/Examples/ButtonGlobalsExample.razor b/src/MudBlazor.Docs/Pages/Customization/Globals/Examples/ButtonGlobalsExample.razor
deleted file mode 100644
index 3bdd94bcd4c6..000000000000
--- a/src/MudBlazor.Docs/Pages/Customization/Globals/Examples/ButtonGlobalsExample.razor
+++ /dev/null
@@ -1,3 +0,0 @@
-๏ปฟ@namespace MudBlazor.Docs.Examples
-
-Button with new defaults
diff --git a/src/MudBlazor.Docs/Pages/Customization/Globals/Examples/ButtonGlobalsStartupExample.razor b/src/MudBlazor.Docs/Pages/Customization/Globals/Examples/ButtonGlobalsStartupExample.razor
deleted file mode 100644
index 88ffbfcea811..000000000000
--- a/src/MudBlazor.Docs/Pages/Customization/Globals/Examples/ButtonGlobalsStartupExample.razor
+++ /dev/null
@@ -1,9 +0,0 @@
-๏ปฟ@namespace MudBlazor.Docs.Examples
-
-// Add MudBlazor services
-Services.AddMudServices();
-
-// Change the default appearance of all MudButton components
-MudGlobal.ButtonDefaults.Color = Color.Secondary;
-MudGlobal.ButtonDefaults.Size = Size.Large;
-MudGlobal.ButtonDefaults.Variant = Variant.Filled;
diff --git a/src/MudBlazor.Docs/Pages/Customization/Globals/Globals.razor b/src/MudBlazor.Docs/Pages/Customization/Globals/Globals.razor
index 303428b369e9..db251c8e3faa 100644
--- a/src/MudBlazor.Docs/Pages/Customization/Globals/Globals.razor
+++ b/src/MudBlazor.Docs/Pages/Customization/Globals/Globals.razor
@@ -1,15 +1,14 @@
๏ปฟ@page "/customization/globals"
-
+
-
- Warning: This feature is currently under development.
-
-
- Breaking changes to the API may occur between releases.
- Please only use MudGlobal if you are prepared to adapt your code and provide feedback or contribute code .
+
+ EXPERIMENTAL:
+ This feature is under development and may not be ready for general use.
+ Breaking changes will occur between releases.
+ Use only if you are prepared to adapt your code and provide feedback or contribute to its development.
@@ -18,29 +17,26 @@
- The static class contains default settings which can override the default settings for MudBlazor components.
-
-
- The following example changes all components to use a large size, secondary color, and filled variant as their defaults.
-
-
- Note: Defaults should be set when your application initializes, such as when adding MudBlazor services.
+ You can find default setting overrides of some MudBlazor features in the static class.
+ These defaults should be set when your application initializes, such as when adding MudBlazor services.
+ If they are set after the app has started, they may not take effect until the next page load, or may not take effect at all.
+
+
+ Our theming system is recommended for changing the looks and style of your application.
+ To find more ways to customize your app, refer to our other documentation in the sidebar.
+
-
-
-
- A global exception handler is available via the MudGlobal.UnhandledExceptionHandler property.
+ You can handle MudBlazor component exceptions using MudGlobal.UnhandledExceptionHandler.
-
diff --git a/src/MudBlazor.Docs/Shared/Appbar.razor b/src/MudBlazor.Docs/Shared/Appbar.razor
index cb4462e9f895..a0638b45cbd8 100644
--- a/src/MudBlazor.Docs/Shared/Appbar.razor
+++ b/src/MudBlazor.Docs/Shared/Appbar.razor
@@ -92,7 +92,8 @@
+ ValueChanged="OnSearchResult" OpenChanged="o => _searchDialogAutocompleteOpen = o" ReturnedItemsCountChanged="c => _searchDialogReturnedItemsCount = c"
+ Modal="false">
@result.Title@result.SubTitle
diff --git a/src/MudBlazor.UnitTests.Docs/Generated/ApiDocsTests.cs b/src/MudBlazor.UnitTests.Docs/Generated/ApiDocsTests.cs
index 5ba1f3c0e353..ab78863413a4 100644
--- a/src/MudBlazor.UnitTests.Docs/Generated/ApiDocsTests.cs
+++ b/src/MudBlazor.UnitTests.Docs/Generated/ApiDocsTests.cs
@@ -38,6 +38,7 @@ public void Setup()
ctx.Services.AddSingleton();
ctx.Services.AddTransient();
ctx.Services.AddScoped();
+ ctx.Services.AddScoped();
ctx.Services.AddTransient();
ctx.Services.AddTransient();
ctx.Services.AddTransient();
diff --git a/src/MudBlazor.UnitTests.Docs/Generated/ExampleDocsTests.cs b/src/MudBlazor.UnitTests.Docs/Generated/ExampleDocsTests.cs
index 81a85deb4698..b5fafbb7c3c9 100644
--- a/src/MudBlazor.UnitTests.Docs/Generated/ExampleDocsTests.cs
+++ b/src/MudBlazor.UnitTests.Docs/Generated/ExampleDocsTests.cs
@@ -35,6 +35,7 @@ public void Setup()
ctx.Services.AddTransient();
ctx.Services.AddSingleton();
ctx.Services.AddScoped();
+ ctx.Services.AddScoped();
ctx.Services.AddTransient();
ctx.Services.AddTransient();
ctx.Services.AddTransient();
diff --git a/src/MudBlazor.UnitTests.Shared/Mocks/MockPointerEventsNoneService.cs b/src/MudBlazor.UnitTests.Shared/Mocks/MockPointerEventsNoneService.cs
new file mode 100644
index 000000000000..ffff14be9ee9
--- /dev/null
+++ b/src/MudBlazor.UnitTests.Shared/Mocks/MockPointerEventsNoneService.cs
@@ -0,0 +1,20 @@
+๏ปฟ// Copyright (c) MudBlazor 2021
+// MudBlazor licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace MudBlazor.UnitTests.Shared.Mocks;
+
+#nullable enable
+
+public class MockPointerEventsNoneService : IPointerEventsNoneService
+{
+ public ValueTask DisposeAsync() => ValueTask.CompletedTask;
+
+ public Task SubscribeAsync(IPointerEventsNoneObserver observer, PointerEventsNoneOptions options) => Task.CompletedTask;
+
+ public Task SubscribeAsync(string elementId, PointerEventsNoneOptions options, IPointerDownObserver? pointerDown = null, IPointerUpObserver? pointerUp = null) => Task.CompletedTask;
+
+ public Task UnsubscribeAsync(IPointerEventsNoneObserver observer) => Task.CompletedTask;
+
+ public Task UnsubscribeAsync(string elementId) => Task.CompletedTask;
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridColumnGroupingTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridColumnGroupingTest.razor
index 4a36fae30175..4e6ba3996f66 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridColumnGroupingTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridColumnGroupingTest.razor
@@ -1,7 +1,7 @@
๏ปฟ
-
+
@@ -17,6 +17,8 @@
? "(None)" // Customize group name for null values otherwise would be empty group name
: x.Profession;
+ public bool IsNameGrouped { get; private set; } = true;
+
public bool IsGenderGrouped { get; private set; }
public bool IsAgeGrouped { get; private set; }
@@ -31,11 +33,29 @@
new("Alice", 32, "Female", "Cook")
];
- private void GroupByGender(MouseEventArgs args) => IsGenderGrouped = true;
-
- private void GroupByAge(MouseEventArgs args) => IsAgeGrouped = true;
-
- private void GroupByProfession(MouseEventArgs args) => IsProfessionGrouped = true;
+ private void GroupByGender(MouseEventArgs args)
+ {
+ IsNameGrouped = false;
+ IsProfessionGrouped = false;
+ IsAgeGrouped = false;
+ IsGenderGrouped = true;
+ }
+
+ private void GroupByAge(MouseEventArgs args)
+ {
+ IsNameGrouped = false;
+ IsProfessionGrouped = false;
+ IsAgeGrouped = true;
+ IsGenderGrouped = false;
+ }
+
+ private void GroupByProfession(MouseEventArgs args)
+ {
+ IsNameGrouped = false;
+ IsProfessionGrouped = true;
+ IsAgeGrouped = false;
+ IsGenderGrouped = false;
+ }
public record Model(string Name, int Age, string Gender, string? Profession);
}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupCollapseAllTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupCollapseAllTest.razor
index 41ec96f0b0a5..21110d147005 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupCollapseAllTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupCollapseAllTest.razor
@@ -1,4 +1,4 @@
- new TestObject(x.Name, x.Category)).ToList();
}
- public void ExpandAllGroups()
+ public Task ExpandAllGroups()
{
- _dataGrid.ExpandAllGroups();
+ return _dataGrid.ExpandAllGroupsAsync();
}
- public void CollapseAllGroups()
+ public Task CollapseAllGroups()
{
- _dataGrid.CollapseAllGroups();
+ return _dataGrid.CollapseAllGroupsAsync();
}
public record TestObject(string Name, string Category);
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandAllCollapseAllTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandAllCollapseAllTest.razor
index ef9f81346164..d91faf9d49d3 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandAllCollapseAllTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandAllCollapseAllTest.razor
@@ -1,4 +1,4 @@
- new Element(x.Group, x.Position, x.Name)).ToList();
}
- public void ExpandAllGroups()
+ public Task ExpandAllGroups()
{
- _dataGrid.ExpandAllGroups();
+ return _dataGrid.ExpandAllGroupsAsync();
}
- public void CollapseAllGroups()
+ public Task CollapseAllGroups()
{
- _dataGrid.CollapseAllGroups();
+ return _dataGrid.CollapseAllGroupsAsync();
}
public class Element(string group, int position, string name)
@@ -139,4 +139,4 @@
public string Group { get; set; } = group;
}
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedAsyncTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedAsyncTest.razor
index 375a8c413972..90644b3ce048 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedAsyncTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedAsyncTest.razor
@@ -1,4 +1,4 @@
-Fruits
@@ -39,15 +39,15 @@
_fruits.Add(new Fruit("Banana", 5, "Musa"));
}
- public void ExpandAllGroups()
+ public Task ExpandAllGroups()
{
- _dataGrid.ExpandAllGroups();
+ return _dataGrid.ExpandAllGroupsAsync();
}
- public void CollapseAllGroups()
+ public Task CollapseAllGroups()
{
- _dataGrid.CollapseAllGroups();
+ return _dataGrid.CollapseAllGroupsAsync();
}
public record Fruit(string Name, int Count, string Category);
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseAsyncTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseAsyncTest.razor
index 8aab110089a7..f0d16995aaac 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseAsyncTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseAsyncTest.razor
@@ -40,15 +40,15 @@
_fruits.Add(new Fruit("Banana", 5, "Musa"));
}
- public void ExpandAllGroups()
+ public Task ExpandAllGroups()
{
- _dataGrid.ExpandAllGroups();
+ return _dataGrid.ExpandAllGroupsAsync();
}
- public void CollapseAllGroups()
+ public Task CollapseAllGroups()
{
- _dataGrid.CollapseAllGroups();
+ return _dataGrid.CollapseAllGroupsAsync();
}
public record Fruit(string Name, int Count, string Category);
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseServerDataTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseServerDataTest.razor
index 196ca80fc9d6..aa7e4e2bd9e2 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseServerDataTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseServerDataTest.razor
@@ -46,15 +46,15 @@
_fruits.Add(new Fruit("Banana", 5, "Musa"));
}
- public void ExpandAllGroups()
+ public Task ExpandAllGroups()
{
- _dataGrid.ExpandAllGroups();
+ return _dataGrid.ExpandAllGroupsAsync();
}
- public void CollapseAllGroups()
+ public Task CollapseAllGroups()
{
- _dataGrid.CollapseAllGroups();
+ return _dataGrid.CollapseAllGroupsAsync();
}
public record Fruit(string Name, int Count, string Category);
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseTest.razor
index cd7ed6c7d192..0e6e447c0638 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedFalseTest.razor
@@ -37,15 +37,15 @@
_fruits.Add(new Fruit("Banana", 5, "Musa"));
}
- public void ExpandAllGroups()
+ public Task ExpandAllGroups()
{
- _dataGrid.ExpandAllGroups();
+ return _dataGrid.ExpandAllGroupsAsync();
}
- public void CollapseAllGroups()
+ public Task CollapseAllGroups()
{
- _dataGrid.CollapseAllGroups();
+ return _dataGrid.CollapseAllGroupsAsync();
}
public record Fruit(string Name, int Count, string Category);
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedServerDataTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedServerDataTest.razor
index 0a251fea0714..a55530f6412e 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedServerDataTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedServerDataTest.razor
@@ -1,4 +1,4 @@
-Fruits
@@ -48,15 +48,15 @@
_fruits.Add(new Fruit("Banana", 5, "Musa"));
}
- public void ExpandAllGroups()
+ public Task ExpandAllGroups()
{
- _dataGrid.ExpandAllGroups();
+ return _dataGrid.ExpandAllGroupsAsync();
}
- public void CollapseAllGroups()
+ public Task CollapseAllGroups()
{
- _dataGrid.CollapseAllGroups();
+ return _dataGrid.CollapseAllGroupsAsync();
}
public record Fruit(string Name, int Count, string Category);
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedTest.razor
index 24a404458fbb..e96e1dfbd56b 100644
--- a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedTest.razor
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupExpandedTest.razor
@@ -1,4 +1,4 @@
-Fruits
@@ -38,14 +38,14 @@ GroupExpanded="true" RowContextMenuClick="@OnRowContextMenuClick">
_fruits.Add(new Fruit("Banana", 5, "Musa"));
}
- public void ExpandAllGroups()
+ public Task ExpandAllGroups()
{
- _dataGrid.ExpandAllGroups();
+ return _dataGrid.ExpandAllGroupsAsync();
}
- public void CollapseAllGroups()
+ public Task CollapseAllGroups()
{
- _dataGrid.CollapseAllGroups();
+ return _dataGrid.CollapseAllGroupsAsync();
}
private void OnRowContextMenuClick(DataGridRowClickEventArgs args)
@@ -61,4 +61,4 @@ GroupExpanded="true" RowContextMenuClick="@OnRowContextMenuClick">
public string Category { get; set; } = category;
}
-}
\ No newline at end of file
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupingMultiLevelTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupingMultiLevelTest.razor
new file mode 100644
index 000000000000..eb88375c9738
--- /dev/null
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/DataGrid/DataGridGroupingMultiLevelTest.razor
@@ -0,0 +1,392 @@
+๏ปฟ@using MudBlazor.Utilities
+
+
+
+ US States Information2025
+
+ _dataGrid.ReloadServerData())"
+ DebounceInterval="100" Variant="Variant.Outlined" Clearable />
+
+
+
+
+
+
+
+ @if (_customizeGroupTemplate)
+ {
+ var color = context.Grouping.Key?.ToString() switch
+ {
+ "Healthcare" => Color.Primary,
+ "Tech" => Color.Secondary,
+ "Tourism" => Color.Info,
+ _ => Color.Dark
+ };
+
+
+ @context.Grouping.Key
+
+ @context.Grouping.Count() states
+
+
+
+
+
+
+
+@code {
+ public static string __description__ = "4 menu edge cases for visual testing, initial load, in appbar, nested, and in dialog.";
+ private readonly string[] _menuList = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
+ private bool _visible;
+}
diff --git a/src/MudBlazor.UnitTests.Viewer/TestComponents/Popover/PopoverFlipDirectionTest.razor b/src/MudBlazor.UnitTests.Viewer/TestComponents/Popover/PopoverFlipDirectionTest.razor
new file mode 100644
index 000000000000..d4efc91780ba
--- /dev/null
+++ b/src/MudBlazor.UnitTests.Viewer/TestComponents/Popover/PopoverFlipDirectionTest.razor
@@ -0,0 +1,115 @@
+๏ปฟ
+
+ @(_expanded ? "Collapse" : "Expand")
+ @(_expanded ? "Collapse" : "Expand") for 5 s
+ Expand list in 5 s
+
+
+
+
+
+
+ Top Left
+ Top Center
+ Top Right
+ Bottom Left
+ Bottom Center
+ Bottom Right
+ Center Left
+ Center Center
+ Center Right
+
+
+ Top Left
+ Top Center
+ Top Right
+ Bottom Left
+ Bottom Center
+ Bottom Right
+ Center Left
+ Center Center
+ Center Right
+
+