<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Baaijte</title>
  <id>https://baaijte.net/</id>
  <subtitle>My ABC: Azure, Blazor, C# (and everything in between).</subtitle>
  <generator uri="https://github.com/madskristensen/Miniblog.Core" version="1.0">Miniblog.Core</generator>
  <updated>2026-02-18T07:29:41Z</updated>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-50-rc1/</id>
    <title>What's new for the Microsoft Fluent UI Blazor library 5.0 RC1</title>
    <updated>2026-02-19T14:38:32Z</updated>
    <published>2026-02-18T07:29:41Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-50-rc1/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term=".net10" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net9" />
    <category term=".net8" />
    <category term=".net10" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net9" />
    <category term=".net8" />
    <content type="html">&lt;p&gt;Today we are thrilled to publish the first Release Candidate of the Fluent UI Blazor library v5! This major release marks a significant evolution for the library, bringing a new foundation built on top of the latest Fluent UI Web Components, powerful new components, a game-changing Default Values system, and first-class Localization support.&amp;nbsp;&lt;/p&gt;
&lt;h2 id="a-new-foundation-fluent-ui-web-components-3"&gt;A New Foundation: Fluent UI Web Components 3&lt;/h2&gt;
&lt;p&gt;V5 represents a fundamental shift in the underlying rendering layer. The library has moved away from the previous FAST-based web components and now uses the new Fluent UI Web Components v3 &amp;mdash; the very same components that power Microsoft&amp;rsquo;s own products like Microsoft 365, Teams, and Windows 11.&lt;/p&gt;
&lt;h2 id="what-does-this-mean-for-you"&gt;What does this mean for you?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pixel-perfect Fluent 2 design. Your Blazor components now render with the exact same look and feel as Microsoft&amp;rsquo;s own products. No more subtle visual discrepancies.&lt;/li&gt;
&lt;li&gt;Better performance. The new web components are lighter and more efficient. The reduced JavaScript footprint leads to faster initial load times and smoother interactions.&lt;/li&gt;
&lt;li&gt;Improved accessibility. Accessibility is a first-class citizen in the new web component layer, delivering WCAG 2.1 AA compliance out of the box.&lt;/li&gt;
&lt;li&gt;Reduced bundle size. By removing the legacy FAST dependency, the overall package size has been significantly trimmed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-changes-in-your-code"&gt;What changes in your code?&lt;/h2&gt;
&lt;p&gt;For most existing components, the migration is quite seamless. Your Blazor markup stays the same. The library still exposes the same &lt;code&gt;FluentButton&lt;/code&gt;, &lt;code&gt;FluentSelect&lt;/code&gt;, and other components you already know. Under the hood, these components now render using the new Fluent UI Web Components.&lt;/p&gt;
&lt;p&gt;However, because the web components are now aligned to the Fluent UI React components with regards to attribute names, we needed to make significant changes a lot of our components as well. We created a &lt;a href="https://fluentui-blazor-v5.azurewebsites.net/MigrationV5"&gt;lot of documentation&lt;/a&gt; to help you migrate.&lt;/p&gt;
&lt;p&gt;In addition, we are also providing a &lt;a href="hhttps://fluentui-blazor-v5.azurewebsites.net/Mcp"&gt;MCP Server&lt;/a&gt; for this version of the library. This will be your helpful assistant for migration and development on a daily basis.&lt;/p&gt;
&lt;p&gt;No additional JavaScript or CSS file references are required. The library handles everything automatically. The web component scripts are included and loaded automatically by the library.&lt;/p&gt;
&lt;h2 id="getting-started"&gt;Getting started&lt;/h2&gt;
&lt;p&gt;Install the NuGet packages:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dotnet add package Microsoft.FluentUI.AspNetCore.Components --prerelease
dotnet add package Microsoft.FluentUI.AspNetCore.Components.Icons
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add the namespace to your &lt;code&gt;_Imports.razor&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@using Microsoft.FluentUI.AspNetCore.Components
@using Icons = Microsoft.FluentUI.AspNetCore.Components.Icons
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Register the services in &lt;code&gt;Program.cs&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;builder.Services.AddFluentUIComponents();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And add the provider component at the end of your &lt;code&gt;MainLayout.razor&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@* Add all FluentUI Blazor Providers *@
&amp;lt;FluentProviders /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;rsquo;s it. You are now ready to start building your applications with the Fluent UI Blazor library v5.&lt;/p&gt;
&lt;h2 id="the-new-fluentlayout-component"&gt;The New &lt;code&gt;FluentLayout&lt;/code&gt; Component&lt;/h2&gt;
&lt;p&gt;V5 introduces a completely redesigned &lt;code&gt;FluentLayout&lt;/code&gt; component that serves as the structural backbone for your application. Rather than manually composing CSS Grid or Flexbox layouts, &lt;code&gt;FluentLayout&lt;/code&gt; provides a declarative, area-based system for building full-page layouts with a fixed header, navigation panel, content area, and footer.&lt;/p&gt;
&lt;h3 id="area-based-layout"&gt;Area-based layout&lt;/h3&gt;
&lt;p&gt;The key concept is a &lt;code&gt;FluentLayoutItem&lt;/code&gt; with a &lt;code&gt;LayoutArea&lt;/code&gt;. You declare where each piece of content should go, and the layout engine handles the rest:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@inherits LayoutComponentBase

&amp;lt;FluentLayout&amp;gt;

    &amp;lt;!-- Header --&amp;gt;
    &amp;lt;FluentLayoutItem Area="@LayoutArea.Header"&amp;gt;
        &amp;lt;FluentStack VerticalAlignment="VerticalAlignment.Center"&amp;gt;
            &amp;lt;FluentLayoutHamburger /&amp;gt;
            &amp;lt;FluentText Weight="TextWeight.Bold"
                        Size="TextSize.Size400"&amp;gt;
                My Application
            &amp;lt;/FluentText&amp;gt;
            &amp;lt;FluentSpacer /&amp;gt;
        &amp;lt;/FluentStack&amp;gt;
    &amp;lt;/FluentLayoutItem&amp;gt;

    &amp;lt;!-- Navigation --&amp;gt;
    &amp;lt;FluentLayoutItem Area="@LayoutArea.Navigation"
                      Width="250px"&amp;gt;
        &amp;lt;NavMenu /&amp;gt;
    &amp;lt;/FluentLayoutItem&amp;gt;

    &amp;lt;!-- Content --&amp;gt;
    &amp;lt;FluentLayoutItem Area="@LayoutArea.Content"
                      Padding="@Padding.All3"&amp;gt;
        @Body
    &amp;lt;/FluentLayoutItem&amp;gt;

    &amp;lt;!-- Footer --&amp;gt;
    &amp;lt;FluentLayoutItem Area="@LayoutArea.Footer"&amp;gt;
        Powered by Microsoft Fluent UI Blazor
    &amp;lt;/FluentLayoutItem&amp;gt;

&amp;lt;/FluentLayout&amp;gt;

&amp;lt;FluentProviders /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="built-in-hamburger-menu"&gt;Built-in hamburger menu&lt;/h3&gt;
&lt;p&gt;Notice the &lt;code&gt;FluentLayoutHamburger&lt;/code&gt; component in the header. This renders a hamburger button that automatically toggles the navigation panel. Complete with smooth animations and responsive behavior. No extra JavaScript needed.&lt;/p&gt;
&lt;h3 id="why-this-matters"&gt;Why this matters&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Consistent structure. Every page in your application follows the same layout contract. No more layout drift.&lt;/li&gt;
&lt;li&gt;Responsive by design. The navigation panel collapses automatically on smaller screens.&lt;/li&gt;
&lt;li&gt;Typed areas. Using &lt;code&gt;LayoutArea.Header&lt;/code&gt;, &lt;code&gt;LayoutArea.Navigation&lt;/code&gt;, &lt;code&gt;LayoutArea.Content&lt;/code&gt;, and &lt;code&gt;LayoutArea.Footer&lt;/code&gt; ensures you can&amp;rsquo;t misplace content.&lt;/li&gt;
&lt;li&gt;Customizable sizing. Control the width of the navigation panel, padding of content areas, and more through simple parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more layout examples, visit the &lt;a href="https://fluentui-blazor-v5.azurewebsites.net/layout"&gt;FluentLayout documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="default-values"&gt;Default Values&lt;/h2&gt;
&lt;p&gt;One of the most important and eagerly awaited features in v5 is the Default Values system. This powerful mechanism lets you define global default parameter values for any Fluent UI component &amp;mdash; once &amp;mdash; and have them applied everywhere in your application.&lt;/p&gt;
&lt;h3 id="the-problem-it-solves"&gt;The problem it solves&lt;/h3&gt;
&lt;p&gt;In earlier versions, if you wanted all your buttons to use a specific appearance, you had to set it on every single instance:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentButton Appearance="ButtonAppearance.Primary"&amp;gt;Save&amp;lt;/FluentButton&amp;gt;
&amp;lt;FluentButton Appearance="ButtonAppearance.Primary"&amp;gt;Submit&amp;lt;/FluentButton&amp;gt;
&amp;lt;FluentButton Appearance="ButtonAppearance.Primary"&amp;gt;Confirm&amp;lt;/FluentButton&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This was tedious, error-prone, and a maintenance nightmare. Making a design change meant touching potentially hundreds of files.&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The solution&lt;/h2&gt;
&lt;p&gt;With v5, you can configure default values globally in your &lt;code&gt;Program.cs&lt;/code&gt; as follows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;builder.Services.AddFluentUIComponents(config =&amp;gt;
{
    // Set default values for FluentButton component
    config.DefaultValues.For&amp;lt;FluentButton&amp;gt;()
          .Set(p =&amp;gt; p.Appearance, ButtonAppearance.Primary);
    config.DefaultValues.For&amp;lt;FluentButton&amp;gt;()
          .Set(p =&amp;gt; p.Shape, ButtonShape.Circular);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now every &lt;code&gt;FluentButton&lt;/code&gt; in your application automatically uses the &lt;code&gt;Primary&lt;/code&gt; appearance and &lt;code&gt;Circular&lt;/code&gt; shape. Unless you explicitly override it on a specific instance:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- Uses global defaults (Primary + Circular) --&amp;gt;
&amp;lt;FluentButton&amp;gt;Save&amp;lt;/FluentButton&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- Override just the appearance for this instance --&amp;gt;
&amp;lt;FluentButton Appearance="ButtonAppearance.Outline"&amp;gt;Cancel&amp;lt;/FluentButton&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="key-benefits"&gt;Key benefits&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Single source of truth. Define your design decisions once, apply them everywhere.&lt;/li&gt;
&lt;li&gt;Easy branding. Switch your entire application&amp;rsquo;s look by changing a few lines in &lt;code&gt;Program.cs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Explicit overrides. Any component instance can still override defaults with a local parameter.&lt;/li&gt;
&lt;li&gt;Strongly typed. The API uses lambda expressions &amp;mdash; full IntelliSense, no magic strings.&lt;/li&gt;
&lt;li&gt;Maintainable. Changing a design decision no longer requires a massive find-and-replace.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This feature is particularly powerful for organizations that need consistent component styling across large applications or shared design systems.&lt;/p&gt;
&lt;h2 id="localization-support"&gt;Localization Support&lt;/h2&gt;
&lt;p&gt;V5 introduces a built-in Localization system that makes it easy to translate all component-internal strings &amp;mdash; button labels, ARIA attributes, accessibility texts, and more &amp;mdash; into any language.&lt;/p&gt;
&lt;h3 id="how-it-works"&gt;How it works&lt;/h3&gt;
&lt;p&gt;The library ships with English strings by default. To localize components, implement the IFluentLocalizer interface:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;using Microsoft.FluentUI.AspNetCore.Components;

public class CustomFluentLocalizer : IFluentLocalizer
{
    public string this[string key, params object[] arguments]
    {
        get
        {
            return key switch
            {
                "SomeKey" =&amp;gt; "Your Custom Translation",
                "AnotherKey" =&amp;gt; string.Format("Another Translation {0}", arguments),

                // Fallback to English if no translation is found
                _ =&amp;gt; IFluentLocalizer.GetDefault(key, arguments),
            };
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Register it in &lt;code&gt;Program.cs&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;builder.Services.AddFluentUIComponents(config =&amp;gt;
    config.Localizer = new CustomFluentLocalizer());
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also use your embedded resources (.resx) for multilingual support. Everything is &lt;a href="https://fluentui-blazor-v5.azurewebsites.net/localization"&gt;documented on our website&lt;/a&gt;. The component documentation pages give an overview of the strings that can be localized. The earlier mentioned MCP server can be of help there as well.&lt;/p&gt;
&lt;h2 id="try-it-now"&gt;Try It Now&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Package available on Nuget&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Microsoft.FluentUI.AspNetCore.Components --prerelease&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fluentui-blazor-v5.azurewebsites.net"&gt;https://fluentui-blazor-v5.azurewebsites.net&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub (v5 branch)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/microsoft/fluentui-blazor/tree/dev-v5"&gt;https://github.com/microsoft/fluentui-blazor/tree/dev-v5&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Migration guide&lt;/td&gt;
&lt;td&gt;&lt;a href="https://fluentui-blazor-v5.azurewebsites.net/MigrationV5"&gt;Migration to v5&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="final-remarks"&gt;Final remarks&lt;/h2&gt;
&lt;p&gt;This is our first Release Candidate. The API surface is fairly stabilized.&lt;/p&gt;
&lt;p&gt;We are counting on the community to help us identify any remaining issues! Please file issue reports on GitHub (with &lt;em&gt;ready-to-run reproduction code&lt;/em&gt;), and don&amp;rsquo;t hesitate to contribute.&lt;/p&gt;
&lt;p&gt;Several components are still missing. We are currently working on those nd they will come with the next RC's. See the &lt;a href="https://github.com/microsoft/fluentui-blazor/issues/4182"&gt;dev-v5 - TODO List&lt;/a&gt; for an overview&lt;/p&gt;
&lt;p&gt;A big 'thank you' to everyone who has already contributed, tested, and provided feedback throughout the (long) v5 development cycle. We&amp;rsquo;re incredibly excited about this release and can&amp;rsquo;t wait to see what you build with it!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.14/</id>
    <title>What's new for the Microsoft Fluent UI Blazor library 4.14</title>
    <updated>2026-02-12T19:14:51Z</updated>
    <published>2026-02-12T19:08:38Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.14/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term=".net10" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net9" />
    <category term=".net8" />
    <category term=".net10" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net9" />
    <category term=".net8" />
    <content type="html">&lt;p&gt;Although we are now fully focused on delivering you a great v5 version of the library in the near future, we did manage to get an update for v4 out the door. This includes one highly demanded feature that warranted the jump to a new minor by itself.&lt;/p&gt;
&lt;p&gt;That feature we've added is the possibility to use hierarchical data in the DataGrid (we are way past just adding a row click event ??)! I'll tell a bit more about that below.&lt;/p&gt;
&lt;p&gt;Other notable things we did in this release are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The usual document and demo site updates&lt;/li&gt;
&lt;li&gt;Update the icons library to the latest Fluent UI System Icons release (1.1.318)&lt;/li&gt;
&lt;li&gt;Fix 3 other DataGrid issues&lt;/li&gt;
&lt;li&gt;Update, extend and fix issues in 5 other components&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The complete overview can be seen on the site at the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What's New page&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="but-what-about-412-and-413"&gt;But what about 4.12 and 4.13?&lt;/h2&gt;
&lt;p&gt;Yeah, sorry about that. We did have add some very nice additions and new capabilities in those versions as well. I was too busy however with starting a new job (outside of Microsoft) and working on the v5 version that writing these release Blog posts fell too far down (or actually off) the ToDo-list.&lt;/p&gt;
&lt;p&gt;Now, I won't go into too much detail on the changes in those versions here, but I'll provide a short summary. For the full details see the page I linked to in the previous section.&lt;/p&gt;
&lt;h3 id="highlights"&gt;Highlights&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added support for .NET 10 (both in offering a compiled version in our package as well as full template support)&lt;/li&gt;
&lt;li&gt;DataGrid enhancements for async loading, for the SelectColumn and a full column resize handle&lt;br /&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/datagrid-resize_639065135532348225.gif" alt="datagrid resize" /&gt;&lt;/li&gt;
&lt;li&gt;Menu fixes for dispose errors&lt;/li&gt;
&lt;li&gt;AutoComplete: new feature and overrides&lt;/li&gt;
&lt;li&gt;Dialog: Return focus to initiator when dialog is closed and offer a way to specify header typography&lt;/li&gt;
&lt;li&gt;And much more...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In total 34 components have seen changes,fixes and or enhancements in these 2 minor version releases. Important to re-iterate again: not all changes were made by us. We say a heartfelt "thank you!" to a (still growing) group of contributors.&lt;/p&gt;
&lt;h2 id="the-hierarchical-datagrid"&gt;The hierarchical DataGrid&lt;/h2&gt;
&lt;p&gt;The Aspire team has had expendable/collapsible rows in their Resources page in the Dashboard for a while already. It was however a custom coded implementation that was geared specifically towards being used in Aspire. With some help from my Copilot friends, Claude and Gemini, I was able to provide a generic solution that can work for and with any type of row data, as long as both the parent and the child rows have the same properties (i.e. show the same columns).&lt;/p&gt;
&lt;p&gt;The functionality is powered by the &lt;code&gt;IHierarchicalGridItem&lt;/code&gt; interface, which allows developers to transform a flat list of data into a navigable tree structure within the grid.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/hierarchical-datagrid_639065135535705314.png" alt="hierarchical datagrid" /&gt;&lt;/p&gt;
&lt;h3 id="how-ihierarchicalgriditem-works"&gt;How IHierarchicalGridItem Works&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;IHierarchicalGridItem&lt;/code&gt; interface acts as a contract for your data model, providing the metadata necessary for the grid to manage parent-child relationships and display states. It includes four key properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Depth: Defines the level of an item (starting at 0 for root items).&lt;/li&gt;
&lt;li&gt;HasChildren: A boolean that tells the grid whether to render an expand/collapse toggle for that specific row.&lt;/li&gt;
&lt;li&gt;IsCollapsed: Manages the visibility state of the item's descendants.&lt;/li&gt;
&lt;li&gt;IsHidden: Indicates if the row should be rendered at all (e.g., when a parent higher up the tree is collapsed).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="enabling-hierarchy-in-fluentdatagrid"&gt;Enabling Hierarchy in FluentDataGrid&lt;/h3&gt;
&lt;p&gt;To implement hierarchical data, a &lt;code&gt;TGridItem&lt;/code&gt; must implement this interface. The &lt;code&gt;FluentDataGrid&lt;/code&gt; then uses this metadata to automate the complex parts of tree-view rendering:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Visual Indentation: The grid automatically calculates and applies margin-inline-start based on the Depth property, ensuring clear visual separation between levels.&lt;/li&gt;
&lt;li&gt;State Management: When a user clicks the expand/collapse button, the grid invokes &lt;code&gt;ToggleExpandedAsync(TGridItem)&lt;/code&gt;. This internal method flips the &lt;code&gt;IsCollapsed&lt;/code&gt; state and triggers a data refresh.&lt;/li&gt;
&lt;li&gt;Flat-to-Hierarchical UI: While the underlying &lt;code&gt;Items&lt;/code&gt; or &lt;code&gt;ItemsProvider&lt;/code&gt; usually provides a flattened list of items, the grid uses the interface properties to decide which rows to show and how to style them.&lt;/li&gt;
&lt;li&gt;Custom Logic: The &lt;code&gt;OnToggle&lt;/code&gt; event callback allows you to perform additional actions, such as lazy-loading child items from a database only when a node is expanded.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By leveraging &lt;code&gt;IHierarchicalGridItem&lt;/code&gt;, you can build sophisticated, performant tree-grids that maintain the same familiar API as the standard FluentDataGrid.&lt;/p&gt;
&lt;p&gt;Both 2-level and multi-level examples have been added to the demo site. See the &lt;a href="https://www.fluentui-blazor.net/datagrid-hierarchical"&gt;DataGrid - Hierarchical data&lt;/a&gt; page. And yes, the hierarchical functionality works together with the resize functionality perfectly well.&lt;/p&gt;
&lt;h2 id="whats-next"&gt;What's next&lt;/h2&gt;
&lt;p&gt;We are currently focusing almost exclusively on getting the v5 version ready. There are only a few components left that we want to tackle before the final release. I think we will have a near feature complete release candidate in the coming weeks. In the mean time, check out &lt;a href="https://fluentui-blazor-v5.azurewebsites.net/"&gt;the v5 demo site&lt;/a&gt; to see how far we are already. Trust me, you won't be disappointed by the speed and quality of these new components!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-5/</id>
    <title>What's next: the Fluent UI Blazor library v5</title>
    <updated>2025-02-22T13:28:01Z</updated>
    <published>2024-12-19T13:58:44Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-5/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net9" />
    <category term=".net8" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net9" />
    <category term=".net8" />
    <content type="html">&lt;h2 id="whats-next-web-components-v3-and-our-next-major-version"&gt;Web Components v3&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;As you might know, our current Fluent UI Blazor library v4 uses and wraps the Fluent UI Web Components v2 release for a lot of the Blazor components. The team developing the Fluent UI Web Components is now hard at work on creating the v3 version of the Fluent UI Web Components. Beta versions of v3 are available and an RC is expected soon. Because of that work, there are no updates&amp;nbsp;coming&amp;nbsp;anymore for v2.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A lot of changes are being made to property and attribute names, enumeration values, etc., to align with the Fluent UI Web Components more closely with the Fluent UI React v9 and vNext components.&lt;/p&gt;
&lt;h3&gt;Feature parity&lt;/h3&gt;
&lt;p&gt;The number of Web Components available with v3 will be less than what we have now with v2. It is expected that incremental releases adding new components will become available after the first 'GA' release of v3.&lt;/p&gt;
&lt;h3&gt;Recap&lt;/h3&gt;
&lt;p&gt;If you are new to all of this, here is a short recap of what the Fluent UI Web Components are:&lt;/p&gt;
&lt;p&gt;Microsoft's&amp;nbsp;&lt;a href="https://github.com/microsoft/fluentui/tree/master/packages/web-components" target="_blank" rel="nofollow noopener noreferrer"&gt;Fluent UI Web Components&lt;/a&gt;&amp;nbsp;is designed to help you build web apps using Web Components styled with the&amp;nbsp;&lt;a href="https://fluent2.microsoft.design/" target="_blank" rel="nofollow noopener noreferrer"&gt;Fluent design language&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Each component is designed to adhere to the following standards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Customizable&lt;/strong&gt;: Fluent-styled components by default, but easy to integrate your own brand and theme&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Optimized for performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bundle size&lt;/strong&gt;: Refactored and slimmed down components that allow you to include the packages and dependencies you need&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interoperability&lt;/strong&gt;: Works with any modern JavaScript framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility&lt;/strong&gt;: WCAG 2.1 compliant and tested by trusted testers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design to Code&lt;/strong&gt;: Stay up to date with Fluent Design Language changes via Design Tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-are-web-components"&gt;What are Web Components?&lt;/h3&gt;
&lt;p&gt;"Web Components" is an umbrella term that refers to a collection of web standards focused on enabling the creation of custom HTML elements. Some of the standards that are under the umbrella include the ability to define new HTML tags, plug into a standard component lifecycle, encapsulate HTML rendering and CSS, parameterize CSS, skin components, and more. Each of these platform features is defined by the W3C and has shipped in every major browser today.&lt;/p&gt;
&lt;h3 id="how-does-fluent-ui-web-components-leverage-web-components"&gt;How does Fluent UI Web Components leverage Web Components?&lt;/h3&gt;
&lt;p&gt;Fluent UI Web Components is built directly on the W3C Web Component standards, and does not create its own component model. This allows our components to function the same as built-in, native HTML elements. You do not need a framework to use Fluent UI components but you can use them in combination with any framework or library of your choice. Here we are focusing on the Fluent UI Blazor library.&lt;/p&gt;
&lt;h2&gt;Fluent UI Blazor Library v4&lt;/h2&gt;
&lt;p&gt;This is the version we currently have and support*. It is not tied to the .NET 8 release and support policy officially, but we aim to follow that. This means v4 will stay supported until November 2026. It does&amp;nbsp;&lt;strong&gt;not&amp;nbsp;&lt;/strong&gt;mean we will keep adding new functionality to that version until Nov 2026 as well.&lt;/p&gt;
&lt;p&gt;Once our next major version (v5) reaches a level of maturity where we are confident it can&amp;nbsp; be used as a replacement for v4, the latter will enter a phase of being 'on life support'. New releases will be made available soon after .NET 8 patches are released. But bug fixing will be minimal and no new functionality will be added in that period. Just to re-iterate the current situation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;*This is a pure open-soure project. The library is&amp;nbsp;&lt;strong&gt;not&lt;/strong&gt;&amp;nbsp;an official part of ASP.NET Core. This means the packages are&amp;nbsp;&lt;strong&gt;not&lt;/strong&gt;&amp;nbsp;officially supported and we are not committed to shipping updates as part of any official .NET updates. It is built and maintained by Microsoft employees (and external contributors) and offers support, like most other open-source projects, on a&amp;nbsp;&lt;strong&gt;best effort&lt;/strong&gt;&amp;nbsp;base through the GitHub repository&amp;nbsp;&lt;strong&gt;only&lt;/strong&gt;. No support is offered through any of Microsoft's official support channels.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Fluent UI Blazor Library v5&lt;/h2&gt;
&lt;p&gt;For our next major version, v5, we are using the new v3 Fluent UI Web Components. We have started work on this already and progress can be followed in the&amp;nbsp;&lt;code&gt;dev-v5&lt;/code&gt;&amp;nbsp;branch in our &lt;a href="https://github.com/fluentui-blazor" target="_blank" rel="noopener"&gt;repo&lt;/a&gt;. We are trying to see if we can make preview packages available as well.&lt;/p&gt;
&lt;p&gt;With the&amp;nbsp;big changes made on the Web Components side for the v3 release, a lot of changes are necessary on our side as well. This implies the&amp;nbsp;&lt;strong&gt;will&lt;/strong&gt; be a number of breaking changes when you want to&amp;nbsp;move your v4 based code to v5. Where possible, we are aiming to provide helpers and/or utility methods to make incorporating those changes in your code base easier. We are also putting a lot off effort into migration documentation.&lt;/p&gt;
&lt;h3&gt;Not a simple drop-in replacement&lt;/h3&gt;
&lt;p&gt;We want tot position v5 not as a direct replacement or upgrade from v4 in a traditional sense but rather as a new and improved version with different, better and more modern implementations, both from the Web Components as from a pure code perspective.&lt;/p&gt;
&lt;p&gt;By making these major changes, we're also taking advantage of the experience gained, and feedback gathered from users, over the last 3.5 years. We are considerably improving performance and usability of a number of components. As an example, the FluentDialog will be simpler, more complete and will use the standard HTML &amp;lt;dialog&amp;gt; tag, offering greater scope for customization.&lt;/p&gt;
&lt;p&gt;With the support model we have in mind, you can continue to use the library in a &lt;strong&gt;safe&amp;nbsp;&lt;/strong&gt;and &lt;strong&gt;secure&lt;/strong&gt; way until, at least, November 2026. We don't think there is an immediate &lt;strong&gt;need &lt;/strong&gt;to upgrade to the v5 version once that is released.&amp;nbsp;For new projects, we &lt;strong&gt;do&amp;nbsp;&lt;/strong&gt;think it makes sense to use v5 from the start.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 14px;"&gt;We are not waiting with releasing v5 till the Fluent UI Web Component v3 collection is on par what is available with v2. There is a very real chance that won't ever happen at all, as not all v2 components are destined to come to v3. In&amp;nbsp;&lt;strong&gt;&lt;em&gt;some cases&lt;/em&gt;&amp;nbsp;&lt;/strong&gt;we will provide Blazor components for things that the v3 Web Components won't provide. As an example of that, we have altered the DataGrid to not depend on Web Components anymore but use HTML table elements for rendering its UI components.&lt;/p&gt;
&lt;p&gt;Because of the differences in the sets of Fluent UI Web Components and the changes within those components, upgrading a project that currently uses the Fluent UI Blazor library v4&amp;nbsp;&lt;strong&gt;will not&lt;/strong&gt;&amp;nbsp;just be a matter of installing the new package(s). We would have loved to be able to make it like that but circumstances beyond our control make that impossible unfortunately. And we certainly do not want to make promises we can't keep.&lt;/p&gt;
&lt;p&gt;As mentioned, we think we will offer a great new version of the Fluent UI Blazor library with v5. We look forward to working together with the community to make it a success!&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.11/</id>
    <title>What's new for the Microsoft Fluent UI Blazor library 4.11</title>
    <updated>2025-01-15T09:39:57Z</updated>
    <published>2024-12-18T19:06:22Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.11/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net9" />
    <category term=".net8" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net9" />
    <category term=".net8" />
    <content type="html">&lt;p&gt;Just before the end of year holiday period, we are bringing you a new version. Before you start upgrading though, please go through the post here and the notes on the site first. We have made some &lt;strong&gt;breaking changes&lt;/strong&gt;. Don't let them catch you by surprise and ruin that wonderful Christmas spirit.&lt;/p&gt;
&lt;p&gt;Although the number of PRs that went into this release is not that big, the changes those PRs brought were pretty big. In total we had well over&amp;nbsp;&lt;a href="https://github.com/microsoft/fluentui-blazor/releases" target="_blank" rel="noopener"&gt;30 PRs merged&lt;/a&gt;. As always, first the highlights and then the extended descriptions.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;V3 out of support&lt;/li&gt;
&lt;li&gt;Templates: 2 updated and 2 &lt;strong&gt;new&lt;/strong&gt; templates&lt;/li&gt;
&lt;li&gt;DataGrid: HTML table, rendering, ODATA adapter and (experimental) saving paging state in the URL&lt;/li&gt;
&lt;li&gt;MessageBox: Allow HTML markup in message&lt;/li&gt;
&lt;li&gt;Rating: improved a11y support&lt;/li&gt;
&lt;li&gt;TextField: support for additional field types&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a complete overview of all the changes, please see the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What's New&lt;/a&gt; page on our demo and documentation site.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Again, please also see the&amp;nbsp;&lt;a href="https://www.fluentui-blazor.net/WhatsNew" target="_blank" rel="noopener"&gt;What's new?&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="https://www.fluentui-blazor.net/UpgradeGuide" target="_blank" rel="noopener"&gt;Upgrade Guide&lt;/a&gt;&amp;nbsp;pages for important information about breaking changes&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="v3-out-of-support"&gt;V3 out of support&lt;/h2&gt;
&lt;p&gt;With the release of .NET 9 on November 12th, .NET 7 officially went out of support. With that, our support for v3 of the library (which used the &lt;code&gt;Microsoft.Fast.Components.FluentUI&lt;/code&gt; namespace) came to an end as well. With well over &lt;strong&gt;1.1 million&lt;/strong&gt; downloads of just the core v3 package, we can safely say it laid the groundwork for the success the library has now.&lt;/p&gt;
&lt;p&gt;Both .NET 6 and ,NET 7 won't get any security updates anymore. We also don't plan to release any updates to our v3 packages anymore and strongly advise you to move to one of the newer .NET versions (and our v4 packages). That being said, it is of course not that the v3 components suddenly don't work anymore. Just be aware of the danger involved and do not open new issues in our repo anymore. We won't be spending any time on them.&lt;/p&gt;
&lt;h2 id="templates-2-updates-and-2-new-additions"&gt;Templates: 2 updates &lt;em&gt;and&lt;/em&gt; 2 new additions&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Microsoft.FluentUI.AspNetCore.Templates&lt;/code&gt; package already contained (fully equivalent code and functionality) copies of the Blazor Web App and Blazor WebAssembly Standalone App templates. With this release these templates have been updated to the latest versions. This means you now have the choice to create a new Fluent Blazor application that targets either .NET 8 or .NET 9 with everything already set up for you.&lt;/p&gt;
&lt;h3 id="fluent-net-aspire-starter-app"&gt;Fluent .NET Aspire Starter App&lt;/h3&gt;
&lt;p&gt;We are happy to report that the new version of the template package now also support creating a Fluent-ready version of the Aspire Starter App. Just like with the other templates, this one also completely mirrors the functionality from the standard version and comes with Fluent set up and ready to run. We might be biased, but we think this accompanies the Dashboard perfectly ??.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/aspiretemplate_638701554796769363.jpg" alt="aspiretemplate" /&gt;&lt;/p&gt;
&lt;h3 id="fluent-net-maui-blazor-hybrid-and-web-app"&gt;Fluent .NET MAUI Blazor Hybrid and Web App&lt;/h3&gt;
&lt;p&gt;With this release we also bring the new combined Blazor Hybrid and Blazor Web app template (new for .NET 9) available in a Fluent-ready version. We took care of setting everything up already (and even removed Bootstrap for you).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/hybridtemplate_638701554798763810.jpg" alt="hybridtemplate" /&gt;&lt;/p&gt;
&lt;p&gt;See the &lt;a href="https://learn.microsoft.com/en-us/aspnet/core/blazor/hybrid/tutorials/maui-blazor-web-app?view=aspnetcore-9.0"&gt;Learn article&lt;/a&gt; for details on what the template (and subsequently our version as well) offers&lt;/p&gt;
&lt;h3 id="how-to-use-the-templates"&gt;How to use the templates&lt;/h3&gt;
&lt;p&gt;After you've installed the &lt;a href="https://www.fluentui-blazor.net/Templates"&gt;templates package&lt;/a&gt;, you can create a new project in Visual Studio. Just search for 'Fluent' in the 'Create a new project' dialog or select one of the applicable project types from the drop-down to find the Fluent templates.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/templates_638701554799740307.png" alt="templates" /&gt;&lt;/p&gt;
&lt;p&gt;If you rather work from the command line, that is fully supported as well. Just put 'fluent' in front of any of the 4 short names (i.e. blazor --&amp;gt; fluentblazor) to start creating your Fluent apps.&lt;/p&gt;
&lt;h2 id="datagrid-rendering-odata-adapter-and-saving-paging-state"&gt;DataGrid: Rendering, ODATA Adapter and saving paging state&lt;/h2&gt;
&lt;h3 id="rendering"&gt;Rendering&lt;/h3&gt;
&lt;p&gt;We are currently working on a new major version of the library. You can read more about that at the end of this article. Because of that work and also because of performance reasons, we have decided to 'swap out' the web components based rendering of the DataGrid to an HTML table elements based rendering. We took great care to make the transition as smooth as possible but we also did make quite a few changes to class names and styling.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you were overriding/changing DataGrid rendering in previous versions, chances are that these will break with this release.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Resizing columns, presenting column filtering and sorting options have been made more accessible and by using parameters you can now choose how to present these to the end users. See the &lt;a href="https://www.fluentui-blazor.net/DataGrid#customcomparer"&gt;example&lt;/a&gt; in the demo site for which options are available and how you can use these.&lt;/p&gt;
&lt;p&gt;Besides the rendering of the DataGrid, the following (breaking) changes have been made&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you have rows in a table with content that needs to span multiple lines, you now need to use and set the new MultiLine (bool) parameter of the FluentDataGrid. Previously this could be done by setting a RowClass on a column but that does not work anymore.&lt;/li&gt;
&lt;li&gt;The parameter &lt;code&gt;ResizeLabel&lt;/code&gt; has been removed in favor of 3 new parameters that make changing strings in the DataGrid UI easier. We now have &lt;code&gt;ColumnOptionLabels&lt;/code&gt;, &lt;code&gt;ColumnResizeLabels&lt;/code&gt; and &lt;code&gt;ColumnSortLabels&lt;/code&gt; where each parameter is a record that contains properties for the strings that that specific piece of UI is using. There is a default implementation provided for each record. You can override the values like this:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;private ColumnResizeLabels _resizeLabels = ColumnResizeLabels.Default;
private ColumnSortLabels _sortLabels = ColumnSortLabels.Default;
:
:
 protected override async Task OnInitializedAsync()
 {
     _resizeLabels = ColumnResizeLabels.Default with
     {
         ExactLabel = "...",
         ResizeMenu = "..."

     };
     _sortLabels = ColumnSortLabels.Default with
     {
         SortMenu = "...",
         SortMenuAscendingLabel = "..."
         SortMenuDescendingLabel = "..."

     };
:
:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You only need to override the values that you actually want to change.&lt;/p&gt;
&lt;p&gt;A couple of our users (and we ourselves) have tested these changes extensively and are confident the breaking changes won't be that hard to fix. If you are running into issues, please let us know, as always, in the &lt;a href="https://github.com/microsoft/fluentui-blazor"&gt;repo&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="odata-adapter"&gt;OData Adapter&lt;/h3&gt;
&lt;p&gt;Through a community contribution, we now have a new adapter package available which adds an Implementation of an OData IAsyncQueryExecutor. Use this package if the data you want to display in the &lt;code&gt;FluentDataGrid&lt;/code&gt; that comes from &lt;a href="https://www.nuget.org/packages/Microsoft.OData.Client"&gt;Microsoft.OData.Client&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Microsoft OData Client library's DataServiceContext gives you a DataServiceQuery property for each resource in your OData service endpoint. Simply supply this as the grid's &lt;code&gt;Items&lt;/code&gt; parameter:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@inject DataServiceContext MyServiceContext

&amp;lt;FluentDataGrid RowsData="@MyServiceContext.People"&amp;gt;
    ...
&amp;lt;/FluentDataGrid&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You may also use any DataServiceQuery-supported LINQ operator to filter the data before passing it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@inject DataServiceContext MyServiceContext

&amp;lt;FluentDataGrid RowsData="@MyServiceContext.Documents.Where(d =&amp;gt; d.CategoryId == currentCategoryId)"&amp;gt;
    ...
&amp;lt;/FluentDataGrid&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To use this adapter, install the package and add the required code to your &lt;code&gt;Program.cs&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;builder.Services.AddDataGridODataAdapter();
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="experimental-save-paging-state-in-the-url"&gt;Experimental: Save paging state in the URL&lt;/h3&gt;
&lt;p&gt;Also added through a community contribution, it is now possible to save the paging state of a DataGrid in the URL of the page. THis opt-in functionality is available by adding a parameter to your DataGrid: &lt;code&gt;SaveStateInUrl="true"&lt;/code&gt;. When using multiple grids on a page, you can also specify a &lt;code&gt;SaveStatePrefix&lt;/code&gt; like this &lt;code&gt;SaveStatePrefix="g1"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will result in &lt;img src="https://baaijte.blob.core.windows.net/posts/files/datagrispagestate_638701554800592803.png" alt="datagrispagestate" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;This is still an experimental feature, which might cause unwanted jumping in the page when you change something in the grid.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="messagebox-html-markup-in-the-message"&gt;MessageBox: HTML Markup in the message&lt;/h2&gt;
&lt;p&gt;The MessageBox always had an option to display markup in the message shown. That was however only possible to achieve if you used the &lt;code&gt;ShowMessageBox&lt;/code&gt; \ &lt;code&gt;ShowMessageBoxAsync&lt;/code&gt; methods. With this release you can now also supply markup text through our convenience methods like &lt;code&gt;ShowConfirmationAsync&lt;/code&gt;. The code looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;private async Task ShowConfirmationAsync()
{
    var dialog = await DialogService.ShowConfirmationAsync("Are you &amp;lt;strong&amp;gt;sure&amp;lt;/strong&amp;gt; you want to delete this item? &amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;This will also remove any linked items");
    var result = await dialog.Result;
    canceled = result.Cancelled;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;which would then render like:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/messagebox_638701554801283299.png" alt="messagebox" /&gt;&lt;/p&gt;
&lt;h2 id="textfield-additional-field-types"&gt;TextField: Additional field types&lt;/h2&gt;
&lt;p&gt;With another great community contribution, we now support more types for the TextField. The Color, Search and Number options have been added to the &lt;code&gt;TextFieldType&lt;/code&gt; and can be used in your applications now.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/colorpicker_638701554802302494.png" alt="colorpicker" /&gt;&lt;/p&gt;
&lt;h2&gt;And much more...&lt;/h2&gt;
&lt;p&gt;There are many, many more PRs that got merged for this release. We can not discuss all of them here. As always, please see the &lt;a href="https://www.fluentui-blazor.net/WhatsNew" target="_blank" rel="noopener"&gt;What's new&lt;/a&gt; page on the docs site or the &lt;a href="https://github.com/microsoft/fluentui-blazor/releases" target="_blank" rel="noopener"&gt;releases page&lt;/a&gt; on GitHub for a complete overview.&lt;/p&gt;
&lt;h3&gt;Special thanks&lt;/h3&gt;
&lt;p&gt;Besides all our appreciated existing contributors, we would especially like to thank our new contributors&amp;nbsp;&lt;a href="https://github.com/bejulian" target="_blank" rel="noopener"&gt;@bejulian&lt;/a&gt;,&amp;nbsp;&lt;a href="https://github.com/svrooij" target="_blank" rel="noopener"&gt;@svrooij&lt;/a&gt;, &lt;a href="https://github.com/manobly" target="_blank" rel="noopener"&gt;@maNobly&lt;/a&gt; and &lt;a href="https://github.com/adamint" target="_blank" rel="noopener"&gt;@adamint&lt;/a&gt;!&lt;/p&gt;
&lt;h2&gt;What's next?&lt;/h2&gt;
&lt;p&gt;I'd like to point you to&amp;nbsp;&lt;a href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-5/"&gt;What's next: the Fluent UI Blazor library v5&lt;/a&gt;&amp;nbsp;here on this site and the &lt;a href="https://github.com/microsoft/fluentui-blazor/discussions/3066" target="_blank" rel="noopener"&gt;GitHub discussion&lt;/a&gt;&amp;nbsp;about that article. We value your opinion and would love to hear your thoughts! If you're celebrating, have a great holiday!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.10/</id>
    <title>What's new for the Microsoft Fluent UI Blazor library 4.10</title>
    <updated>2024-09-09T15:01:09Z</updated>
    <published>2024-09-06T12:37:00Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.10/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term="fluentui" />
    <category term="blazor" />
    <category term=".net 9" />
    <category term=".net 8" />
    <category term="fluentui" />
    <category term="blazor" />
    <category term=".net 9" />
    <category term=".net 8" />
    <content type="html">&lt;p&gt;Hi. Hope you had a great summer break. I know I did!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/intro_638612357392304210.png" alt="Typical French town" /&gt; (Bonus points if you can guess where this picture was taken)&lt;/p&gt;
&lt;p&gt;Now that we are back at it, it is time for a new release. We have in total 30 PRs merged for this release (besides some smaller, not PR based, changes) and I won't of course go into all of those here. As always, the complete list is available at the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What's New&lt;/a&gt; page on our demo and documentation site. If you want to see all the source code changes since the last release, you can go to our &lt;a href="https://github.com/microsoft/fluentui-blazor/releases"&gt;GitHub releases&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;In this blog I'll highlight the following changes and (new) features :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added .NET 9.0 support&lt;/li&gt;
&lt;li&gt;Several DataGrid enhancements&lt;/li&gt;
&lt;li&gt;Use double click to quickly select a date in the DatePicker&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;FluentMenuProvider&lt;/code&gt; component&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not really new, but bears repeating&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preview packages feed available&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="net-9-support"&gt;.NET 9 support&lt;/h2&gt;
&lt;p&gt;Now that we are almost at the RC phase of the .NET 9 development cycle, we've added this version to the frameworks we are building against! This means our packages will now include both .NET 8 and .NET 9 DLLs and you can profit from the standard Blazor enhancements like faster WASM startup time and improved Server re-connection logic in your library based applications as well.&lt;/p&gt;
&lt;h2 id="datagrid-enhancements"&gt;DataGrid enhancements&lt;/h2&gt;
&lt;p&gt;The DataGrid remains one of the most used components and it is therefore only logical this received most changes in this release. In summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add AutoFit feature to size columns automatically as good as possible&lt;/li&gt;
&lt;li&gt;Add parameter to provide labels to resize UI&lt;/li&gt;
&lt;li&gt;Don't use hover effect on header rows&lt;/li&gt;
&lt;li&gt;Fix pagination when using itemprovider&lt;/li&gt;
&lt;li&gt;Fix resizing to initial column widths&lt;/li&gt;
&lt;li&gt;Improve data refresh logic&lt;/li&gt;
&lt;li&gt;Add a new way to render column actions&lt;/li&gt;
&lt;li&gt;Trigger OnRowClick on keyboard enter in DataGrid row (a11y)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is quite a bit to unpack here, so let's go into some details&lt;/p&gt;
&lt;h3 id="autofit"&gt;AutoFit&lt;/h3&gt;
&lt;p&gt;This (community contributed!) feature in short uses an algorithm that follows the following pattern:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get the available width for the grid&lt;/li&gt;
&lt;li&gt;Loop through the columns and find (flatMap) the biggest width of each cell of the column&lt;/li&gt;
&lt;li&gt;Add up those values to see how much room the cell widths exceed the overall available width&lt;/li&gt;
&lt;li&gt;Calculate the ratio and apply said ratio to each column width while building the grid-template-columns string&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In general this works really well, but YMMV. It is an optional behavior and you can decide for yourself if you want to use this or not. One caveat is that this does &lt;strong&gt;not&lt;/strong&gt; work when your grid is using virtualization (as we can't go through all the rows then). See before and after screenshots below to see the difference.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/datagrid-autofit_638612357393944173.png" alt="Example of AutoFit in action" /&gt;&lt;/p&gt;
&lt;h3 id="resizing-to-initial-column-widths"&gt;Resizing to initial column widths&lt;/h3&gt;
&lt;p&gt;When you use Shift+r on a page with multiple DataGrids, the results were not always what you expected. Sometimes all grid columns would reset to just one single configuration.. We have now changed this so the configuration will be restored per grid.&lt;/p&gt;
&lt;h3 id="improve-data-refresh-logic"&gt;Improve data refresh logic&lt;/h3&gt;
&lt;p&gt;Another (!) great community contribution improves the data refresh logic in the &lt;code&gt;FluentDataGrid&lt;/code&gt; component. It now handles state changes, particularly those related to pagination, much better. It also addresses potential inconsistencies that could occur during rapid state changes or when other events trigger state updates.&lt;/p&gt;
&lt;h3 id="provide-new-way-to-render-column-actions"&gt;Provide new way to render column actions&lt;/h3&gt;
&lt;p&gt;Inspired by Aspire, I've added a new way to render column actions (sort, resize and options (filter)) by using a menu shown when clicking on a column header:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://github.com/user-attachments/assets/e29454a0-c5a9-4b21-a458-c6279747feb8" alt="image" /&gt;&lt;/p&gt;
&lt;p&gt;As can be seen in the image, the current sort direction is displayed on the menu item. The sort direction and filter state are shown on the header with icons.&lt;/p&gt;
&lt;p&gt;Which items are displayed on a menu is dependent on the parameters you set on the columns in the grid. When a column is not sortable, its menu won't show the 'Sort' menu item. If there is also no column options/filter specified, it will directly show the Resize UI (in this case because &lt;code&gt;ResizeType.Discrete&lt;/code&gt; has been set on the grid):&lt;/p&gt;
&lt;p&gt;&lt;img src="https://github.com/user-attachments/assets/9301cd63-dbf7-4001-aab1-4c71ff0ec551" alt="image" /&gt;&lt;/p&gt;
&lt;p&gt;When a DataGrid is not resizable and a column does not have any options ui (no filter) applied, the header button still functions as a sort button directly: &lt;img src="https://github.com/user-attachments/assets/2322e6ec-47e2-4a97-904a-a690bcdf5743" alt="newcolumnheaderuinotresizable" /&gt;&lt;/p&gt;
&lt;p&gt;The 'Bronze' column is not sortable and therefore shows a disabled cursor (not shown in the screengrab)&lt;/p&gt;
&lt;p&gt;Inspired by anthor PR mentioned above which makes it possible to supply labels to the grid's UI, there a now records for resize, sort and column options. The records supply default values when a developer does not make any changes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For now&lt;/strong&gt;, this new column action behavior is 'opt-in' and can be enabled by adding &lt;code&gt;HeaderCellAsButtonWithMenu="true"&lt;/code&gt;&amp;nbsp;(who says naming is hard?) in your data grid component tag. For the next minor release (4.11), I have some more DataGrid changes lined up and this behavior will then become the only way to work with column actions. This is done not just because of code maintenance but also to greatly improve accessibility.&lt;/p&gt;
&lt;h2 id="use-double-click-to-quickly-select-a-date-in-the-datepicker"&gt;Use double click to quickly select a date in the DatePicker&lt;/h2&gt;
&lt;p&gt;A requirement for a date picker is to be able to quickly select a certain data (for example the current date or the first of the month). With this community contribution we have added just that. You set the &lt;code&gt;DoubleClickToDate&lt;/code&gt; parameter to a specific daet and then a double click sets the component to that date.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/doubleclicktodate_638612357394740170.gif" alt="doubleclicktodate" /&gt;&lt;/p&gt;
&lt;h2 id="new-fluentmenuprovider"&gt;New &lt;code&gt;FluentMenuProvider&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;We've updated the &lt;code&gt;FluentMenu&lt;/code&gt; component to use the new &lt;code&gt;FluentMenuProvider&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This `FluentMenuProvider is a new component that needs to be placed at the bottom of your layout (like the other &lt;strong&gt;Providers&lt;/strong&gt;). It will then render all menus to this location in the HTML which allows menus to be drawn &lt;strong&gt;on top&lt;/strong&gt; of other components.&lt;/p&gt;
&lt;p&gt;You can disable this begavior by adding the &lt;code&gt;UseMenuService="false"&lt;/code&gt; parameter to the menu component tag. In that case, a menu will render at the location of where your component tag is placed in the HTML code.&lt;/p&gt;
&lt;h3 id="example"&gt;Example&lt;/h3&gt;
&lt;p&gt;The example below shows both behaviors. When &lt;code&gt;UseMenuService="false"&lt;/code&gt;, the menu is rendered where it is declared. This can pose encapsulation problems, depending on the container used (in this case, a &lt;code&gt;FluentCard&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;second&lt;/strong&gt; example uses the &lt;code&gt;FluentMenuProvider&lt;/code&gt; to display the menu. In this case, the menu is generated at the end of the HTML page and attached to the button using the &lt;code&gt;Anchor&lt;/code&gt; tag. To link the two elements, it's mandatory to use an &lt;code&gt;Id&lt;/code&gt; identifier on the clickable element and an identical &lt;code&gt;Anchor&lt;/code&gt; value on the menu.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;By default, &lt;strong&gt;all&lt;/strong&gt; &lt;code&gt;FluentMenu&lt;/code&gt;s will use this new behavior.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://github.com/user-attachments/assets/e529e508-e1fa-41b6-8dbd-776807ef22af" alt="peek_3" /&gt;&lt;/p&gt;
&lt;h2 id="preview-packages-nuget-feed"&gt;Preview packages NuGet feed&lt;/h2&gt;
&lt;p&gt;Every time a commit is pushed to our &lt;code&gt;dev&lt;/code&gt; branch, the core library NuGet package gets published to a special NuGet preview feed.&lt;/p&gt;
&lt;p&gt;To consume this preview package in your project, &lt;strong&gt;for testing purposes only&lt;/strong&gt;, you need to add this feed to your project or development environment. An example of how to do this from the CLI is shown below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dotnet nuget add source --name dotnet8
https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8/nuget/v3/index.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As the feed address shows, our packages are now created in the .NET Core Engineering environment (dnceng). A big step forward for the security, stability and longevity of the library!&lt;/p&gt;
&lt;p&gt;The code will add the feed to your nuget.config file. See How to configure NuGet behavior? to learn more.&lt;/p&gt;
&lt;p&gt;Alternatively, if you use Visual Studio, you can Install and manage packages in Visual Studio and add the &lt;code&gt;https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8/nuget/v3/index.json&lt;/code&gt; feed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This NuGet is a preliminary version and is not intended for production use. &lt;strong&gt;It is only intended to be used to test the latest features and bug fixes and provide feedback to us on those&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The official published packages can be found on the public NuGet.org site like usual.&lt;/p&gt;
&lt;h3 id="and-more"&gt;And more...&lt;/h3&gt;
&lt;p&gt;As mentioned, 30 PRs have been merged into this release. A complete overview can be found on the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What&amp;rsquo;s new&lt;/a&gt; page on the documentation site or to the &lt;a href="https://github.com/microsoft/fluentui-blazor/releases/"&gt;GitHub release&lt;/a&gt; page (including links to issues and change requests ).&lt;/p&gt;
&lt;p&gt;A special thanks go out to &lt;a href="https://github.com/macel94"&gt;@macel94&lt;/a&gt;, &lt;a href="https://github.com/danielpastoor"&gt;@danielpastoor&lt;/a&gt;, &lt;a href="https://github.com/RickyLin"&gt;@RickyLin&lt;/a&gt; and &lt;a href="https://github.com/cduluCNB"&gt;@cduluCNB&lt;/a&gt; for making their &lt;strong&gt;first&lt;/strong&gt; contributions!&lt;/p&gt;
&lt;p&gt;And, of course, we are also grateful for the continued support of all our other contributors.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore-components-4.9/</id>
    <title>What's new for the Microsoft Fluent UI Blazor library 4.9</title>
    <updated>2024-07-04T07:33:00Z</updated>
    <published>2024-07-03T20:08:32Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore-components-4.9/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term="blazor" />
    <category term="fluent ui" />
    <category term=".net 8" />
    <category term="fluentui" />
    <category term="blazor" />
    <category term=".net 8" />
    <content type="html">&lt;p&gt;Okay, I did not expect us to publish another new version before the summer holiday, but yet here we are. The amount of changes, additions, enhancements and fixes was too big to leave it lying around till later. Read on to find out about the most prominent highlights of this release. And enjoy the summer. I know I will!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New &lt;strong&gt;Rating&lt;/strong&gt; component&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DataGrid&lt;/strong&gt; enhancements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CssBuilder&lt;/strong&gt;- Add &lt;code&gt;ValidateClassNames&lt;/code&gt; configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select&lt;/strong&gt; component - Better &lt;code&gt;PlaceHolder&lt;/code&gt; support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DialogService&lt;/strong&gt; - Add &lt;code&gt;UpdateDialogAsync&lt;/code&gt; to refresh parameters and content while dialog is on screen&lt;/li&gt;
&lt;li&gt;And more...&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="new-rating-component"&gt;New Rating component&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve added a new &lt;code&gt;FluentRating&lt;/code&gt; component that lets users assign a rating to a particular element. By default, the rating can be set to between 0 and 5 stars, but both the values and icon used can be customized. The current version does not support 0.5 increments/decrements yet.&lt;/p&gt;
&lt;p&gt;This component is made &lt;strong&gt;accessible&lt;/strong&gt; by adding the option to use the arrow keys to increase (&lt;code&gt;&amp;rarr;&lt;/code&gt;/&lt;code&gt;&amp;uarr;&lt;/code&gt;) or decrease (&lt;code&gt;&amp;larr;&lt;/code&gt;/&lt;code&gt;&amp;darr;&lt;/code&gt;) the value. Pressing &lt;code&gt;Shift + {arrow}&lt;/code&gt; sets the value to either 0 or the configured maximum.&lt;/p&gt;
&lt;p&gt;The component is derived from our base input component and can be bound and used in forms&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentRating Max="10" Value="2" Label="Test" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/fluent-rating_638556343974064738.gif" alt="Example of the new Rating component in action" /&gt;&lt;/p&gt;
&lt;h2 id="datagrid"&gt;DataGrid&lt;/h2&gt;
&lt;p&gt;We've made some significant changes in the DataGrid (and related components). In short:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Better WCAG 2.2 support - one-click column resizing&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;OnCellClick&lt;/code&gt; and &lt;code&gt;SelectColumn.SelectFromEntireRow&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Have Display attribute in enumerations shown in column values&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="better-wcag-22-support---one-click-column-resizing"&gt;Better WCAG 2.2 support - One-click column resizing.&lt;/h3&gt;
&lt;p&gt;To better comply with the accessibility WCAG 2.2 standard, we&amp;rsquo;ve added 2 ways to resize columns with a single click in addition to dragging the resize bar in the header. We are using the already available column options facility for displaying the user interface for this.&lt;/p&gt;
&lt;p&gt;To enable this new functionality, a new &lt;code&gt;ResizeType&lt;/code&gt; parameter has been added to the &lt;code&gt;FluentDataGrid&lt;/code&gt;. You set its value to either &lt;code&gt;DataGridResizeType.Discrete&lt;/code&gt; to resize the column the option is shown for in steps of -10 or +10 pixels as shown in the image below or &lt;code&gt;DataGridResizeType.Exact&lt;/code&gt; to resize the column the option is shown for to the pixel value typed in.&lt;/p&gt;
&lt;p&gt;If the parameter is not supplied, the resize options will not be shown. Obviously, the &lt;code&gt;Resize&lt;/code&gt; parameter needs to be set to &lt;code&gt;true&lt;/code&gt; for this as well. Both options also present a 'reset' option to go back to the orgiginal column sizes.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/fluent-datagrid-resizetype_638556343976796455.gif" alt="Example of discrete column resizing throu column options menu" /&gt;&lt;/p&gt;
&lt;h3 id="add-selectfromentirerowand-oncellclick"&gt;Add &lt;code&gt;SelectFromEntireRow&lt;/code&gt; and &lt;code&gt;OnCellClick&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;In response to user requests, we&amp;rsquo;ve added a &lt;code&gt;SelectFromEntireRow&lt;/code&gt; parameter to the &lt;code&gt;SelectColumn&lt;/code&gt;. Setting its value to &lt;code&gt;false&lt;/code&gt; the user can not click anywhere on the grid row to select it, but only the radio button or check box can be used for that.&lt;/p&gt;
&lt;p&gt;The default value for this new parameter is set to &lt;code&gt;true&lt;/code&gt; maintain the existing current behavior.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve also added an &lt;code&gt;OnCellClick&lt;/code&gt; event to capture clicking on a specific cell.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt; (simplified)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentDataGrid Items="@People" TGridItem="Person"&amp;gt;
    &amp;lt;SelectColumn TGridItem="Person"
                  SelectMode="..."
                  SelectFromEntireRow="@SelectFromEntireRow"
                  @bind-SelectedItems="@SelectedItems" /&amp;gt;
    &amp;lt;PropertyColumn Width="100px" Property="@(p =&amp;gt; p.PersonId)" /&amp;gt;
    &amp;lt;PropertyColumn Width="300px" Property="@(p =&amp;gt; p.Name)" /&amp;gt;
    &amp;lt;PropertyColumn Width="150px" Property="@(p =&amp;gt; p.BirthDate)" /&amp;gt;
&amp;lt;/FluentDataGrid&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/fluent-datagrid-entirerow_638556343978518176.gif" alt="Example of using the new SelectFromEntireRow parameter" /&gt;&lt;/p&gt;
&lt;h3 id="have-display-attribute-in-enumerations-shown-in-column-values"&gt;Have Display attribute in enumerations shown in column values&lt;/h3&gt;
&lt;p&gt;When a &lt;code&gt;PropertyColumn&lt;/code&gt; column in a &lt;strong&gt;DataGrid&lt;/strong&gt; defines an expression, it always returns a string value. In the case of the value being an &lt;strong&gt;enumeration&lt;/strong&gt;, it simply returns the string representation of that value. By using a &lt;code&gt;DisplayAttribute&lt;/code&gt;, it is now possible to define a user-friendly name for this value.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public enum Positions
{
    employee,

    [Display(Name = "HR Manager (DA)")]    
    HRManager,

    [Display(Name = "Project Manager (DA)")]
    ProjectManager,

    [Display(Name = "Administrator (DA)")]
    Administrator
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/fluent-datagrid-enum_638556343979457565.png" alt="Example of using the DisplayAttribut with a PropertyColumn enum value " /&gt;&lt;/p&gt;
&lt;h3 id="cssbuilder---add-a-validateclassnames-configuration-option"&gt;CssBuilder - Add a &lt;code&gt;ValidateClassNames&lt;/code&gt; configuration option.&lt;/h3&gt;
&lt;p&gt;All styles used by the &lt;strong&gt;Fluent UI Blazor library&lt;/strong&gt; are included in the package. You don&amp;rsquo;t need to do anything to include these in your project.&lt;/p&gt;
&lt;p&gt;Of course you can always add your own styles too by using the &lt;code&gt;Class&lt;/code&gt; and/or &lt;code&gt;Style&lt;/code&gt; parameters on components. By default, classes are &lt;strong&gt;organized&lt;/strong&gt; and &lt;strong&gt;verified&lt;/strong&gt; by the component itself (specifically by checking that class names are valid).&lt;/p&gt;
&lt;p&gt;Some frameworks, such as &lt;em&gt;Tailwind&lt;/em&gt;, add class names which are invalidated by our verification process. For example, in Tailwind you'll see square brackets in class names , like &lt;code&gt;min-h-[16px]&lt;/code&gt; or &lt;code&gt;bg-[#ff0000]&lt;/code&gt;. We had some discussions on the repository whether such names are valid and/or following standards or not. Regardless of that, we do not want to break integration with Tailwind or other frameworks, so we have put an option in place to disable class name validation. This can be done by adding following code to the library service configuration in your &lt;code&gt;Program.cs&lt;/code&gt; file:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;builder.Services.AddFluentUIComponents(options =&amp;gt;
{
    options.ValidateClassNames = false;
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="select-component---better-placeholder-support"&gt;Select component - Better &lt;code&gt;PlaceHolder&lt;/code&gt; support.&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;FluentSelect&lt;/code&gt; component can now correctly display a placeholder text. Initially a parameter for this was not present for this component. As a 'workaround' you can now add a 'fake' first option. This option will be displayed only when the user opens the component for the first time. The option disappears when the user selects another option for the list shown and will not be presented in the list on subsequent views.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentSelect TOption="Person"
              Label="Select a person"
              Placeholder="Make a selection..."
              ... /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/fluent-select-placeholder_638556343980779674.gif" alt="Example of a FluentSelect placeholder" /&gt;&lt;/p&gt;
&lt;h3 id="dialogservice---add-updatedialogasync-to-refresh-parameters-and-content-while-dialog-is-on-screen"&gt;DialogService - Add &lt;code&gt;UpdateDialogAsync&lt;/code&gt; to refresh parameters and content while dialog is on screen&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;UpdateDialogAsync&lt;/code&gt; method is added to the &lt;code&gt;DialogService&lt;/code&gt; to enable updating all dialog box data (&lt;code&gt;Parameters&lt;/code&gt; and &lt;code&gt;Content&lt;/code&gt;) while the dialog is being shown.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example code&lt;/strong&gt; (simplified)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var dialog = await dialogService.ShowDialogAsync&amp;lt;TestDialogHeaderFooter&amp;gt;(myUser, parameters);

parameters.Title = "My new title";
parameters.PrimaryAction = "Oh yes";
parameters.Content = new() { Id = 2, Name = "Denis" };

await dialogService.UpdateDialogAsync(dialog.Id, parameters);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/fluent-dialog-update_638556343981612242.gif" alt="Example of the UpdateDialogAsync method in action" /&gt;&lt;/p&gt;
&lt;h2 id="nuget-package-preview-feed"&gt;NuGet package preview feed&lt;/h2&gt;
&lt;p&gt;Every time a commit is pushed to our &lt;code&gt;dev&lt;/code&gt; branch, the main library NuGet package gets published on a special NuGet preview feed.&lt;/p&gt;
&lt;p&gt;To consume this package in your project (&lt;strong&gt;for testing purposes only&lt;/strong&gt;), you need to add tghis feed to your project or development environment. An example of how to do this from the CLI is shown below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dotnet nuget add source --name dotnet8 https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8/nuget/v3/index.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As the feed address shows, our packages are now created in the .NET Core Engineering environment (&lt;code&gt;dnceng&lt;/code&gt;). A big step forward for the security, stability and longevity of the library!&lt;/p&gt;
&lt;p&gt;The code will add the feed to your &lt;code&gt;nuget.config&lt;/code&gt; file. See &lt;a href="https://learn.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior"&gt;How to configure NuGet behavior?&lt;/a&gt; to learn more.&lt;/p&gt;
&lt;p&gt;Alternatively, if you use Visual Studio, you can &lt;a href="https://learn.microsoft.com/nuget/consume-packages/install-use-packages-visual-studio#package-sources"&gt;Install and manage packages in Visual Studio&lt;/a&gt; and add the &lt;code&gt;https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet8/nuget/v3/index.json&lt;/code&gt; feed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;?? This NuGet is a preliminary version and is not intended for production use. It is intended to be used to test the latest features and bug fixes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you only want the use the official published packages, you can find these on the public &lt;a href="https://www.nuget.org/packages/Microsoft.FluentUI.AspNetCore.Components"&gt;NuGet.org&lt;/a&gt; site.&lt;/p&gt;
&lt;h3 id="and-more"&gt;And more...&lt;/h3&gt;
&lt;p&gt;Well, quite a few PR's have been merged in in this version again. Please see the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What&amp;rsquo;s new&lt;/a&gt; page on the documentation site or to the &lt;a href="https://github.com/microsoft/fluentui-blazor/releases/"&gt;GitHub release&lt;/a&gt; page for a complete overview (including links to issues and change requests on GitHub).&lt;/p&gt;
&lt;p&gt;A special thanks go out to &lt;a href="https://github.com/mobinseven"&gt;@mobinseven&lt;/a&gt;, &lt;a href="https://github.com/Christo262"&gt;@Christo262&lt;/a&gt; and &lt;a href="https://github.com/franklupo"&gt;@franklupo&lt;/a&gt; (Daniele Corsini, did most of the work on the Rating component) for their &lt;strong&gt;first&lt;/strong&gt; contributions!&lt;/p&gt;
&lt;p&gt;And, of course, we are also grateful for the continued support of all other contributors.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.8/</id>
    <title>What's new for the Microsoft Fluent UI Blazor library 4.8</title>
    <updated>2024-06-15T12:44:21Z</updated>
    <published>2024-06-14T12:58:51Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.8/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term=".net 8" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net 8" />
    <category term="fluentui" />
    <category term="blazor" />
    <content type="html">&lt;p&gt;Before we can all go out and enjoy our well deserved summer break, we are happy to bring you a new version of the Fluent UI Blazor library. In this version, we've added some awesome new features to existing components, fixed quite some issues, made 1 (small) breaking change and worked hard to just make the library better overall.&lt;/p&gt;
&lt;p&gt;The list of changes and additions is too long to describe all of them here. The full list can be found on our &lt;a href="https://github.com/microsoft/fluentui-blazor/releases"&gt;GitHub releases&lt;/a&gt; page or at the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What's New&lt;/a&gt; page on our demo and documentation site. In this blog the following changes and (new) features will be highlighted:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breaking change in &lt;code&gt;Option&amp;lt;TType&amp;gt;&lt;/code&gt;-class&lt;/li&gt;
&lt;li&gt;Calendar now offers date range selection&lt;/li&gt;
&lt;li&gt;List components now inherit from &lt;code&gt;FluentInputBase&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Autocomplete can sets its height automatically&lt;/li&gt;
&lt;li&gt;NavMenu now works better in mobile views&lt;/li&gt;
&lt;li&gt;ProfileMenu adds &lt;code&gt;StartTemplate&lt;/code&gt; and &lt;code&gt;EndTemplate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;TreeView now supports &lt;code&gt;Items&lt;/code&gt; and &lt;code&gt;LazyLoadItems&lt;/code&gt; parameters&lt;/li&gt;
&lt;li&gt;Preview packages feed available&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="breaking-change-in-optionttype-class"&gt;Breaking change in &lt;code&gt;Option&amp;lt;TType&amp;gt;&lt;/code&gt;-class&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;Option&amp;lt;TType&amp;gt;&lt;/code&gt;-type is a utility class that can be used to define list of options that are presented in a &lt;code&gt;FluentSelect&lt;/code&gt; or any of the other list components. We have &lt;a href="https://www.fluentui-blazor.net/Select#fromalistofoptiontit"&gt;examples of showing how this work&lt;/a&gt; available on the demo site.&lt;/p&gt;
&lt;p&gt;Originally, the &lt;code&gt;Text&lt;/code&gt; property in this class was of type &lt;code&gt;TType?&lt;/code&gt;. We've changed this in this release so that this property is now of type &lt;code&gt;string?&lt;/code&gt;, which, we think, makes much more sense. (The &lt;code&gt;Value&lt;/code&gt; property of this type remains as-is (&lt;code&gt;TType?&lt;/code&gt;).)&lt;/p&gt;
&lt;p&gt;If you are using this type, you'll most probably need to make some (small and simple) changes in your code after upgrading to this version.&lt;/p&gt;
&lt;h2 id="calendar-now-offers-date-range-selection"&gt;Calendar now offers date range selection&lt;/h2&gt;
&lt;p&gt;Besides offering more ways of selecting dates in the &lt;code&gt;FluentCalendar&lt;/code&gt; component, we have now also added date range selection capabilities.&lt;/p&gt;
&lt;p&gt;Initially, this feature will only be available for the FluentCalendar with &lt;code&gt;View=Days&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A new bindable property &lt;code&gt;SelectedDates&lt;/code&gt; is added to retrieve the selected dates. We also added a &lt;code&gt;SelectDatesHover&lt;/code&gt; method that returns a list of dates to be pre-selected on hover. The dates will be selected when the user clicks on this selection. This allows for enabling options such as selecting an entire week or work-week with a single click.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;@bind-SelectedDates:after&lt;/code&gt; command can be used to validate the content of selected dates, block or remove them if necessary, or even display an error message.&lt;/p&gt;
&lt;h3 id="code-example"&gt;Code example&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-razor"&gt;&amp;lt;FluentCalendar @bind-SelectedDates="@SelectedRangeCustomized"
                SelectDatesHover="@SelectOneWeek"
                SelectMode="CalendarSelectMode.Range" /&amp;gt;

&amp;lt;FluentCalendar @bind-SelectedDates="@SelectedDaysCustomized"
                SelectDatesHover="@Select3Days"
                SelectMode="CalendarSelectMode.Multiple" /&amp;gt;

@code
{
    private ICollection&amp;lt;DateTime&amp;gt; SelectedRangeCustomized = new List&amp;lt;DateTime&amp;gt;();
    private ICollection&amp;lt;DateTime&amp;gt; SelectedDaysCustomized = new List&amp;lt;DateTime&amp;gt;();

    private IEnumerable&amp;lt;DateTime&amp;gt; SelectOneWeek(DateTime date)
    {
        return new[] { date.StartOfWeek(), date.StartOfWeek().AddDays(6) };
    }

    private IEnumerable&amp;lt;DateTime&amp;gt; Select3Days(DateTime date)
    {
        return Enumerable.Range(0, 3).Select(i =&amp;gt; date.AddDays(i));
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/dateranges_638540522382127681.gif" alt="Examples of date range selections" /&gt;&lt;/p&gt;
&lt;h2 id="list-components-now-inherit-from-fluentinputbase"&gt;List components now inherit from &lt;code&gt;FluentInputBase&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;The list components (&lt;code&gt;FluentAutoComplete&lt;/code&gt;, &lt;code&gt;FluentCombobox&lt;/code&gt;, &lt;code&gt;FluentListbox&lt;/code&gt; and &lt;code&gt;FluentSelect&lt;/code&gt;) now inherit from &lt;code&gt;FluentInputBase&lt;/code&gt; instead of &lt;code&gt;FluentComponentBase&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This allows for the components to partake in form validation and be marked as invalid.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/list-input-base_638540522385765628.gif" alt="Example of a FluentSelect being marked invalid" /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Marking a &lt;code&gt;FluentAutocomplete&lt;/code&gt; component as invalid does &lt;strong&gt;not&lt;/strong&gt; work yet.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="autocomplete-can-set-its-height-automatically"&gt;Autocomplete can set its height automatically&lt;/h2&gt;
&lt;p&gt;We adding a new &lt;code&gt;MaxAutoHeight&lt;/code&gt; parameter to the Autocomplete component. By using this, you can make the component use an auto-height with a maximum size. If a value is not set (or is &lt;code&gt;null&lt;/code&gt;), the current behavior (a single line with horizontal scroll capabillity) is used.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-razor"&gt;&amp;lt;FluentAutocomplete MaxAutoHeight="60px" ... /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/autocomplete-autoheight_638540522388339457.gif" alt="Example of the new autoheight parameter for Autocomplete" /&gt;&lt;/p&gt;
&lt;h2 id="navmenu-now-works-better-in-mobile-views"&gt;NavMenu now works better in mobile views&lt;/h2&gt;
&lt;p&gt;Both the demo site and template created sites now work the same when a NavMenu is shown in a mobile view. Clicking on either a NavGroup's expand/collapse button or the group itself will just expand/collapse that group (when no href set on the group). Clicking a NavLink wich has an href set, will now navigate to that link and subsequently close the menu.&lt;/p&gt;
&lt;p&gt;With these change we get consistent behavior in both demo and template sites&lt;/p&gt;
&lt;h3 id="before"&gt;Before:&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/navmenu-before_638540522390146485.gif" alt="NavMenu before adjustments" /&gt;&lt;/p&gt;
&lt;h3 id="after"&gt;After:&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/navmenu-after_638540522392242704.gif" alt="NavMenu after adjustments" /&gt;&lt;/p&gt;
&lt;h2 id="profilemenu-adds-starttemplate-and-endtemplate"&gt;ProfileMenu adds &lt;code&gt;StartTemplate&lt;/code&gt; and &lt;code&gt;EndTemplate&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;We've added &lt;code&gt;StartTemplate&lt;/code&gt; and &lt;code&gt;EndTemplate&lt;/code&gt; parameters to make it possible to have custom code before/after the avatar inside the button. The CSS variable &lt;code&gt;--fluent-profile-menu-hover&lt;/code&gt; can be used to defined the hover background color (overridable).&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-xml"&gt;&amp;lt;FluentProfileMenu Initials="BG" Style="--fluent-profile-menu-hover: var(--neutral-stroke-focus); padding: 4px;"&amp;gt;
    &amp;lt;StartTemplate&amp;gt;
        Bill Gates
    &amp;lt;/StartTemplate&amp;gt;
   ...
&amp;lt;/FluentProfileMenu&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/profilemenu_638540522393514463.gif" alt="Example of new ProfileMenu parameters" /&gt;&lt;/p&gt;
&lt;h2 id="treeview-now-supports-items-and-lazyloaditems-parameters"&gt;TreeView now supports &lt;code&gt;Items&lt;/code&gt; and &lt;code&gt;LazyLoadItems&lt;/code&gt; parameters&lt;/h2&gt;
&lt;p&gt;Over time, we've received a number or requests for a TreeView component which would be able to display a large number of items. This capability is now added to the TreeView:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add an &lt;code&gt;Items&lt;/code&gt; parameter to bind a list of nodes and child nodes. Elements in the list need to implement &lt;code&gt;ITreeViewItem&lt;/code&gt;. The included &lt;code&gt;TreeViewItem&lt;/code&gt; class already implements this interface.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a &lt;code&gt;LazyLoadItems&lt;/code&gt; attribute to render HTML only when nodes are expanded.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add an &lt;code&gt;ItemTemplate&lt;/code&gt; to allow complete customization of each element.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the bindable &lt;code&gt;SelectedItem&lt;/code&gt; property to manage the selected &lt;code&gt;ITreeViewItem&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add the &lt;code&gt;OnExpandedAsync&lt;/code&gt; method to enable dynamic loading of sub-items.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="example"&gt;Example&lt;/h2&gt;
&lt;p&gt;For example, some code to display an "unlimited" tree view.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-razor"&gt;&amp;lt;FluentTreeView Items="@Items" @bind-SelectedItem="@SelectedItem" LazyLoadItems="true"&amp;gt;
    &amp;lt;ItemTemplate&amp;gt;
        @context.Text
        &amp;lt;span style="color: var(--accent-fill-rest); margin: 0 4px;"&amp;gt;
            @(context.Items == null ? "" : $"[{context.Items.Count()}]")
        &amp;lt;/span&amp;gt;
    &amp;lt;/ItemTemplate&amp;gt;
&amp;lt;/FluentTreeView&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which will be displayed as this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/treeview_638540522395636246.gif" alt="Example of TreeView with 'unlimited' items" /&gt;&lt;/p&gt;
&lt;h2 id="preview-packages-feed"&gt;Preview packages feed&lt;/h2&gt;
&lt;p&gt;By popular demand, we have re-created a preview packages feed. See &lt;a href="https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet8/NuGet/Microsoft.FluentUI.AspNetCore.Components/overview"&gt;https://dev.azure.com/dnceng/public/_artifacts/feed/dotnet8/NuGet/Microsoft.FluentUI.AspNetCore.Components/overview&lt;/a&gt; for details on how to connect your CLI or Visual Studio environments to this feed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: As the preview packages are being created directly from the development branch in the repository, they will not always be stable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As can be seen from the feed address, our packages are now being created in the .NET Core Engineering (dnceng) environment. A huge step forward for security, stability and longevity of the library!&lt;/p&gt;
&lt;h2 id="much-much-more"&gt;Much, much more&lt;/h2&gt;
&lt;p&gt;As said in the beginning of this blog, the items discussed here are only a small part of the large number of changes made in this release. Please visit the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What's New&lt;/a&gt; page on the demo and documentation site or the &lt;a href="https://github.com/microsoft/fluentui-blazor/releases"&gt;GitHub releases&lt;/a&gt; page for a complete overview.&lt;/p&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;A very special thanks goes out to these &lt;strong&gt;new&lt;/strong&gt; contributors:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/msb-incom"&gt;@msb-incom&lt;/a&gt;, &lt;a href="https://github.com/ApacheTech"&gt;@ApacheTech&lt;/a&gt;, &lt;a href="https://github.com/StevenTCramer"&gt;@StevenTCramer&lt;/a&gt;, &lt;a href="https://github.com/MarvinKlein1508"&gt;@MarvinKlein1508&lt;/a&gt;, &lt;a href="https://github.com/chris-gander"&gt;@chris-gander&lt;/a&gt;, &lt;a href="https://github.com/adospace"&gt;@adospace&lt;/a&gt; and &lt;a href="https://github.com/ksbecker"&gt;@ksbecker&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And also a warm 'thank you' to everyone else that contributed.&lt;/p&gt;
&lt;h2 id="join-the-discussion"&gt;Join the discussion&lt;/h2&gt;
&lt;p&gt;We have a new channel for 'near real-time' communication on the official .NET Discord server. Come join us at &lt;a href="https://discord.gg/M5cBTfp6J2"&gt;#fluentui-blazor @ DotNetEvolution&lt;/a&gt;. &lt;em&gt;This means we will no longer be using (or monitoring) the #blazor channel on the FAST Discord server.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="nuget"&gt;NuGet&lt;/h2&gt;
&lt;p&gt;The packages will be released on NuGet in the coming days.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.7/</id>
    <title>What's new for the Microsoft Fluent UI Blazor library 4.7</title>
    <updated>2024-04-23T11:19:57Z</updated>
    <published>2024-04-23T09:51:47Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.7/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term=".net 8" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net 8" />
    <category term="fluentui" />
    <category term="blazor" />
    <content type="html">&lt;p&gt;With this release we don't have any new components to present to you. We do however have a nice set of new features, new parameters and fixes. A complete overview can be found on the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What&amp;rsquo;s new&lt;/a&gt; page in the demo and documentation site or in the repository on the &lt;a href="https://github.com/microsoft/fluentui-blazor/releases/tag/v4.7.0"&gt;Releases page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="breaking-change"&gt;Breaking change&lt;/h2&gt;
&lt;p&gt;Albeit a very small one, there is a breaking change in this release so please be aware.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To avoid conflicts with existing methods in other libraries, we've decided to place all our extension methods in an &lt;strong&gt;Extensions&lt;/strong&gt; (sub)namespace.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is a minor &lt;strong&gt;breaking change. &lt;/strong&gt;If you run into this&lt;strong&gt;,&amp;nbsp;&lt;/strong&gt;you just need to add an new &lt;code&gt;using&lt;/code&gt; statement for the new namespace to fix any errors. See the &lt;a href="https://www.fluentui-blazor.net/UpgradeGuide"&gt;Upgrade Guide&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h2 id="new-features-and-parameters"&gt;New features and parameters&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Calendar and DatePicker&lt;/strong&gt;: corrected the way months and days are calculated, and added a &lt;code&gt;View&lt;/code&gt; parameter to the &lt;code&gt;FluentDatePicker&lt;/code&gt; components.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grid&lt;/strong&gt;: new &lt;code&gt;AdaptiveRendering&lt;/code&gt; property.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wizard&lt;/strong&gt;: new &lt;code&gt;StepSequence&lt;/code&gt; attribute.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DataGrid&lt;/strong&gt;: Ability to clear the existing sorts; Addition of &lt;code&gt;Width&lt;/code&gt; to Columns component; And improvement of &lt;code&gt;SortBy&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MenuButton&lt;/strong&gt;: Added &lt;code&gt;ChildContent&lt;/code&gt; to improve content customization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Popover&lt;/strong&gt;: Added &lt;code&gt;FixedPlacement&lt;/code&gt; to solve certain positioning problems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PullToRefresh&lt;/strong&gt;: Added &lt;code&gt;DragThreshold&lt;/code&gt; to specify a threshold distance before showing a tip.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="calendar-and-datepicker"&gt;Calendar and DatePicker&lt;/h3&gt;
&lt;p&gt;We have completely overhauled the way months and days are calculated to be able to support many more &amp;ldquo;Cultures&amp;rdquo; (e.g. &lt;code&gt;fa-IR&lt;/code&gt;) than we did before.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentCalendar Culture="@(new CultureInfo("fa-IR"))"&amp;gt;&amp;lt;/FluentCalendar&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using the above could result in something like: &lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/Culture-fa-IR_638494658357214552.gif" alt="Culture fa IR" /&gt; See the &lt;a href="https://www.fluentui-blazor.net/DateTime#culture"&gt;example in the demo site&lt;/a&gt; to try out many more cultures.&lt;/p&gt;
&lt;p&gt;We also added the option to use the DatPicker as a month or year selector.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentDatePicker View="CalendarViews.Months" /&amp;gt;
&amp;lt;FluentDatePicker View="CalendarViews.Years" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which will give you: &lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/Months-Years_638494658358282168.gif" alt="Months Years" /&gt;&lt;/p&gt;
&lt;h2 id="grid"&gt;Grid&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve added a new &lt;code&gt;AdaptiveRendering&lt;/code&gt; parameter to the &lt;code&gt;FluentGrid&lt;/code&gt; component.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AdaptiveRendering&lt;/code&gt; allows you to &lt;strong&gt;not generate&lt;/strong&gt; the HTML code of the &lt;code&gt;FluentGridItem&lt;/code&gt; based on the &lt;code&gt;HiddenWhen&lt;/code&gt; parameter value. In other words, when &lt;code&gt;AdaptiveRendering=false&lt;/code&gt; (default), the contents of a &lt;code&gt;FluentGridItem&lt;/code&gt; is simply hidden by CSS styles, whereas if &lt;code&gt;AdaptiveRendering=true&lt;/code&gt;, the content of the &lt;code&gt;FluentGridItem&lt;/code&gt; is not rendered by Blazor. Obviously this need interactivity so his will not work when using SSR.&lt;/p&gt;
&lt;p&gt;This addition helps to improve efficiency and performance by not sending/rendering content where constucting the content is expensive or time consuming.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentGrid AdaptiveRendering="true"&amp;gt;
   ...
&amp;lt;/FluentGrid&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/Grid-AdaptiveRendering_638494658363473515.gif" alt="Grid AdaptiveRendering" /&gt;&lt;/p&gt;
&lt;h2 id="wizard"&gt;Wizard&lt;/h2&gt;
&lt;p&gt;We added a new &lt;code&gt;StepSequence&lt;/code&gt; parameter to allow direct access to previous steps or to all steps in a &lt;code&gt;FluentWizard&lt;/code&gt; component.&lt;/p&gt;
&lt;p&gt;The possible values (enum) for this parameter are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linear&lt;/strong&gt; : The user can only access the next/previous step using the Next/Previous buttons.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Any&lt;/strong&gt;: The user can access all steps by clicking on an item.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visited&lt;/strong&gt;: The user can move on to the next step using the Next button, or go to any previous step already visited.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course, only non-deactivated steps are accessible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We preserve the previous behavior by making the default mode &lt;code&gt;Linear&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/Wizard-StepSequence_638494658366960081.gif" alt="Wizard StepSequence" /&gt;&lt;/p&gt;
&lt;h2 id="datagrid"&gt;DataGrid&lt;/h2&gt;
&lt;p&gt;We enhanced the &lt;code&gt;FluentDataGrid&lt;/code&gt; in a number of ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added the option to clear a previously set column sort&lt;/li&gt;
&lt;li&gt;Allow for &lt;code&gt;Width&lt;/code&gt; to be specified on the column level&lt;/li&gt;
&lt;li&gt;Allow &lt;code&gt;SortBy&lt;/code&gt; to be specified on &lt;code&gt;PropertyColumn&lt;/code&gt;'s&lt;/li&gt;
&lt;li&gt;Allow resizing columns by using the keyboard&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="clear-sort"&gt;Clear sort&lt;/h3&gt;
&lt;p&gt;Previously, when a sort was applied on a column (by clicking the header button), there was no option to remove the sort. It is now possible to right-click (or use &lt;code&gt;Ctl+Enter&lt;/code&gt;) on the column header to &lt;strong&gt;delete the sort&lt;/strong&gt; and restore the default situation. Obviously this can not be used to clear the default sort of a DataGrid&lt;/p&gt;
&lt;h3 id="column-width"&gt;Column Width&lt;/h3&gt;
&lt;p&gt;It is now possible to define column widths using a new &lt;code&gt;Width&lt;/code&gt; attribute when defining columns. When specifying widths on a column level, these values will be used to generate the DataGrid's &lt;code&gt;GridTemplateColumns&lt;/code&gt; parameter. You can choose to use &lt;code&gt;GridTemplateColumns&lt;/code&gt; &lt;strong&gt;OR&lt;/strong&gt; &lt;code&gt;Width&lt;/code&gt; to define column widths but not both.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentDataGrid Items="@people"&amp;gt;
    &amp;lt;PropertyColumn Width="100px" Property="@(p =&amp;gt; p.PersonId)" /&amp;gt;
    &amp;lt;PropertyColumn Width="50%"   Property="@(p =&amp;gt; p.Name)" /&amp;gt;
    &amp;lt;PropertyColumn Width="50%"   Property="@(p =&amp;gt; p.BirthDate)" /&amp;gt;
&amp;lt;/FluentDataGrid&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="sortby"&gt;SortBy&lt;/h3&gt;
&lt;p&gt;Previously, the &lt;code&gt;PropertyColumn&lt;/code&gt; did not support the &lt;code&gt;SortBy&lt;/code&gt; parameter. It is now possible to provide a default sorting configuration, adding the ability to define a custom implementation of &lt;code&gt;SortBy&lt;/code&gt;. For more details see the &lt;a href="https://github.com/microsoft/fluentui-blazor/pull/1877"&gt;PR in the repository&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="resizing-columns"&gt;Resizing columns&lt;/h3&gt;
&lt;p&gt;To improve the accessibility of the DataGrid, we enabled resizing of columns through the keyboard. (Obviously, this only works for grids where the &lt;code&gt;Resizable&lt;/code&gt; parameter has been set to &lt;code&gt;true&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;You can use the &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;-&lt;/code&gt; keys to resize the column the focused header belongs to. Incrementing and/or decrementing the width is done in steps of 10 pixels at a time. You can reset the grid to it's original initial column widths by pressing &lt;code&gt;Shift + r&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/grid-resize-keyboard%202_638494658371465316.gif" alt="grid-resize-keyboard 2" /&gt;&lt;/p&gt;
&lt;h2 id="menubutton"&gt;MenuButton&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;ChildContent&lt;/code&gt; parameter has been added to the &lt;code&gt;FluentMenuButton&lt;/code&gt; component. This makes it possible to manually supply &lt;code&gt;FluentMenuItem&lt;/code&gt; children and thus use all menu item's parameters (such as &lt;code&gt;Disabled&lt;/code&gt;).&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;img src="https://baaijte.blob.core.windows.net/posts/files/MenuButtonChildren_638494658372724090.png" alt="Menu Button Children" /&gt;&lt;/p&gt;
&lt;h2 id="popover"&gt;Popover&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve added a &lt;code&gt;FixedPlacement&lt;/code&gt; attribute to the &lt;code&gt;FluentPopover&lt;/code&gt; component to resolve certain positioning problems. This value indicates whether the region is positioned using &lt;code&gt;position: fixed&lt;/code&gt;. or uses &lt;code&gt;position : absolute&lt;/code&gt;. Fixed positioning allows the region to be independent of parent containers.&lt;/p&gt;
&lt;h2 id="pulltorefresh-request"&gt;PullToRefresh Request&lt;/h2&gt;
&lt;p&gt;To avoid starting to display the &amp;ldquo;Tip&amp;rdquo; of the &lt;strong&gt;PullToRefresh&lt;/strong&gt; component immediately, the new parameter &lt;code&gt;DragThreshold&lt;/code&gt; hides the &amp;ldquo;Tip&amp;rdquo; until it has been pulled to at least &lt;code&gt;DragThreshold&lt;/code&gt;'s value in pixels.&lt;/p&gt;
&lt;h2 id="other-fixes-and-changes"&gt;Other fixes and changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AppBar&lt;/strong&gt;: Apply &amp;ldquo;role&amp;rdquo; requirements (a11y) &lt;a href="https://github.com/microsoft/fluentui-blazor/pull/1871"&gt;#1871&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Input&lt;/strong&gt; NotifyFieldChanged was called twice for all &lt;code&gt;FluentInputBase&lt;/code&gt; derived components &lt;a href="https://github.com/microsoft/fluentui-blazor/pull/1846"&gt;#1846&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paginator&lt;/strong&gt; spelling issue in &lt;code&gt;FluentPaginator.razor.cs&lt;/code&gt; &lt;a href="https://github.com/microsoft/fluentui-blazor/pull/1829"&gt;#1829&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select&lt;/strong&gt; Allow value to be set when component is disabled &lt;a href="https://github.com/microsoft/fluentui-blazor/pull/1892"&gt;#1892&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slider&lt;/strong&gt; Fixes thumb redraw issues &lt;a href="https://github.com/microsoft/fluentui-blazor/pull/1873"&gt;#1873&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wizard&lt;/strong&gt; Fix the Wizard bullet number style &lt;a href="https://github.com/microsoft/fluentui-blazor/pull/1905"&gt;#1905&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="icon-updates"&gt;Icon updates&lt;/h2&gt;
&lt;p&gt;We updated to the Fluent UI System Icons release 1.1.237. This brings in the following additions and changes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What's new (Name / Size(s) / Variant(s))&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Book / 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Camera Arrow Up / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Chat Settings / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Circle Highlight / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Circle Hint / 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Circle Shadow / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Content View / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Double Tap Swipe Down / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Double Tap Swipe Up / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Flash Sparkle / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Location Ripple / 12 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Search Square / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Settings Chat / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Share Multiple / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Slide Play / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What's updated (Name / Size(s) / Variant(s))&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Book Add / 28 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Book Contacts / 20, 24, 28, 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Book / 28 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Previous version&lt;/h2&gt;
&lt;p&gt;We backported a bunch of these changes and additions to the previous version again as well. Please see the&amp;nbsp;&lt;a href="https://calm-sea-053fa6a03-archivesv3.westeurope.3.azurestaticapps.net/WhatsNew"&gt;What's new?&lt;/a&gt;&amp;nbsp;page on the v3 demo and documentation site. The v3.6.2 packages are &lt;a title="v3 packages on NuGet" href="https://www.nuget.org/profiles/fast" target="_blank" rel="noopener"&gt;available on NuGet&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;h2 id="thank-you"&gt;Thank you!&lt;/h2&gt;
&lt;p&gt;A special thanks goes out to these first-time contributors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/kylejuliandev"&gt;@kylejuliandev&lt;/a&gt;, &lt;a href="https://github.com/f4n0"&gt;@f4n0&lt;/a&gt;, &lt;a href="https://github.com/vrassouli"&gt;@vrassouli&lt;/a&gt; and &lt;a href="https://github.com/StefanJansson"&gt;@StefanJansson&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And, of course, we also thank all our other contributors for their fixes, changes, enhancements, comments and suggestions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Let's keep working together to make this a great Blazor component library!&lt;/strong&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.6/</id>
    <title>What's new for the Microsoft Fluent UI Blazor library 4.6</title>
    <updated>2024-03-29T14:00:21Z</updated>
    <published>2024-03-19T09:33:57Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.6/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term=".net 8" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net 8" />
    <category term="fluentui" />
    <category term="blazor" />
    <content type="html">&lt;p&gt;This Easter you can hunt for new components and updated features instead of eggs. We are happy to present you version 4.6 of the library. In short, the additions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PullToRefresh component&lt;/li&gt;
&lt;li&gt;ProfileMenu component&lt;/li&gt;
&lt;li&gt;Global key capture functionality&lt;/li&gt;
&lt;li&gt;Wizard and edit form enhancement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As always, the complete set of changes can be found on the &lt;a href="https://www.fluentui-blazor.net/WhatsNew"&gt;What's new?&lt;/a&gt; page on our demo and documentation site.&lt;/p&gt;
&lt;h2 id="pulltorefresh"&gt;PullToRefresh&lt;/h2&gt;
&lt;p&gt;The new &lt;strong&gt;FluentPullToRefresh&lt;/strong&gt; component is an interaction element commonly used in web and mobile applications. The touch gesture initiates an event callback that you subscribe to and implement to retrieve or refresh the data that is displayed inside the component.&lt;/p&gt;
&lt;p&gt;The user initiates the gesture by sliding a finger down from the top of the component (or up from the bottom, depending on the setting of the &lt;code&gt;Direction&lt;/code&gt; parameter). . &lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/PullToRefresh1_638473172210280592.gif" alt="Pull To Refresh1" /&gt;&lt;/p&gt;
&lt;p&gt;As can be seen from the image, icons are being used to give the user tips on the status of the pull action. These are all templated parameters that can be configured by the developer. In the image below, the icons have been replaced by text and are only shown once a pull action has been initiated.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/PullToRefresh2_638473172211605018.gif" alt="Pull To Refresh2" /&gt;&lt;/p&gt;
&lt;p&gt;The source code for this example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;FluentPullToRefresh Direction="@PullDirection.Down"
                     OnRefreshAsync="OnRefreshAsync"
                     ShowStaticTip="false"
                     Style="height: 400px; width: 400px; "&amp;gt;
    &amp;lt;PullingTemplate&amp;gt;Pull to refresh&amp;lt;/PullingTemplate&amp;gt;
    &amp;lt;ReleaseTemplate&amp;gt;Release to update&amp;lt;/ReleaseTemplate&amp;gt;
    &amp;lt;CompletedTemplate&amp;gt;Update completed&amp;lt;/CompletedTemplate&amp;gt;
    &amp;lt;ChildContent&amp;gt;
        &amp;lt;FluentListbox Height="300px" Items="@Enumerable.Range(1, ItemsCount).Select(i =&amp;gt; $"Item {i}")" /&amp;gt;
    &amp;lt;/ChildContent&amp;gt;
&amp;lt;/FluentPullToRefresh&amp;gt;


@code {
    int RefreshCount = 0;
    int ItemsCount = 2;

    public async Task&amp;lt;bool&amp;gt; OnRefreshAsync()
    {
        RefreshCount++;
        DemoLogger.WriteLine($"Pull down refresh count {RefreshCount}");
        await Task.Delay(1000);
        ItemsCount += 3;
        return true;
    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Normally this functionality is used on touch screen devices, like a mobile phone. To enable the functionality on (most) desktop browsers on non-touch screen devices, an emulation script is included and automatically loaded by the component. The interaction is then initiated by a mouse click and drag. You can disable this emulation with the &lt;code&gt;EmulateTouch&lt;/code&gt; parameter.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;OnRefreshAsync&lt;/code&gt; method is called when the user releases the pull tip at the correct moment (once a configurable distance has been covered). You can have the method return &lt;code&gt;true&lt;/code&gt; to indicate there is more data to be fetched. If it returns &lt;code&gt;false&lt;/code&gt; a &amp;ldquo;No more data available&amp;rdquo; tip can be displayed (which can be configured with the &lt;code&gt;NoDataTemplate&lt;/code&gt; parameter).&lt;/p&gt;
&lt;h2 id="profile-menu"&gt;Profile Menu&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;FluentProfileMenu&lt;/code&gt; is a component implementing functionality commonly found in the top-right corner of a page or site. It provides options related to the user's account. Within this menu, users can access features such as viewing their account details, adjusting settings, and logging out. It serves as a convenient hub for managing account-related actions.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/ProfileMenu_638473172212356639.gif" alt="Profile Menu" /&gt;&lt;/p&gt;
&lt;p&gt;The exact content can be tweaked by using the components' parameters:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-xml"&gt;&amp;lt;FluentProfileMenu  Image="@DataSource.SamplePicture"
                    Status="@PresenceStatus.Available"
                    HeaderLabel="Microsoft"
                    Initials="BG"
                    FullName="Bill Gates"
                    EMail="bill.gates@microsoft.com"
                    Style="min-width: 330px;" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="global-key-capture"&gt;Global key capture&lt;/h2&gt;
&lt;p&gt;It is now possible to capture keystrokes globally on a page or component.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/GlobalKeyCode_638473172213025380.gif" alt="Global Key Code" /&gt;&lt;/p&gt;
&lt;p&gt;Examples of how this can be used are available at the &lt;a href="https://www.fluentui-blazor.net/KeyCode"&gt;documentation page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="wizard-and-editform-enhancement"&gt;Wizard and EditForm enhancement&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve added a new &lt;code&gt;FluentEditForm&lt;/code&gt; component which inherits the standard &lt;code&gt;EditForm&lt;/code&gt; component, but allows for correctly handling form validations within our Fluent components.&lt;/p&gt;
&lt;p&gt;Throughout your project, you can use &lt;code&gt;FluentEditForm&lt;/code&gt; instead of &lt;code&gt;EditForm&lt;/code&gt;. For now we have updated the &lt;strong&gt;Wizard&lt;/strong&gt; component to use this. We&amp;rsquo;ll be updating other components to handle forms in a similar way moving forward.&lt;/p&gt;
&lt;p&gt;Example: &lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/WizardEditForm_638473172213825700.gif" alt="Wizard Edit Form" /&gt;&lt;/p&gt;
&lt;h2 id="new-and-updated-icons"&gt;New and updated icons&lt;/h2&gt;
&lt;p&gt;We updated to the Fluent UI System Icons release 1.1.233&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What's new (Name / Size(s) / Variant(s))&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Classification / 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Document Target / 20, 24, 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Emoji Meme / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Hand Point / 16, 20, 24, 28, 32, 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Mail Read Briefcase / 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;People Subtract / 20, 24, 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Person Alert Off / 16, 20, 24, 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Shopping Bag Add / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Spatula Spoon / 16, 20, 24, 28, 32, 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Accessibility Error / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Accessibility Question Mark / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Arrow Down Exclamation / 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Arrow Sort Up Lines / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Arrow Up Exclamation / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Bench / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Building Lighthouse / 28 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Clock Bill / 16, 20, 24, 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Data Usage Settings / 16, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Data Usage / 16 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Edit Person / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Highway / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Laptop Person / 20, 24, 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Location Ripple / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Mail Arrow Double Back / 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Mail Briefcase / 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;People Add / 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Person Alert / 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Road / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Save / 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Tab Desktop Multiple Sparkle / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Tab Desktop Multiple / 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Vehicle Tractor / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What's updated (Name / Size(s) / Variant(s))&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Classification / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Emoji Add / 20 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Emoji Edit / 20 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Emoji Sparkle / 20 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Emoji / 20 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Accessibility Checkmark / 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Arrow Down Exclamation / 16, 20 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Arrow Sort Down Lines / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Building Lighthouse / 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Calendar Video / 20, 24, 28 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Options / 16, 28, 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Person Alert / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Tab Desktop Multiple Bottom / 24 / Filled&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="other-changes"&gt;Other changes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;FluentAccordion&lt;/code&gt;: the &lt;code&gt;Expanded&lt;/code&gt; parameter of the Accordion element now supports 2-way binding (&lt;code&gt;@bind-Expanded&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FluentAppBarItem&lt;/code&gt;: Added &lt;code&gt;OnClick&lt;/code&gt; event to AppBarItems.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FluentButton&lt;/code&gt;: Fixed padding on the 'loading spinner' in case of no text being displayed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FluentPaginator&lt;/code&gt;: Added the ability to disable pagination buttons with &lt;code&gt;Disabled&lt;/code&gt; parameter.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FluentPersona&lt;/code&gt;: Can handle 'empty' names (&lt;code&gt;Name=""&lt;/code&gt;) now and added an &lt;code&gt;OnClick&lt;/code&gt; event.&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.5/</id>
    <title>What's new for the Microsoft Fluent UI Blazor libraries 3.6 and 4.5</title>
    <updated>2024-03-08T11:07:33Z</updated>
    <published>2024-03-07T11:19:01Z</published>
    <link href="https://baaijte.net/blog/microsoft-fluentui-aspnetcore.components-4.5/" />
    <author>
      <name>test@example.com</name>
      <email>Vincent Baaij</email>
    </author>
    <category term=".net 8" />
    <category term=".net 7" />
    <category term="blazor" />
    <category term="fluentui" />
    <category term=".net 6" />
    <category term=".net 8" />
    <category term=".net 7" />
    <category term="fluentui" />
    <category term="blazor" />
    <category term=".net 6" />
    <content type="html">&lt;p&gt;We have new releases! Version 3.6 for .NET 6 and 7 and version 4.6 for .NET 8 are here. Happy to report that a huge number of issues has been fixed for both versions (both by us &lt;strong&gt;and&lt;/strong&gt; by contributors). Let's dive into the details...&lt;/p&gt;
&lt;h2 id="new-appbar-component-45-only"&gt;New: AppBar component (4.5 only)&lt;/h2&gt;
&lt;p&gt;Based on the work done by the .NET Aspire team (this library powers the .NET Aspire Dashboard!) a new &lt;code&gt;FluentAppBar&lt;/code&gt; component has been added. The AppBar shows AppBarItems in a vertical fashion just like the one you'll find in Teams and the (new) Outlook. It automatically shows '...' in the bottom when the number of applications is larger then the available vertical space. You can control whether that popover shows a search bar or not.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/FluentAppBar%203_638454075226750809.gif" alt="FluentAppBar in action" /&gt;&lt;/p&gt;
&lt;h2 id="changes-updates-and-additions-that-apply-to-both-versions"&gt;Changes, updates and additions that apply to both versions&lt;/h2&gt;
&lt;p&gt;We are not listing all the changes in this post but just the most prominent ones. To see the full list&amp;nbsp; changes, we have GitHub release pages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/fluentui-blazor/releases/tag/v3.6.0" target="_blank" rel="noopener"&gt;version 3.6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/fluentui-blazor/releases/tag/v4.5.0" target="_blank" rel="noopener"&gt;version 4.5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id="demo-site-search-for-components"&gt;Demo site: Search for components&lt;/h3&gt;
&lt;p&gt;With almost 70 components in the library, it can sometimes get a bit hard to find the right documentation and example page. To help you navigate the site, we've added a component search function to the header (in desktop view only).&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/demo%20site%20search_638454075227857677.png" alt="demo site search" /&gt;&lt;/p&gt;
&lt;h3 id="grid-spacing-and-margins"&gt;Grid: Spacing and margins&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;FluentGrid&lt;/code&gt; became wider when the value for the &lt;code&gt;Spacing&lt;/code&gt; parameter was increased. This has been fixed.&lt;/p&gt;
&lt;p&gt;Before:&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/grid-before_638454075228694268.gif" alt="grid before" /&gt;&lt;/p&gt;
&lt;p&gt;After: &lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/grid-after_638454075229767237.gif" alt="grid after" /&gt;&lt;/p&gt;
&lt;h3 id="menu-and-popover-add-threshold-parameters"&gt;Menu and Popover: Add Threshold parameters&lt;/h3&gt;
&lt;p&gt;Both the Menu and Popover component internally use the AnchoredRegion component to 'attach' their output to antoher element. The AnchoredRegion component exposes the &lt;code&gt;VerticalThershold&lt;/code&gt; and &lt;code&gt;HorizontalThreshold&lt;/code&gt; parameters to set the minimum space needed to render the attachment in the preferred location. This allows to create an automatic 'reflow' in case there is not enough space available. The video below shows a Popover which is displayed below a button. It automatically switches to be shown above the button if it doesn't fit anymore when resizing the window. In the 'before' situation, it would remain in the smae location and would get cutoff on resizing.&lt;/p&gt;
&lt;p&gt;With this change it is now possible to set the thresholds for both the Menu and Popover components. See the video below for the effect.&lt;/p&gt;
&lt;p&gt;&lt;video style="display: block; margin-left: auto; margin-right: auto;" controls="controls" width="648" height="324"&gt;&lt;source type="video/mp4" src="https://baaijte.blob.core.windows.net/posts/files/popover-updated.mp4" /&gt;&lt;/video&gt;&lt;/p&gt;
&lt;h3 id="datagrid-add-a-filtered-property-and-visual-indicator-to-propertycolumn"&gt;DataGrid: Add a Filtered property and visual indicator to PropertyColumn&lt;/h3&gt;
&lt;p&gt;When using multiple filters in a DataGrid, it was not easy to see if a filter was applied for a specific column. A &lt;code&gt;FilterDismiss&lt;/code&gt; icon will now be shown when a filter is being applied on a column.&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://baaijte.blob.core.windows.net/posts/files/DataGid-FilterDismiss_638454075230470050.png" alt="DataGid FilterDismiss" /&gt;&lt;/p&gt;
&lt;h3 id="menubutton-added-overlay-and-more-appearance-options"&gt;MenuButton: Added overlay and more appearance options&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;FluentOverlay&lt;/code&gt; has been added so clicking outside the menu closes it&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;ButtonAppearance&lt;/code&gt; parameter has been added to make changing the button appearance possible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example have been added to the demo site to show this. Example of the overlay being used: &lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://github.com/microsoft/fluentui-blazor/assets/1761079/600f4257-4f1c-419b-bce0-c4f93aec529b" alt="issue-#1594" /&gt;&lt;/p&gt;
&lt;h3 id="card-add-a-minimalstyle-parameter"&gt;Card: Add a &lt;code&gt;MinimalStyle&lt;/code&gt; parameter&lt;/h3&gt;
&lt;p&gt;By default the &lt;code&gt;FluentCard&lt;/code&gt; component is a visual container and design system provider. Cards are snapshots of content that are typically used in a group to present collections of related information. Thus, by design, the &lt;code&gt;FluentCard&lt;/code&gt; component includes all the styles required for a good representation of the other components included in it. This adds a large number of styles such as &lt;code&gt;justify-content; align-items; gap; width;&lt;/code&gt; and &lt;strong&gt;over 80 other CSS variables&lt;/strong&gt;. The amount of code generated can become quite important, especially if you use this component a lot of times, for example in a large list.&lt;/p&gt;
&lt;p&gt;To prevent this, you can now use the &lt;code&gt;MinimalStyle&lt;/code&gt; parameter. This will remove all the default styles from the &lt;code&gt;FluentCard&lt;/code&gt; component. and apply a currated set of styles throug an isolated CSS. This will allow you to use the &lt;code&gt;FluentCard&lt;/code&gt; component as a simple container with only the styles needed to draw the box-shadow (and some other required style rules).&lt;/p&gt;
&lt;h4 id="example-usage"&gt;Example usage&lt;/h4&gt;
&lt;pre&gt;&lt;code class="language-xml"&gt;&amp;lt;FluentCard MinimalStyle="true"&amp;gt;
    &amp;lt;p&amp;gt;Just some content in a card (with a button that does not do anything).&amp;lt;/p&amp;gt;

    &amp;lt;FluentButton Appearance="Appearance.Accent"&amp;gt;Hello&amp;lt;/FluentButton&amp;gt;
    &amp;lt;p&amp;gt;No Width or Height has been specified.&amp;lt;/p&amp;gt;
&amp;lt;/FluentCard&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://github.com/microsoft/fluentui-blazor/assets/8350694/980fe786-29b4-4c91-91c2-e00354072229" alt="image" /&gt;&lt;/p&gt;
&lt;h4 id="code-generated"&gt;Code generated&lt;/h4&gt;
&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;div class="fluent-card-minimal-style"&amp;gt;
  &amp;lt;p&amp;gt;Just some content in a card (with a button that does not do anything).&amp;lt;/p&amp;gt;
  &amp;lt;fluent-button type="button" appearance="accent" class="accent"&amp;gt;Hello&amp;lt;/fluent-button&amp;gt;
  &amp;lt;p&amp;gt;No Width or Height has been specified.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id="default-fluentcard-code-generated"&gt;Default &lt;code&gt;FluentCard&lt;/code&gt; code generated&lt;/h4&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://github.com/microsoft/fluentui-blazor/assets/8350694/57c0a046-0de9-45d6-8f55-2b85845943a5" alt="image" /&gt;&lt;/p&gt;
&lt;h3 id="tooltip-additional-behavior-added"&gt;Tooltip: Additional behavior added&lt;/h3&gt;
&lt;h2 id="fluenttooltip-add-the-hidetooltiponcursorleave-property"&gt;[FluentTooltip] Add the HideTooltipOnCursorLeave property&lt;/h2&gt;
&lt;p&gt;We have added a &lt;code&gt;HideTooltipOnCursorLeave&lt;/code&gt; parameter to the &lt;code&gt;FluentTooltip&lt;/code&gt; component. You can now choose to use the default behavior:&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://github.com/microsoft/fluentui-blazor/assets/8350694/5e81c939-e1e4-494f-93cd-c8ac5ad18844" alt="Tooltip-Before" /&gt;&lt;/p&gt;
&lt;p&gt;Or use a new behavior:&lt;/p&gt;
&lt;p&gt;&lt;img style="display: block; margin-left: auto; margin-right: auto;" src="https://github.com/microsoft/fluentui-blazor/assets/8350694/d5cc52f1-7ae0-423e-a87c-9d9892ac3da4" alt="Tooltip-After" /&gt;&lt;/p&gt;
&lt;p&gt;The behavior can also be set through the global configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csharp"&gt;builder.Services.AddFluentUIComponents(configuration =&amp;gt;
{
    configuration.HideTooltipOnCursorLeave = true;
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="icons-updated-to-fluent-ui-system-icons-v11230"&gt;Icons: updated to Fluent UI System Icons v1.1.230&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What's new (Name / Size(s) / Variant(s))&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Checkmark Circle Warning / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Cloud Arrow Right / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Document Arrow Down / 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Document Signature / 16, 20, 24, 28, 32, 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Home Garage / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Image Split / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Laptop / 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Line Flow Diagonal Up Right / 16, 20, 24, 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Mail Arrow Clockwise / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Person Passkey / 16, 20, 24, 28, 32, 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Person Prohibited / 32 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Person Ribbon / 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Plant Cattail / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Storage / 16, 28, 32, 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Video Clip Wand / 16, 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;li&gt;Window Fingerprint / 16, 20, 24, 28, 32, 48 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What's updated (Name / Size(s) / Variant(s))&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Video Add / 20, 24 / Filled &amp;amp; Regular&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;No release notes were made available for the versions between 1.1.226 and this one&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Special thanks to &lt;a href="https://github.com/StevenRasmussen"&gt;@StevenRasmussen&lt;/a&gt;, &lt;a href="https://github.com/lus"&gt;@lus&lt;/a&gt;, &lt;a href="https://github.com/bruno-garcia"&gt;@bruno-garcia&lt;/a&gt;, &lt;a href="https://github.com/CV-souryu"&gt;@CV-souryu&lt;/a&gt;, &lt;a href="https://github.com/Hona"&gt;@Hona&lt;/a&gt;, &lt;a href="https://github.com/digitaldirk"&gt;@digitaldirk&lt;/a&gt;, &lt;a href="https://github.com/c0g1t8"&gt;@c0g1t8&lt;/a&gt;, &lt;a href="https://github.com/thebarrettlo"&gt;@thebarrettlo&lt;/a&gt;, &lt;a href="https://github.com/weskroesbergen"&gt;@weskroesbergen&lt;/a&gt;, &lt;a href="https://github.com/joriverm"&gt;@joriverm&lt;/a&gt; and &lt;a href="https://github.com/NickHirras"&gt;@NickHirras&lt;/a&gt; for their contributions!&lt;/p&gt;</content>
  </entry></feed>