diff --git a/examples/Demo/Shared/Pages/Grid/Examples/GridDefault.razor b/examples/Demo/Shared/Pages/Grid/Examples/GridDefault.razor
index fc7ae8c7de..6db6b2fa8f 100644
--- a/examples/Demo/Shared/Pages/Grid/Examples/GridDefault.razor
+++ b/examples/Demo/Shared/Pages/Grid/Examples/GridDefault.razor
@@ -60,7 +60,6 @@
void OnBreakpointEnterHandler(GridItemSize size)
{
- Console.WriteLine($"Page Size: {size}");
DemoLogger.WriteLine($"Page Size: {size}");
}
}
diff --git a/examples/Demo/Shared/Pages/Lab/IssueTester.razor b/examples/Demo/Shared/Pages/Lab/IssueTester.razor
index bcdacb427a..5f282702bb 100644
--- a/examples/Demo/Shared/Pages/Lab/IssueTester.razor
+++ b/examples/Demo/Shared/Pages/Lab/IssueTester.razor
@@ -1,2 +1 @@
-@page "/issue-tester"
-
+
\ No newline at end of file
diff --git a/examples/Demo/Shared/Pages/Lab/IssueTesterPage.razor b/examples/Demo/Shared/Pages/Lab/IssueTesterPage.razor
new file mode 100644
index 0000000000..47408eb50d
--- /dev/null
+++ b/examples/Demo/Shared/Pages/Lab/IssueTesterPage.razor
@@ -0,0 +1,11 @@
+@page "/issue-tester"
+@App.PageTitle("Lab Overview")
+
+Issue Tester
+
+
+
+
+@code {
+
+}
diff --git a/examples/Demo/Shared/Pages/Lab/LabOverviewPage.razor b/examples/Demo/Shared/Pages/Lab/LabOverviewPage.razor
index 3f0436ecb2..c4d0c35fe8 100644
--- a/examples/Demo/Shared/Pages/Lab/LabOverviewPage.razor
+++ b/examples/Demo/Shared/Pages/Lab/LabOverviewPage.razor
@@ -10,7 +10,7 @@
them to your project in an easy way. Some might even end up in the trashcan.
- As these components are not part of the official library, they are not included in the NuGet package. Also, please note that we only
+ As these components are not part of the official library, they are not included in the NuGet package. Same as with the rest of the library, we only
offer support for these specific components through the GitHub repository on a best effort base.
We hope you will help us test-drive the components, both here in the demo environment but also in your own projects, and give us
@@ -34,14 +34,13 @@
- MarkdownSection depends on external package
Markdig
. We do not intend to add components to the library that have external dependencies
-
- TableOfContents needs to be refreshed if other components (like for example a
MarkdownSection
) add headings into the DOM. This is possible
- but requires a fair ammount of steps we can not automate. We thefore choose to make a sample implementation available in the lab.
+ TableOfContents needs to be refreshed if other components (like for example a MarkdownSection
) add headings into the DOM. This is
+ possible but requires a fair ammount of steps we can not automate. We therefore choose to make a sample implementation available in the lab.
The TableOfContents page explains and shows the steps needed to make this work.
-
@code {
[Parameter]
diff --git a/examples/Demo/Shared/Pages/TemplatesPage.razor b/examples/Demo/Shared/Pages/TemplatesPage.razor
index 805a549a11..4739c6622e 100644
--- a/examples/Demo/Shared/Pages/TemplatesPage.razor
+++ b/examples/Demo/Shared/Pages/TemplatesPage.razor
@@ -35,7 +35,7 @@
IMPORTANT!!
-Just as with the standard Blazor Web App template, Blazor will use SSR by default. If you want to have interactive components, make sure you add a rendermode to the app, page or component.!
+Just as with the standard Blazor Web App template, Blazor will use SSR by default. If you want to have interactive components, make sure you add a rendermode to the app, page or component!
Installation
diff --git a/examples/Demo/Shared/ReflectionExtensions.cs b/examples/Demo/Shared/ReflectionExtensions.cs
index 1896bde9a4..2885d1c3ff 100644
--- a/examples/Demo/Shared/ReflectionExtensions.cs
+++ b/examples/Demo/Shared/ReflectionExtensions.cs
@@ -181,9 +181,12 @@ public static string ToTypeNameString(this ParameterInfo parameterInfo, Func, string> typeNameConverter = null,
bool invokeTypeNameConverterForGenericType = false)
{
+ bool isNullableType = !methodInfo.ReturnType.IsValueType
+ && (new NullabilityInfoContext().Create(methodInfo.ReturnParameter).ReadState is NullabilityState.Nullable);
+
return methodInfo.ReturnType.ToNameStringWithValueTupleNames(
methodInfo.ReturnParameter?.GetCustomAttribute()?.TransformNames, typeNameConverter,
- invokeTypeNameConverterForGenericType);
+ invokeTypeNameConverterForGenericType) + (isNullableType ? "?" : "");
}
///
@@ -206,9 +209,12 @@ public static string ToTypeNameString(this MethodInfo methodInfo, Func, string> typeNameConverter = null,
bool invokeTypeNameConverterForGenericType = false)
{
+ bool isNullableType = !propertyInfo.PropertyType.IsValueType
+ && (new NullabilityInfoContext().Create(propertyInfo).WriteState is NullabilityState.Nullable);
+
return propertyInfo.PropertyType.ToNameStringWithValueTupleNames(
propertyInfo.GetCustomAttribute()?.TransformNames, typeNameConverter,
- invokeTypeNameConverterForGenericType);
+ invokeTypeNameConverterForGenericType) + (isNullableType ? "?" : "");
}
///
diff --git a/examples/Demo/Shared/Shared/DemoNavProvider.cs b/examples/Demo/Shared/Shared/DemoNavProvider.cs
index 56449e3713..f39d23a34e 100644
--- a/examples/Demo/Shared/Shared/DemoNavProvider.cs
+++ b/examples/Demo/Shared/Shared/DemoNavProvider.cs
@@ -574,7 +574,11 @@ public DemoNavProvider()
icon: new Icons.Regular.Size20.DocumentTextLink(),
title: "TableOfContents"
),
-
+ new NavLink(
+ href: "/issue-tester",
+ icon: new Icons.Regular.Size20.WrenchScrewdriver(),
+ title: "Issue Tester"
+ ),
]
)
];
diff --git a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md
index cd9829d6da..45a404939d 100644
--- a/examples/Demo/Shared/wwwroot/docs/WhatsNew.md
+++ b/examples/Demo/Shared/wwwroot/docs/WhatsNew.md
@@ -1,3 +1,137 @@
+## V4.10.2
+
+### General
+- \[General\] Update to latest .NET 8 and .NET 9 RC2 SDK.
+- \[Debounce\] Fix the Debounce class with async methods ([#2759](https://github.com/microsoft/fluentui-blazor/pull/2759))
+
+### Components
+- \[Button\] Add StopPropagation + UnitTests ([#2732](https://github.com/microsoft/fluentui-blazor/pull/2732))
+- \[DataGrid\] Add `HeaderTootip` to columns to allow for custom header tooltip text ([#2775](https://github.com/microsoft/fluentui-blazor/pull/2775))
+- \[DataGrid\] Changes related to loading behavior ([#2739](https://github.com/microsoft/fluentui-blazor/pull/2739))
+- \[DataGrid\] Fix disposed object access error in EntityFrameworkAdapter [#2769] ([#2781](https://github.com/microsoft/fluentui-blazor/pull/2781))
+- \[DataGrid\] Support for multiple IAsyncQueryExecutor registrations ([#2730](https://github.com/microsoft/fluentui-blazor/pull/2730))
+- \[FluentNavLink\] An issue where empty strings were not allowed in Href ([#2722](https://github.com/microsoft/fluentui-blazor/pull/2722))
+- \[FluentRadioGroup\] Fix binding error ([#2742](https://github.com/microsoft/fluentui-blazor/pull/2742))
+- \[Menu\] Add z-index to MenuProvider ([#2772](https://github.com/microsoft/fluentui-blazor/pull/2772))
+- \[MenuButton\] Fix the MenuItem OnClick used with MenuButton ([#2784](https://github.com/microsoft/fluentui-blazor/pull/2784))
+- \[MessageBar\] Update way animation is applied to the MessageBar ([#2723](https://github.com/microsoft/fluentui-blazor/pull/2723))
+- \[NavMenu\] Make submenu in collapsed state work again ([#2771](https://github.com/microsoft/fluentui-blazor/pull/2771))
+- \[Overlay\] Fix the detection of ExcludedElement for WASM ([#2755](https://github.com/microsoft/fluentui-blazor/pull/2755))
+- \[ProfileMenu\] Add `Open` attribute ([#2741](https://github.com/microsoft/fluentui-blazor/pull/2741))
+- \[Providers\] To prevent the menu and tooltip from displaying a scrollbar in body ([#2744](https://github.com/microsoft/fluentui-blazor/pull/2744))
+- \[Tooltip\] Add role so screen reader can announce tooltip text ([#2724](https://github.com/microsoft/fluentui-blazor/pull/2724))
+- \[TreeView\] Improve RTL support ([#2770](https://github.com/microsoft/fluentui-blazor/pull/2770))
+- \[TreeView\] prevent runtime errors in change handeling ([#2776](https://github.com/microsoft/fluentui-blazor/pull/2776))
+
+### Demo site and documentation
+- \[Docs\] Components inheriting ListComponentBase missing member descriptions ([#2735](https://github.com/microsoft/fluentui-blazor/pull/2735))
+- \[Docs\] Fix nullable reference types not always showing in API documentation ([#2758](https://github.com/microsoft/fluentui-blazor/pull/2758))
+- \[Docs\] Fixes missing method descriptions for APIs ([#2764](https://github.com/microsoft/fluentui-blazor/pull/2764))
+- \[Docs\] Removes extra period from TemplatesPage.razor ([#2777](https://github.com/microsoft/fluentui-blazor/pull/2777))
+- \[Docs\] Removes unnecessary output to console for Grid page ([#2767](https://github.com/microsoft/fluentui-blazor/pull/2767))
+
+
+### Icons
+- Update to Fluent UI System Icons 1.1.260 (changes since 1.1.258). New **color** icons have been added!
+
+ **What's new (Name / Size(s) / Variant(s))**
+ - Arrow Circle Up Left / 16 / Filled & Regular
+ - Arrow Circle Up Right / 16 / Filled & Regular
+ - Building Checkmark / 16, 20 / Filled & Regular
+ - Clock Alarm / 48 / Filled & Regular
+ - Clothes Hanger / 12, 16, 20, 24 / Filled & Regular
+ - Comment Quote / 16, 20, 24, 28 / Filled & Regular
+ - Comment Text / 16, 20, 24, 28, 32, 48 / Filled & Regular
+ - Glance Horizontal / 28, 48 / Filled & Regular
+ - Glance / 16, 28, 32, 48 / Filled & Regular
+ - Megaphone / 12 / Filled & Regular
+ - Mic Link / 16, 20, 24, 28, 32, 48 / Filled & Regular
+ - Pen Sync / 16, 20, 24, 28, 32, 48 / Filled & Regular
+ - People Link / 16, 20, 24, 28, 32, 48 / Filled & Regular
+ - People Queue / 28, 32, 48 / Filled & Regular
+ - Person Head Hint / 16, 20, 24 / Filled & Regular
+ - Person Sound Spatial / 16, 20, 24, 28, 32, 48 / Filled & Regular
+ - Sound Wave Circle Sparkle / 16, 20, 24, 28, 32, 48 / Filled & Regular
+ - Sound Wave Circle / 16, 28, 32, 48 / Filled & Regular
+
+ **What's updated (Name / Size(s) / Variant(s))**
+
+ - Comment / 12 / Filled & Regular
+ - TV USB / 16, 48 / Filled & Regular
+
+ **New style — Color!**
+
+ - Add Circle / 16, 20, 24, 28, 32 / Color
+ - Alert / 16, 20, 24, 28, 32, 48 / Color
+ - Approvals App / 16, 20, 24, 28, 32 / Color
+ - Apps / 16, 20, 24, 28, 32, 48 / Color
+ - Arrow Trending Lines / 20, 24 / Color
+ - Beach / 16, 20, 24, 28, 32, 48 / Color
+ - Building Multiple / 20, 24 / Color
+ - Building People / 16, 20, 24 / Color
+ - Building Store / 16, 20, 24 / Color
+ - Building / 16, 20, 24, 32, 48 / Color
+ - Calendar Cancel / 16, 20, 24 / Color
+ - Calendar Checkmark / 16, 20, 24 / Color
+ - Calendar Clock / 16, 20, 24 / Color
+ - Calendar People / 20 / Color
+ - Calendar / 16, 20, 24, 28, 32, 48 / Color
+ - Camera / 16, 20, 24 / Color
+ - Chat Bubbles Question / 16, 20, 24 / Color
+ - Chat More / 16, 20, 24 / Color
+ - Chat Multiple / 16, 20, 24 / Color
+ - Checkbox Person / 16, 20, 24 / Color
+ - Checkbox / 16, 20, 24 / Color
+ - Checkmark Circle / 16, 20, 24, 32, 48 / Color
+ - Clipboard Text Edit / 20, 24, 32 / Color
+ - Clipboard / 16, 20, 24, 28, 32, 48 / Color
+ - Clock Alarm / 16, 20, 24, 32, 48 / Color
+ - Cloud Dismiss / 16, 20, 24, 28, 32, 48 / Color
+ - Cloud / 16, 20, 24, 28, 32, 48 / Color
+ - Code Block / 16, 20, 24, 28, 32, 48 / Color
+ - Coin Multiple / 16, 20 / Color
+ - Data Bar Vertical Ascending / 16, 20, 24 / Color
+ - Dismiss Circle / 16, 20, 24, 28, 32, 48 / Color
+ - Document Add / 16, 20, 24, 28, 48 / Color
+ - Document Folder / 16, 20, 24 / Color
+ - Document Lock / 16, 20, 24, 28, 48 / Color
+ - Document / 16, 20, 24, 28, 32, 48 / Color
+ - Edit / 16, 20, 24, 32 / Color
+ - Error Circle / 16, 20, 24, 48 / Color
+ - Food / 16, 20, 24, 28, 32, 48 / Color
+ - Game Chat / 20 / Color
+ - Globe Shield / 20, 24, 48 / Color
+ - Headphones / 20, 24, 28, 32, 48 / Color
+ - Headset / 16, 20, 24, 28, 32, 48 / Color
+ - History / 16, 20, 24, 28, 32, 48 / Color
+ - Home / 16, 20, 24, 28, 32, 48 / Color
+ - Library / 16, 20, 24, 28, 32 / Color
+ - Mail Multiple / 16, 20, 24, 28, 32 / Color
+ - Mail / 16, 20, 24, 28, 32, 48 / Color
+ - Mic / 16, 20, 24, 28, 32, 48 / Color
+ - Org / 16, 20, 24, 28, 32, 48 / Color
+ - People Home / 16, 20, 24, 28, 32, 48 / Color
+ - People Team / 16, 20, 24, 28, 32, 48 / Color
+ - People / 16, 20, 24, 28, 32, 48 / Color
+ - Person Available / 16, 20, 24 / Color
+ - Person / 16, 20, 24, 28, 32, 48 / Color
+ - Pin / 16, 20, 24, 28, 32, 48 / Color
+ - Poll / 16, 20, 24, 32 / Color
+ - Question Circle / 16, 20, 24, 28, 32, 48 / Color
+ - Receipt / 16, 20, 24, 28, 32 / Color
+ - Reward / 16, 20, 24 / Color
+ - Scan Person / 16, 20, 24, 28, 48 / Color
+ - Scan Type / 20, 24 / Color
+ - Search Visual / 16, 20, 24 / Color
+ - Shield Checkmark / 16, 20, 24, 28, 48 / Color
+ - Shield / 16, 20, 24, 28, 32, 48 / Color
+ - Shifts / 16, 20, 24, 28, 32 / Color
+ - Text Edit Style / 16, 20, 24 / Color
+ - Vault / 16, 20, 24 / Color
+ - Video / 16, 20, 24, 28, 32, 48 / Color
+ - Warning / 16, 20, 24, 28, 32, 48 / Color
+ - Wrench / 16, 20, 24 / Color
+
## v4.10.1
For a complete list of changes in this release, also see the [4.10.1](https://github.com/microsoft/fluentui-blazor/releases) release page on GitHub
diff --git a/src/Assets/FluentUI.Icons/Icons/Color16.cs b/src/Assets/FluentUI.Icons/Icons/Color16.cs
new file mode 100644
index 0000000000..ab59656bd8
--- /dev/null
+++ b/src/Assets/FluentUI.Icons/Icons/Color16.cs
@@ -0,0 +1,84 @@
+//
+// This code was generated by a tool.
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+
+#pragma warning disable 1591
+
+namespace Microsoft.FluentUI.AspNetCore.Components;
+
+public static partial class Icons
+{
+ public static partial class Color
+ {
+ [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
+ public static partial class Size16
+ {
+ public class AddCircle : Icon { public AddCircle() : base("AddCircle", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Alert : Icon { public Alert() : base("Alert", IconVariant.Color, IconSize.Size16, "") { } }
+ public class ApprovalsApp : Icon { public ApprovalsApp() : base("ApprovalsApp", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Apps : Icon { public Apps() : base("Apps", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Beach : Icon { public Beach() : base("Beach", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Building : Icon { public Building() : base("Building", IconVariant.Color, IconSize.Size16, "") { } }
+ public class BuildingPeople : Icon { public BuildingPeople() : base("BuildingPeople", IconVariant.Color, IconSize.Size16, "") { } }
+ public class BuildingStore : Icon { public BuildingStore() : base("BuildingStore", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Calendar : Icon { public Calendar() : base("Calendar", IconVariant.Color, IconSize.Size16, "") { } }
+ public class CalendarCancel : Icon { public CalendarCancel() : base("CalendarCancel", IconVariant.Color, IconSize.Size16, "") { } }
+ public class CalendarCheckmark : Icon { public CalendarCheckmark() : base("CalendarCheckmark", IconVariant.Color, IconSize.Size16, "") { } }
+ public class CalendarClock : Icon { public CalendarClock() : base("CalendarClock", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Camera : Icon { public Camera() : base("Camera", IconVariant.Color, IconSize.Size16, "") { } }
+ public class ChatBubblesQuestion : Icon { public ChatBubblesQuestion() : base("ChatBubblesQuestion", IconVariant.Color, IconSize.Size16, "") { } }
+ public class ChatMore : Icon { public ChatMore() : base("ChatMore", IconVariant.Color, IconSize.Size16, "") { } }
+ public class ChatMultiple : Icon { public ChatMultiple() : base("ChatMultiple", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Checkbox : Icon { public Checkbox() : base("Checkbox", IconVariant.Color, IconSize.Size16, "") { } }
+ public class CheckboxPerson : Icon { public CheckboxPerson() : base("CheckboxPerson", IconVariant.Color, IconSize.Size16, "") { } }
+ public class CheckmarkCircle : Icon { public CheckmarkCircle() : base("CheckmarkCircle", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Clipboard : Icon { public Clipboard() : base("Clipboard", IconVariant.Color, IconSize.Size16, "") { } }
+ public class ClockAlarm : Icon { public ClockAlarm() : base("ClockAlarm", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Cloud : Icon { public Cloud() : base("Cloud", IconVariant.Color, IconSize.Size16, "") { } }
+ public class CloudDismiss : Icon { public CloudDismiss() : base("CloudDismiss", IconVariant.Color, IconSize.Size16, "") { } }
+ public class CodeBlock : Icon { public CodeBlock() : base("CodeBlock", IconVariant.Color, IconSize.Size16, "") { } }
+ public class CoinMultiple : Icon { public CoinMultiple() : base("CoinMultiple", IconVariant.Color, IconSize.Size16, "") { } }
+ public class DataBarVerticalAscending : Icon { public DataBarVerticalAscending() : base("DataBarVerticalAscending", IconVariant.Color, IconSize.Size16, "") { } }
+ public class DismissCircle : Icon { public DismissCircle() : base("DismissCircle", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Document : Icon { public Document() : base("Document", IconVariant.Color, IconSize.Size16, "") { } }
+ public class DocumentAdd : Icon { public DocumentAdd() : base("DocumentAdd", IconVariant.Color, IconSize.Size16, "") { } }
+ public class DocumentFolder : Icon { public DocumentFolder() : base("DocumentFolder", IconVariant.Color, IconSize.Size16, "") { } }
+ public class DocumentLock : Icon { public DocumentLock() : base("DocumentLock", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Edit : Icon { public Edit() : base("Edit", IconVariant.Color, IconSize.Size16, "") { } }
+ public class ErrorCircle : Icon { public ErrorCircle() : base("ErrorCircle", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Food : Icon { public Food() : base("Food", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Headset : Icon { public Headset() : base("Headset", IconVariant.Color, IconSize.Size16, "") { } }
+ public class History : Icon { public History() : base("History", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Home : Icon { public Home() : base("Home", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Library : Icon { public Library() : base("Library", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Mail : Icon { public Mail() : base("Mail", IconVariant.Color, IconSize.Size16, "") { } }
+ public class MailMultiple : Icon { public MailMultiple() : base("MailMultiple", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Mic : Icon { public Mic() : base("Mic", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Org : Icon { public Org() : base("Org", IconVariant.Color, IconSize.Size16, "") { } }
+ public class People : Icon { public People() : base("People", IconVariant.Color, IconSize.Size16, "") { } }
+ public class PeopleHome : Icon { public PeopleHome() : base("PeopleHome", IconVariant.Color, IconSize.Size16, "") { } }
+ public class PeopleTeam : Icon { public PeopleTeam() : base("PeopleTeam", IconVariant.Color, IconSize.Size16, "") { } }
+ public class Person : Icon { public Person() : base("Person", IconVariant.Color, IconSize.Size16, "") { } }
+ public class PersonAvailable : Icon { public PersonAvailable() : base("PersonAvailable", IconVariant.Color, IconSize.Size16, "