Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
154eb2a
add refactoring plan
JasonVMo Oct 24, 2026
d3af17b
design: capture compatibility baselines (refactor phase 1)
JasonVMo Oct 24, 2026
178892a
design: reorganize into flex/fluent/types/test (refactor phase 2)
JasonVMo Oct 24, 2026
bf3b1bf
design: add ColorTone and automatic Flex interaction engine (refactor…
JasonVMo Oct 24, 2026
7a265cc
design: interactive color representation and consumer migration (refa…
JasonVMo Oct 24, 2026
4e0cb73
design: current x3 defaults and non-color tokens (refactor phase 5)
JasonVMo Oct 24, 2026
be30bdd
design: release notes and qualification (refactor phase 6)
JasonVMo Oct 24, 2026
ed8dbb8
design: changesets, references, and bundle baselines (refactor phase 6)
JasonVMo Oct 24, 2026
9d13cf7
update theme tester component in storybook with updated instructions
JasonVMo Oct 27, 2026
366ba6a
start of codegen for alias tokens
JasonVMo Oct 28, 2026
b4b8da9
fix brand shadow names
JasonVMo Oct 28, 2026
60eb801
finish generation of fluent baseline tokens
JasonVMo Oct 29, 2026
f889a4f
add fluent theme entrypoints
JasonVMo Oct 30, 2026
7250e7d
add flex theme definitions
JasonVMo Oct 30, 2026
913fdab
Adapt merged component tests and bundle baseline to interactive colors
JasonVMo Oct 31, 2026
ca9f3f7
design: Fluent appearance sets, high-contrast theme, and Flex Storybo…
JasonVMo Nov 2, 2026
46305a2
design: move Fluent 2 token JSON consumers behind a deprecated entry …
JasonVMo Nov 2, 2026
c33e026
design: drop stale legacy-defaults claims from changeset and flex-col…
JasonVMo Nov 2, 2026
1915874
Merge origin/main into user/jasonvmo/design-rework-legacy-removal
JasonVMo Nov 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .changeset/components-x3-flex-defaults.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@fluentui-react-native/components': minor
---

Read Flex colors through the design package's interactive color envelope and adopt the current x3 default tokens.
Components rendered with the default theme change appearance, including an achromatic brand, translucent neutral
backgrounds, and larger corner radii. Component token contracts reference the per-state color paths.
9 changes: 9 additions & 0 deletions .changeset/default-theme-design-fluent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'@fluentui-react-native/default-theme': minor
---

Use the design package's Fluent themes instead of building default tokens locally. `defaultFluentTheme` and
`defaultFluentDarkTheme` are now the design package's `fluentLightTheme` and `fluentDarkTheme`, and `createDefaultTheme`
resolves its `fluentTheme`, so each platform uses its own generated Fluent tokens (macOS previously used the Windows
set) and high contrast follows the color scheme. Breaking: `createAliasTokens` is removed; read alias colors from
`theme.colors` instead.
11 changes: 11 additions & 0 deletions .changeset/design-complete-platform-tokens.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'@fluentui-react-native/design': patch
---

Generate complete Fluent color, shadow, font, and appearance token sets for Win32, Windows, macOS, iOS, and Android.
Every platform provides light, dark, light elevated, dark elevated, high-contrast light, and high-contrast dark sets.
Elevated sets fall back to their color scheme, high-contrast light falls back to high-contrast dark, and platforms
without high-contrast data use light and dark. Windows high contrast uses the Win32 high-contrast set with Windows
system color brushes. Preserve native values and fill missing tokens with same-platform equivalents, then portable
same-scheme defaults. Use platform global typography when font aliases are absent and enforce required generated token
types.
12 changes: 12 additions & 0 deletions .changeset/design-deprecated-entry-point.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'@fluentui-react-native/design': minor
---

Breaking: move every module that loads the Fluent 2 token JSON into a new `@fluentui-react-native/design/deprecated`
entry point, reserved for tests and the existing platform themes. It exports `getAliasTokens`, `getShadowTokens`,
`globalTokens`, `hcAliasTokens`, `mapPipelineToTheme`, `mapFontPipelineToTheme`, and `mapPipelineToShadow`. The
`theming` entry point no longer exports the pipeline mappers, and the `tokens/legacy` and `theming/compat/defaults`
entry points and `getDefaultLegacyTheme` are removed; use the Fluent themes from `@fluentui-react-native/design/themes`
for complete default themes. `themeFromFlexTokens` now fills the values Flex cannot represent from the generated Fluent
theme for the appearance instead of the removed legacy defaults, so the `theming` entry point no longer bundles the
token JSON.
9 changes: 9 additions & 0 deletions .changeset/design-flex-themes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'@fluentui-react-native/design': minor
---

Add `flexTheme` and `flexWarmTheme` to the `@fluentui-react-native/design/themes` entry point. Each is a new
`FlexThemeDescription`, which pairs a complete Flex token description with an optional `ColorTone`, holding the cool or
warm x3 defaults. `FlexThemeReference` now accepts a `FlexThemeDescription` as its `base`: the description replaces the
package defaults, and its tone becomes the reference's default `appearance.colorTone` unless the `appearance` option or
a provider request sets one. The `ThemeState` types now live with the Flex model; their exports are unchanged.
10 changes: 10 additions & 0 deletions .changeset/design-fluent-themes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@fluentui-react-native/design': minor
---

Add the `@fluentui-react-native/design/themes` entry point with `fluentLightTheme`, `fluentDarkTheme`, `fluentHcTheme`,
and `fluentTheme`. The themes are built from the generated Fluent 2 alias colors, shadows, font aliases, and global
tokens rather than hand-authored values, and each legacy palette color points at the alias color that plays its role.
`fluentTheme` is a `ThemeReference` that follows the system appearance, including high contrast, and the `appearance`
prop of `ThemeProvider` or `ThemedRoot` overrides it. `fluentHcTheme` always resolves the high-contrast theme for the
color scheme. Elevated appearances resolve by color scheme for now.
6 changes: 6 additions & 0 deletions .changeset/design-shared-generated-values.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@fluentui-react-native/design': patch
---

Shrink the generated Flex defaults by about 6 KB minified: values that repeat are emitted once, and the entries both
tones share are emitted once in a common object. The default token values are unchanged.
30 changes: 30 additions & 0 deletions .changeset/design-x3-flex-defaults.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
'@fluentui-react-native/design': minor
---

Rework Flex tokens around the current x3 defaults. Legacy `ThemeReference` themes, `ThemeProvider`, `useTheme`, and
Flex tokens projected from legacy themes keep their values.

Breaking changes for Flex consumers and theme authors:

- Every Flex semantic color is a resolved `InteractiveColor` with `rest`, `hover`, and `pressed`. Read
`tokens.color.x.rest` instead of `tokens.color.x`, and `.hover` or `.pressed` instead of the removed `color.hover`
and `color.pressed` maps. Omitted interactive states derive lazily from rest with no configuration.
- Author a color as a value, a `[light, dark]` tuple, or `flexColor` options with explicit states and a `standard`,
`inverted`, or `fixed` interaction type. Each color override replaces the previous color atomically. Recipes receive
the authored description; `selectColorEntry` reads an entry for an appearance.
- Appearances accept an optional `colorTone` (`cool` or `warm`) that selects the default tokens and interaction
algorithm.
- The default tokens follow x3-design/fluent-design@206e890b for both tones, including an achromatic brand,
translucent neutral backgrounds, and larger corner radii. Tests should read defaults from `defaultFlexTokens` in the
`testing` entry point.
- Shadows are arrays of `{ x, y, blur, color }` layers and may vary by color scheme; author a former `{ ambient, key }`
shadow as `[ambient, key]`, and use `selectShadowEntry` to read an authored entry. Motion tokens and
`spacing.componentBase800` are new.
- The `color-lib` interaction functions no longer take a token; their `variant` option is replaced by `colorTone`,
`direction`, and `compositing`. `isInverseInteractionToken` moves from `color-lib` to the package root, alongside the
new `INTERACTIVE_COLOR_TOKENS` and `isInteractiveColorToken`.

Root `useThemeState` consumers now bundle the interaction algorithm and generated defaults, about 23 KB raw and 8 KB
gzip in the measured scenarios. Package sources move under `src/flex`, `src/fluent`, `src/types`, and `src/test`; export
keys and conditions are unchanged.
5 changes: 5 additions & 0 deletions .changeset/spotty-cases-build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---

---

Documentation-only design refactoring proposal; no package release.
6 changes: 6 additions & 0 deletions .changeset/storybook-runtime-flex-chrome.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@fluentui-react-native/storybook-desktop-runtime': patch
---

Keep the Storybook chrome and story canvas on the Flex theme. The Theme selector now applies Flex or Fluent only to
story content, while scheme, contrast, and tone still apply to the chrome.
5 changes: 5 additions & 0 deletions .changeset/storybook-runtime-flex-colors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@fluentui-react-native/storybook-desktop-runtime': patch
---

Read Storybook chrome colors through the design package's interactive color envelope.
5 changes: 5 additions & 0 deletions .changeset/storybook-runtime-theme-selector.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@fluentui-react-native/storybook-desktop-runtime': patch
---

Replace the fixed Storybook theme buttons with Theme (Flex or Fluent), Scheme (light, dark, or system), Contrast, and Tone dropdowns. The toolbar now defaults to Flex light, standard contrast, and cool tone, independent of the host appearance.
10 changes: 10 additions & 0 deletions .changeset/theming-design-deprecated-imports.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@fluentui-react-native/android-theme': patch
'@fluentui-react-native/apple-theme': patch
'@fluentui-react-native/win32-theme': patch
'@fluentui-react-native/theme-tokens': patch
'@fluentui-react-native/theming-utils': patch
---

Import the Fluent 2 token loaders and pipeline mappers from `@fluentui-react-native/design/deprecated`. Theme values and
the shims' exports are unchanged.
7 changes: 7 additions & 0 deletions apps/bundle-size/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,5 +54,12 @@ workflow.
3. Run `yarn bundle-size` and inspect the generated esbuild metafile. The metafile can also be
loaded into the esbuild bundle analyzer.

A scenario can also guard module boundaries with path substrings. `forbiddenInputPatterns` and
`requiredInputPatterns` match every module esbuild resolves from the entry, including modules
tree shaking later removes. `forbiddenOutputPatterns` and `requiredOutputPatterns` match only
the modules that contribute bytes to the bundle. Use input patterns when a module must not
even be reachable, and output patterns when a shared entry reaches a module that a consumer's
imports must not retain.

Use a supported public package or subpath export when measuring consumer cost. A source-relative
module path is useful for diagnostics, but it does not prove the cost of the published API.
Loading
Loading