⭐ We appreciate your star, it helps!
The Microsoft.Fast.Components.FluentUI
package provides a set of Blazor components which you can use to build applications that have
the look and feel or modern Microsoft applications. Some of the componets are wrappers around Microsoft's official FluentUI Web Components. Others are components
that leverage the Fluent UI design system or make it easier to work with Fluent UI. To get up and running with the library, see the 'Getting Started' section below.
The source for the library is hosted in the fluentui-blazor repository at GitHub. Documentation on the components is available at the demo site and at docs.microsoft.com.
The source for @fluentui/web-components
is hosted in the fluentui mono-repository. Documentation for those components is available on docs.microsoft.com.
The FluentUI Web Components are built on FAST and work in every major browser.
If you are upgrading from an earlier version of the library, please see the what's new for information on (breaking) changes.
To get started using the Fluent UI Blazor components for Blazor, you will first need to install the official Nuget package for Fluent UI Blazor in the project you would like to use the library and components. You can use the following command:
dotnet add package Microsoft.Fast.Components.FluentUI
The heart of this library is formed by the Fluent UI Web Components and the accompanying web-components.min.js
file. From version 2.3 onwards, the
script is included in the library itself and no longer needs to be added to your index.html
or _Layout.cshtml
. In fact, doing this might lead to
unpredictable results.
If you are upgrading from an earlier version please remove the script from your
index.html
or_Layout.cshtml
file.
The script is added to the application automatically. This way we can safeguard that the you are always using the best matching script version.
In order for this library to work as expected, you will need to add the composed scoped CSS file for the components. This can be done by
adding the following line to the section of your index.html
or _Layout.cshtml
file in the project you installed the package:
<link href="{PROJECT_NAME}.styles.css" rel="stylesheet" />
It is possible that the line is already in place (but commented out).
Reboot is a collection of element-specific CSS changes in a single file to help kick-start building a site with the Fluent UI Blazor components for Blazor. It provides an elegant, consistent, and simple baseline to build upon.
If you want to use Reboot, you'll need to add to your index.html
or _Layout.cshtml
file a line that includes the stylesheet (.css
file). This can be done by adding the following line to the <head>
section:
<link href="_content/Microsoft.Fast.Components.FluentUI/css/reboot.css" rel="stylesheet" />
It is entirely possible to build a site without using Reboot. If you choose not to use it, please do add the variables.css
file (which is otherwise imported through the reboot.css
file)
to your index.html
or _Layout.cshtml
file in the <head>
section like this:
<link href="_content/Microsoft.Fast.Components.FluentUI/css/variables.css" rel="stylesheet" />
The file contains a number of CSS variables that are required to be defined for the components to work correctly.
if you want to use icons and/or emoji, starting with version 2.1 you need add a <PropertyGroup>
to your project file. Within this group you can specify which icons and emoji are made available for usage and publication. Please refer to the project setup document for more information.
Please refer to the code setup document to learn what needs to be included in your Program.cs
file
so that all necessary services are available and setup in the correct way.
To make it easier to start a project that uses the Fluent UI Blazor components out of the box, we have created the Microsoft.Fast.Templates.FluentUI template package.
The package contains templates for creating Blazor Server and/or Blazor WebAssembly apps that mimic the regular Blazor templates. The library is already set up (and all the Bootstrap styling removed). All components fromthe regular template have been replaced with Fluent UI Blazor counterparts (and a few extra have been added). Please see the documentation page for more information.
If you want to use icons and/or emoji with applications based on the templates, you still need to make the changes to the project file
and Program.cs
as described in the project setup and code setup documents.
With the package installed and the script configured, you can begin using the Fluent UI Blazor components in the same way as any other Blazor component. Just be sure to add the following using statement to your views:
@using Microsoft.Fast.Components.FluentUI
Here's a small example of a FluentCard
with a FluentButton
that uses the Fluent "Accent" appearance:
@using Microsoft.Fast.Components.FluentUI
<FluentCard>
<h2>Hello World!</h2>
<FluentButton Appearance="@Appearance.Accent">Click Me</FluentButton>
</FluentCard>
Tip
You can add
@using Microsoft.Fast.Components.FluentUI
to the namespace collection in_Imports.razor
, so you don't have to add it to every razor page that uses one of the components.
The Fluent UI Blazor components are built on FAST's (Adaptive UI) technology, which enables design customization and personalization, while automatically
maintaining accessibility. This is accomplished through setting various "design tokens". The library exposes all design tokens, which you can use both from code as in a declarative way in your .razor
pages. The three different ways of working with design tokens are described in the design tokens page.
You can use this library in Blazor Hybrid (MAUI/WPF/Windows Forms) projects. Setup is almost the same as described in the "Getting started" section above, but to get everything to work you'll need to take some extra steps (for now):
- You need to make some changes in your
{Type}Program.cs
file
Make sure the following is added before thereturn builder.Build()
line:
builder.Services.AddFluentUIComponents(options =>
{
options.HostingModel = BlazorHostingModel.Hybrid;
});
Currently when using the WebView to run Blazor (so all Hybrid variants) the web-components script is not imported automatically (see #404.
There is also an isue with loading the custom event handlers that are being configured by the web-components script. Until these are fixed on the WebView side, there is
a workaround available, namely to intercept '_framework/blazor.modules.json' and provide proper JS initializers file (created by build). The needed initializersLoader.webview.js
has
been added to the library and needs to be included with a script tag before the _framework/blazor.webview.js
script tag:
<script app-name="{NAME OF YOUR APP}" src="./_content/Microsoft.Fast.Components.FluentUI/js/initializersLoader.webview.js"></script>
<script src="_framework/blazor.webview.js"></script>
The app-name
attribute needs to match your app's assembly name - initializersLoader uses 'app-name' to resolve name of the file with initializers.
initializersLoader replaces standard fetch
function with one which provides the correct file in place of the empty blazor.modules.json
. fetch
is restored to its original state once _framework/blazor.modules.json
request is intercepted.
For more information regarding the bug, see issue 15234 in the MAUI repo.
If you want to use the <FluentDataGrid>
with data provided through EF Core, you need to install
an additional package so the grid knows how to resolve queries asynchronously for efficiency. .
Install the package by running the command:
dotnet add package Microsoft.Fast.Components.FluentUI.DataGrid.EntityFrameworkAdapter
In your Program.cs file you need to add the following after the builder.Services.AddFluentUIComponents(...);
lines:
builder.Services.AddDataGridEntityFrameworkAdapter();
- The Microsoft Fluent UI Blazor components documentation and demo site
We offer some guidelines on how you can get started contributing to the project. We alo have a document that explains and shows how to write and develop unit tests
Looking to get answers to questions or engage with us in real-time? Our community is active on Gitter and Discord. Submit requests and issues on GitHub, or join us by contributing on some good first issues via GitHub.
We look forward to building an amazing open source community with you!