Fluentui: Fluent UI v8

Created on 17 Apr 2020  Â·  19Comments  Â·  Source: microsoft/fluentui

UPDATE: Draft release notes and migration guide now available

Summary

The next release of Fluent UI React is going to be a little different than previous releases of this project and we wanted to help set expectations, detail some of its nuances, and set the stage for subsequent releases.

We view this next release as an incremental release that will set up customers, partners, and contributors for the team's collective vision of improving the baseline components used in all Microsoft 365 experiences. Going forward we will be making smaller, easy to consume, incremental releases of Fluent UI.

The Version 8 (v8) release will focus on:

  1. This is an incremental release

    • No major visual changes

    • Limited API surface changes (mainly Button)

    • Package restructuring paves the way for smoother updates in the future

    • Intended to be an easy upgrade

  2. Adds React Strict Mode Support

    • Unblocks the use of React Strict Mode while developing applications

    • Useful for testing out React Concurrent Mode

    • Converted several components to Function Components and removed deprecated lifecycle methods on the rest

  3. Improved Button

    • Smaller bundle size, better render perf

    • Introduction of design tokens and slots - looking for feedback!

  4. [IN PREVIEW] Composition utilities

    • A way of building components

    • Allows recomposing Fluent UI components without wrapping them

    • Used internally in Button

    • Still in preview--check it out and give feedback!

All content in this issue is a work in progress and will not be final until we approach release.
Note: "v8" here refers to "version 8," not the v8 JavaScript engine.

Timeline

Note: These dates are our best estimations.

| Milestone | Date |
| -------- | -------- |
| v8 snap* | September 25, 2020 |
| v8 beta release | October 19, 2020 |
| v8 official release | (tentative) November 30, 2020 |

*v8 snap: 7.0 branch is created. Fixes for v7 will need to go in 7.0 branch until beta release. After beta release, all fixes should go into master first then cherry-pick into 7.0 branch.

What's in v8?

We are currently tracking the related work here.

Below is a more detailed overview of upcoming changes in v8. Please note, these are still subject to change before official release. Comprehensive release notes will be provided when release happens.

# Packaging restructuring - pave the way for future updates

[Breaking] Package renaming office-ui-fabric-react to @fluentui/react

Starting in v8, you will need to install @fluentui/react@8 instead of office-ui-fabric-react@8. More details and migration tips here.

[Breaking] @uifabric to @fluentui package renames

If time allows, we plan to move our @uifabric packages to the @fluentui scope, and in some cases change the names to better align with current conventions. For packages used by the suite (@fluentui/react), we'll continue to publish aliases under the old @uifabric names (until their major version bumps) to prevent consumers from needing duplicate dependency versions. See this issue for details.

_Change of plan:_ We decided to rename all the packages without aliases, but will provide a codemod to help pick up the renames.

Major version policy change for sub-packages

Starting with this release, sub-packages such as @uifabric/utilities or @uifabric/merge-styles will no longer move in major-lockstep with the suite: for each sub-package, unless it also has breaking changes, it will not major bump when the suite does.

The main benefit is that this will reduce duplicate dependencies for consumers who need a longer timeline to fully upgrade to the latest suite package version, and may have multiple versions of the suite in the same app bundle in the meantime.

_Change of plan:_ We've decided to major bump all the packages for this release, but will try to get rid of major-lockstep next release. (This was due to technical challenges of renaming packages from @uifabric to @fluentui and getting rid of major-lockstep at the same time, as well as time constraints.)

# React Strict Mode Support

Full strict mode support for all components

  • No usage of legacy React lifecycle APIs (UNSAFE_*)
  • No usage of findDOMNode

[Breaking] Function component conversion

Most components are being converted from class components to function components (and the remaining components may be converted in a minor version). This work is being tracked here.

In general this will not result in a significant change to the component API surface. However, there are a few important implications, outlined in detail here.

Main points:

  • Class extension of components is no longer supported (exception: Picker components, BaseComponent)
  • Changes to how the ref prop works.
  • ReactDOM.findDOMNode is not supported for function components (a React limitation).
  • Directly accessing components' state is no longer supported
  • More components properly implement controlled/uncontrolled behavior and standard onChange signatures

# Button Component

Our button components have a long history and debt. In order to truly improve them, we are essentially re-writing them. We're doing so with a lense of formalizing a styling API that we plan to adopt to more and more components over time. This comes with a set of breaking changes.

Improved Button

Button variants have been replaced with an entirely new button which is faster, smaller, and more customizable. It can be found in the @fluentui/react-button package.

Introduction of design tokens and slots

The Button component and variants leverage a new set of styling APIs that allow more predictibility, flexibility, and toolability. More details here.

Compat Button

More details coming soon!

# [IN PREVIEW] Composition Utilities

These "In Preview" utilties are meant for component authors to try out and give us feedback on creating new components like we did with the new Button component. Note that these APIs are subject to change as we learn and iterate with component authors.

Customizability and component authoring

  • A set of composition utilities and guidance on how to build customizable components.
  • A set of utilities to help you provide contextual theme to components and retrieve the theme to build your own styles (a better alternative for Customizer and Fabric).

List of breaking changes

Please see the draft release notes for a detailed list of breaking changes to individual components, including removal of certain props previously marked as deprecated.

Testing v8

The beta is now available on npm as @fluentui/react@beta. We encourage you to try it out and provide us with any feedback.

(Release notes and migration guide coming soon!)

Open questions v8 will answer before release

Question: How will customers upgrade from v7 to v8?

We will provide an upgrade-source script which will apply renames to your code. Symbols, imports, and prop renames will be adjusted automatically, and references to deprecated things which have no automated alternative will add comments and links to explanations.

Question: What is the right way to theme Fluent UI?

More details coming soon!

Question: If we're using css variables, what guidance do we provide for developers who still need to support IE11?

We're planning on providing a polyfill for this. More detailed guidance will be provided when we release the beta.

Fluent UI v8 Epic

Most helpful comment

The version 8 beta is now available on npm as @fluentui/react@beta. Please try it out and let us know what you think! (Still working on an initial version of the release notes and migration guide but that should be ready soon.)

All 19 comments

I have a question about the "Icons updated to svg" topic. Will icon fonts still be supported? In our application we replaced the fabric icon font with a custom one. We register some of the icons under the same name like the fabric ones so all the fluent-ui react controls are automatically using our icons. Also at runtime we make heavy use of the iconName feature. Our application is plugin based and we need to have access to the whole icon library at runtime because we don't know in advance which icon is used from the plugins. For us the current icon font solution is perfect. It would be nice if we can continue to use it (atleast with a custom font) in V8.

Are there any plans to take up the below issue to "Convert Fabric to use rem" as by using rem we respect user preference even helps to make the UI more accessible and responsive.
https://github.com/microsoft/fluentui/issues/6014

We should consider #9698 in here.

@Kesshi Thanks for the callout on this - we'll need to be careful about how we roll this out to make sure we don't break your scenario; in the worst case scenario we will have an alternative way to keep this behavior so that you "opt in" to taking the bundle size hit. We want normal use cases to not be penalized by bundle size.

Will there be a browser usable release like this?
https://cdn.jsdelivr.net/npm/@fluentui/react@7.110.1/dist/fluentui-react.min.js

@dzearing Is Fleunt UI v8 equivalent to Fleunt UI v0?
I am a bit confused by seeing these two labels!

Can you please confirm when will Fluent UI V8 be released to public, even if its a Beta version?
We are currently designing a new UI, and we would love to start using the V8 version as soon as possible!

Thank you!

@abdullahsalem - V0 is referring @fluentui/react-northstar. V8 is referring next version of @fluentui/react / office-ui-fabric-react

@vsspt -

We intend to release Fluent UI 8 in late summer 2020, and will be locking the feature changes by end of June.

We will provide update once we have something consumable

Will this version support the use of ReactDOMServer.renderToNodeStream(element) for server side rendering?

The Charting package will be part of Fluent UI 8? BTW. I just created a project with V7 version, and so far the experience is excellent. The most satisfying surprise was how well TextField integrated with react-hook-form. Great stuff.

In react-next package , some component styles has changed from css-in-js to scss file,
can you provide some suggestion on development ?
where the css should in? still use css-in-js or move to scss file?

  • Converge on a single theme context for all components across current and northstar components
  • Unify on css variables as a delivery mechanism for theme vlaues
  • Backwards compat for existing use cases for loadTheme, Customizer.applySettings, Provider, and<Customizer ...>
    Question: _What is the right way to theme Fluent UI?_

Any update on that question?

Can we make the ability to themes apply to the entire site (page and components) more easy? It took me a long time to find an undocumented <Fabric applyThemeToBody> component, which sadly does not update the body based on theme changes after the initial page load. Something that is similar to how it is done in Azure DevOps would be nice.

@dzearing, are there any news regarding the release date?

Will you include modifying the "theme generator" to let users choose their framework? With all of the different packages / variants of Fluent UI available it would be good for people to be able to choose what they want. I've already found some inconsistencies in the theme generator for the different versions (key differences etc). (https://fabricweb.z5.web.core.windows.net/pr-deploy-site/refs/heads/master/theming-designer/index.html)

For anyone interested, we've just updated the issue description with the current plan including a specific release timeline.

The issue description has been updated again with a higher-level summary of changes and some other additions.

The version 8 beta is now available on npm as @fluentui/react@beta. Please try it out and let us know what you think! (Still working on an initial version of the release notes and migration guide but that should be ready soon.)

"Beta" release notes and migration guide are now available. These are still somewhat subject to change before the final release. If you notice anything missing, please let us know.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

carruthe picture carruthe  Â·  3Comments

VincentBailly picture VincentBailly  Â·  3Comments

holysnake91 picture holysnake91  Â·  3Comments

gabrielruss picture gabrielruss  Â·  3Comments

nekoya picture nekoya  Â·  3Comments