Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fluent UI v8 #19

Open
JustSlone opened this issue Sep 8, 2020 · 0 comments
Open

Fluent UI v8 #19

JustSlone opened this issue Sep 8, 2020 · 0 comments

Comments

@JustSlone
Copy link
Owner

JustSlone commented Sep 8, 2020

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 a incremental release that will setup 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 ReactJS Strict Mode Support
    • Unblocks the use of ReactJS Strict Mode while developing applications
    • Useful for testing out ReactJS Concurrent Mode
    • Converted several components to Function Components and removed deprecated lifecycle methods on the rest
  3. Improved Button
    • Smaller bundle size, better render pref
    • Introduction of design tokens and slots - looking for feedback!
  4. IN PREVIEW Composition utilities
    • A way 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 25th, 2020
v8 beta release October 12th, 2020
v8 official release November 16th, 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 renamingoffice-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. 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.

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.

(This change is pending final investigations of technical feasibility.)

# ReactJS 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 change will not result in a signifcant change to the component 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
  • Pivot has been renamed to Tabs, and has been updated with responsive collapsing behavior.

# 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 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

Once beta is released (8.0.0-beta.*), we encourage you to try it out and provide us with any feedback.

More details 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 currently working on adding a polyfill for this. More detailed guidance will be provided when we release the beta.

@JustSlone JustSlone changed the title Testing refernces Fluent UI v8 Sep 9, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant