Skip to content

feat(v9): ship web packages ESM-first (type:module), drop node export condition#36327

Draft
Hotell wants to merge 20 commits into
microsoft:masterfrom
Hotell:feat/v9-valid-esm-drop-node-condition
Draft

feat(v9): ship web packages ESM-first (type:module), drop node export condition#36327
Hotell wants to merge 20 commits into
microsoft:masterfrom
Hotell:feat/v9-valid-esm-drop-node-condition

Conversation

@Hotell

@Hotell Hotell commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Draft. Stacks on #36324 (module-condition) and supersedes it — this branch drops the node condition entirely. Open for early review / CI.

Summary

Migrates converged v9 web packages to ESM-first packaging so bare-Node SSR can import real ESM (and tree-shake), while require still gets CommonJS — no consumer config, no dual-package hazard for single-format graphs.

// package.json
"type": "module",
"main": "lib-commonjs/index.cjs",
"exports": { ".": {
  "import":  { "types": "./dist/index.d.ts",  "default": "./lib/index.js" },
  "require": { "types": "./dist/index.d.cts", "default": "./lib-commonjs/index.cjs" }
}}
  • lib/ ships valid native ESM (fully-specified .js via swc resolveFully).
  • lib-commonjs/ ships .cjs (required under type: module).
  • The node condition is dropped: bare-Node import → ESM, require → CJS; bundlers resolve import → ESM and tree-shake.
  • Per-condition types: require points at a rolled dist/*.d.cts so node16/nodenext CJS consumers are @arethetypeswrong-clean.

Why (vs the module condition in #36324)

The module condition only helps bundled SSR. This unlocks bare-Node externalized ESM (edge/workers, externalized deps) too, by making lib/ genuinely Node-loadable ESM. Latest Griffel (type: module, no node) already ships this exact shape, so the ecosystem is aligned.

What's automated (no per-package manual steps)

  • Build executor: auto-renames lib-commonjs/*.js*.cjs (+ rewrites relative require/maps) and copies dist/*.d.ts*.d.ctsgated on type: module (no-op otherwise).
  • Generators (migrate-converged-pkg, react-library): emit the ESM-first shape, .cjs dev configs, nested-types exports, and dist/*.d.cts in files.
  • Plugin: recognizes jest.config.cjs; adds an optional attw target (dependsOn: build, not in CI gates).

Scope / exclusions

  • Included: 84 converged v9 web packages (type: module).
  • Excluded (kept CommonJS): platform:node packages, storybook addons / preset.js, and just-scripts packages (charts — just.config.* is incompatible with type: module).

Validation

  • react-text dependency chain (bottom-up: tokens, keyboard-keys, react-utilities, react-theme, react-jsx-runtime, react-shared-contexts, react-text): bare-Node require ✅ and import ✅ both load; functionally real.
  • attw (react-text, react-utilities): 🟢 node16-from-CJS, 🟢 node16-from-ESM, 🟢 bundler, 🟢 node10 (exit 0).
  • vNext build sweep: "Successfully ran target build for 91 projects", exit 0.
  • workspace-plugin tests: 37 suites / 239 ✅.

Known limitation (follow-up, not a regression)

Bare-Node import of icon-dependent packages currently fails inside @fluentui/react-icons — an external package whose ESM (lib/index.js) uses extensionless imports (not valid bare-Node ESM). Bundled SSR, client, and require() are unaffected. Needs an upstream fully-specified-ESM fix in react-icons (or temporary exclusion of icon-dependent packages).

Reviewer notes

  • The all-or-nothing nature: bare-Node import only "lights up" once a package's entire transitive @fluentui/* closure is migrated (CJS export * barrels break Node's named-import interop). Throughout rollout, require + bundled never regress.
  • Change-file messages for type: module packages updated to describe the ESM-first state; excluded packages keep the module-condition message.

Hotell added 2 commits June 18, 2026 19:00
…targeted bundlers

Adds a `module` condition nested in `node` to every converged v9 package's export map:
- node-targeted bundlers (webpack/rollup/vite/esbuild) resolve the ESM build and tree-shake
- bare Node ignores `module` and falls back to CommonJS, keeping SSR single-instance / dual-package-hazard free
- enables fully-specified .js import emit via swc `baseUrl` so lib/ is valid ESM

Updates the migrate-converged-pkg generator (source of truth) + swcrc template, and rolls the change out across all v9 packages with matching beachball change files.
…rt condition

Migrates converged v9 web packages to ESM-first packaging:
- `type: module` with valid ESM under lib/ (fully-specified .js) and CommonJS under lib-commonjs/*.cjs
- drop the `node` export condition; bare-Node `import` resolves ESM, `require` resolves CJS
- per-condition types: `require` points at a rolled `dist/*.d.cts` (attw-clean for node16/nodenext CJS)
- rename CJS dev configs to .cjs (jest/eslint/tests) for type:module compatibility

Build executor auto-emits lib-commonjs .cjs + dist .d.cts (gated on type:module).
Generators (migrate-converged-pkg, react-library) emit the new web shape; optional `attw` target added.
Excludes CJS-first (platform:node, storybook addons) and just-scripts (charts) packages.
@github-actions

Copy link
Copy Markdown

Pull request demo site: URL

Hotell added 4 commits June 19, 2026 14:46
@fluentui/tokens is now type:module (ESM, named exports, no default). The generate-tokens script relied on CJS-interop default import; switch to a namespace import.
…e tests

- rit.config.js -> .cjs (react-provider) + teach rit loader (args.ts) and workspace-plugin rit-target inference to prefer .cjs
- .storybook/main.js -> .cjs (recipes), scripts/server.js -> .cjs (tokens)
- getDependencies.spec: react-text main is now lib-commonjs/index.cjs; refresh dep-tree order snapshot
- react-library spec: drop stale jest.config.js from scaffold snapshot
Graph traversal order is non-deterministic across machines; sort deps by name for a stable snapshot.
Comment thread .gitignore
@@ -153,3 +153,5 @@ gulp-cache
.cursor/rules/nx-rules.mdc

@github-actions github-actions Bot Jun 19, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕵🏾‍♀️ visual changes to review in the Visual Change Report

vr-tests-react-components/Menu Converged - submenuIndicator slotted content 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Menu Converged - submenuIndicator slotted content.default.submenus open.chromium.png 413 Changed
vr-tests-react-components/Menu Converged - submenuIndicator slotted content.default - RTL.submenus open.chromium.png 404 Changed
vr-tests-react-components/Positioning 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Positioning.Positioning end.chromium.png 617 Changed
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 320 Changed
vr-tests-react-components/ProgressBar converged 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - High Contrast.default.chromium.png 161 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness.default.chromium.png 103 Changed
vr-tests-react-components/TagPicker 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled.disabled input hover.chromium.png 677 Changed
vr-tests-web-components/Accordion 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-web-components/Accordion. - Dark Mode.normal.chromium_1.png 3398 Changed
vr-tests-web-components/MenuList 4 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-web-components/MenuList. - RTL.1st selected.chromium_2.png 39384 Changed
vr-tests-web-components/MenuList. - RTL.2nd selected.chromium.png 17 Changed
vr-tests-web-components/MenuList. - RTL.normal.chromium_1.png 39083 Changed
vr-tests-web-components/MenuList. - RTL.2nd selected.chromium_3.png 38816 Changed
vr-tests-web-components/TextInput 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-web-components/TextInput. - Dark Mode.normal.chromium_1.png 288 Changed
vr-tests/react-charting-LineChart 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests/react-charting-LineChart.Multiple - RTL.default.chromium.png 200 Changed
vr-tests/react-charting-LineChart.Multiple.default.chromium.png 192 Changed
vr-tests/react-charting-LineChart.Multiple - Dark Mode.default.chromium.png 181 Changed

There were 1 duplicate changes discarded. Check the build logs for more information.

Hotell added 8 commits June 19, 2026 17:04
Migrate @fluentui/scripts-cypress to type:module so its TS source loads
correctly when imported from migrated (type:module) cypress configs:

- package.json: type:module; rename node-run configs to .cjs (eslint/jest)
- base.config.ts: __dirname -> import.meta.dirname; add webpack resolve.extensionAlias (.js->.ts)
- index.ts: explicit .ts specifier for base.config re-export (resolves under native ESM via require(esm) from CommonJS cypress configs); explicit extension on browser type import
- browser/index.ts + support/*.js: fully-specified import specifiers; convert support require() to static ESM import
- tsconfig.lib.json: noEmit + allowImportingTsExtensions (source-only package)
- rit cypress.config template: __dirname -> process.cwd() for ESM/CJS sandbox parity

Validated: react-utilities/babel-preset-global-context/react-headless-components-preview e2e,
react-menu-grid-preview test-rit (17) e2e + test, scripts-cypress lint/test/type-check,
workspace-plugin (239) and react-integration-tester (37) unit tests.
…odule)

Complete the ESM-first migration for the one missed web package (it still
shipped the pre-migration shape: main=lib-commonjs/index.js, no type field):

- package.json: type:module, main->lib-commonjs/index.cjs, per-subpath exports
  rewritten to ESM-first nested shape (import.types=.d.ts/default=lib.js,
  require.types=.d.cts/default=lib-commonjs/*.cjs), dist/*.d.cts in files
- jest/eslint/test-setup configs renamed to .cjs
- generate-api: read subpath types from nested import.types (not just flat types)
  so exportSubpaths rollups work with the ESM-first export shape

Also simplify @fluentui/scripts-cypress: inline base.config into index.ts to
remove the only cross-file relative import. This fixes a type-check regression
where the prior explicit .ts specifier leaked an allowImportingTsExtensions
requirement into every cypress consumer, while still resolving under Node's
native ESM loader for CommonJS cypress configs.

Validated: react-headless build/attw(green)/lint/test(712)/type-check/e2e(185),
react-utilities & babel-preset-global-context e2e, react-menu-grid-preview
test-rit(17) e2e, scripts-cypress lint/type-check, workspace-plugin (239) tests.
- react-examples (v8, tsc --module commonjs) compiled FocusTrapZone.e2e.tsx,
  which imports @fluentui/scripts-cypress; the inlined base.config uses
  import.meta (required for type:module) and is invalid under module:commonjs.
  Exclude e2e cypress test files from the v8 library build (they're bundled by
  cypress at runtime, never part of the shipped lib).
- scripts-monorepo: annotate the getDependencies.spec sort comparator so checkJs
  doesn't flag implicit-any params (TS7006).
…module

- rit-tests-v8 cypress.config: __dirname -> import.meta.dirname (cypress loads it as ESM once it imports the type:module @fluentui/scripts-cypress)
- react-examples FocusTrapZone e2e: import mount from @cypress/react directly (v8-local) instead of ESM scripts-cypress, so the v8 commonjs build doesn't pull in import.meta; ignore e2e specs in eslint (bundled by cypress, not in tsconfig program)
… instead

Restore mount import from @fluentui/scripts-cypress (preserves StrictMode default).
Build no longer compiles e2e specs (excluded in tsconfig.json) so the ESM-only
scripts-cypress import.meta never reaches the commonjs tsc; eslint ignores e2e.
…resolution

react-message-bar: MessagebarActions -> MessageBarActions; react-table: createColumn -> createTableColumn. These named exports were always wrong but only error now under strict ESM.
…aths resolve

type:module packages emit bare subpath imports (e.g. use-sync-external-store/shim) without extensions; webpack treats lib/ as ESM and enforces fully-specified. Disable it for the measure bundler.
…ayout

scaffolded package lives at <scope>/<name>/library (4 deep); preset must be ../../../../jest.preset.js. Fixes check-tools react-component generator running test.
@github-actions

Copy link
Copy Markdown

📊 Bundle size report

Package & Exports Baseline (minified/GZIP) PR Change
global-context
createContext
510 B
328 B
339 B
258 B
-171 B
-70 B
global-context
createContextSelector
531 B
335 B
360 B
266 B
-171 B
-69 B
react-accordion
Accordion (including children components)
91.136 kB
28.716 kB
91.928 kB
29.004 kB
792 B
288 B
react-avatar
Avatar
47.215 kB
14.859 kB
48.154 kB
15.235 kB
939 B
376 B
react-avatar
AvatarGroup
16.316 kB
6.528 kB
17.106 kB
6.842 kB
790 B
314 B
react-avatar
AvatarGroupItem
60.361 kB
18.763 kB
61.174 kB
19.098 kB
813 B
335 B
react-badge
Badge
22.978 kB
7.355 kB
23.897 kB
7.721 kB
919 B
366 B
react-badge
CounterBadge
23.698 kB
7.61 kB
24.62 kB
7.979 kB
922 B
369 B
react-badge
PresenceBadge
22.938 kB
8.301 kB
23.855 kB
8.653 kB
917 B
352 B
react-breadcrumb
@fluentui/react-breadcrumb - package
102.926 kB
28.76 kB
103.528 kB
29.001 kB
602 B
241 B
react-button
Button
32.684 kB
8.504 kB
33.601 kB
8.876 kB
917 B
372 B
react-button
CompoundButton
39.562 kB
9.861 kB
40.482 kB
10.227 kB
920 B
366 B
react-button
MenuButton
37.634 kB
9.904 kB
38.555 kB
10.268 kB
921 B
364 B
react-button
SplitButton
46.602 kB
11.54 kB
47.544 kB
11.912 kB
942 B
372 B
react-button
ToggleButton
52.344 kB
10.635 kB
53.273 kB
11.005 kB
929 B
370 B
react-calendar-compat
Calendar Compat
142.416 kB
40.16 kB
143.348 kB
40.506 kB
932 B
346 B
react-card
Card - All
93.06 kB
26.955 kB
94.003 kB
27.302 kB
943 B
347 B
react-card
Card
85.658 kB
25.044 kB
86.583 kB
25.415 kB
925 B
371 B
react-card
CardFooter
11.516 kB
4.606 kB
12.431 kB
4.964 kB
915 B
358 B
react-card
CardHeader
14.047 kB
5.435 kB
14.988 kB
5.814 kB
941 B
379 B
react-card
CardPreview
11.597 kB
4.716 kB
12.513 kB
5.076 kB
916 B
360 B
react-charts
AreaChart
404.545 kB
126.137 kB
405.349 kB
126.429 kB
804 B
292 B
react-charts
DeclarativeChart
755.546 kB
220.512 kB
756.349 kB
220.808 kB
803 B
296 B
react-charts
DonutChart
315.008 kB
96.895 kB
315.81 kB
97.176 kB
802 B
281 B
react-charts
FunnelChart
306.507 kB
93.707 kB
307.309 kB
94.02 kB
802 B
313 B
react-charts
GanttChart
387.641 kB
120.501 kB
388.444 kB
120.811 kB
803 B
310 B
react-charts
GaugeChart
314.386 kB
96.264 kB
315.184 kB
96.608 kB
798 B
344 B
react-charts
GroupedVerticalBarChart
395.514 kB
123.229 kB
396.323 kB
123.531 kB
809 B
302 B
react-charts
HeatMapChart
389.721 kB
121.538 kB
390.531 kB
121.851 kB
810 B
313 B
react-charts
HorizontalBarChart
294.68 kB
89.365 kB
295.483 kB
89.683 kB
803 B
318 B
react-charts
Legends
234.356 kB
70.197 kB
235.167 kB
70.52 kB
811 B
323 B
react-charts
LineChart
415.873 kB
129.114 kB
416.678 kB
129.438 kB
805 B
324 B
react-charts
PolarChart
343.357 kB
106.756 kB
344.159 kB
107.058 kB
802 B
302 B
react-charts
SankeyChart
211.914 kB
67.836 kB
212.727 kB
68.168 kB
813 B
332 B
react-charts
ScatterChart
395.256 kB
123.231 kB
396.062 kB
123.526 kB
806 B
295 B
react-charts
VerticalBarChart
431.994 kB
128.179 kB
432.796 kB
128.493 kB
802 B
314 B
react-charts
VerticalStackedBarChart
401.718 kB
124.647 kB
402.523 kB
124.962 kB
805 B
315 B
react-checkbox
Checkbox
29.624 kB
10.543 kB
30.564 kB
10.861 kB
940 B
318 B
react-color-picker
ColorArea
43.436 kB
15.728 kB
44.251 kB
16.056 kB
815 B
328 B
react-color-picker
ColorPicker
15.005 kB
6.057 kB
15.795 kB
6.368 kB
790 B
311 B
react-color-picker
ColorSlider
38.424 kB
14.209 kB
39.234 kB
14.528 kB
810 B
319 B
react-combobox
Combobox (including child components)
138.324 kB
44.667 kB
139.131 kB
44.941 kB
807 B
274 B
react-combobox
Dropdown (including child components)
138.092 kB
44.433 kB
138.905 kB
44.712 kB
813 B
279 B
react-components
react-components: Button, FluentProvider & webLightTheme
66.328 kB
19.02 kB
67.275 kB
19.397 kB
947 B
377 B
react-components
react-components: Accordion, Button, FluentProvider, Image, Menu, Popover
226.531 kB
68.074 kB
227.337 kB
68.33 kB
806 B
256 B
react-components
react-components: FluentProvider & webLightTheme
39.525 kB
13.113 kB
40.481 kB
13.47 kB
956 B
357 B
react-components
react-components: entire library
1.296 MB
325.628 kB
1.297 MB
325.874 kB
921 B
246 B
react-datepicker-compat
DatePicker Compat
216.482 kB
63.963 kB
217.421 kB
64.308 kB
939 B
345 B
react-dialog
Dialog (including children components)
90.204 kB
27.895 kB
91.012 kB
28.218 kB
808 B
323 B
react-divider
Divider
15.08 kB
5.41 kB
16.016 kB
5.786 kB
936 B
376 B
react-field
Field
21.127 kB
7.887 kB
22.075 kB
8.254 kB
948 B
367 B
react-headless-components-preview
react-headless-components-preview: entire library
248.544 kB
71.466 kB
249.047 kB
71.668 kB
503 B
202 B
react-image
Image
12.349 kB
5.023 kB
13.265 kB
5.385 kB
916 B
362 B
react-input
Input
25.044 kB
8.183 kB
25.96 kB
8.549 kB
916 B
366 B
react-jsx-runtime
JSX Runtime
1.314 kB
601 B
1.909 kB
867 B
595 B
266 B
react-label
Label
11.696 kB
4.74 kB
12.611 kB
5.103 kB
915 B
363 B
react-link
Link
15.263 kB
6.048 kB
16.179 kB
6.409 kB
916 B
361 B
react-list
List
74.655 kB
23.01 kB
75.445 kB
23.341 kB
790 B
331 B
react-list
ListItem
98.151 kB
29.865 kB
98.966 kB
30.181 kB
815 B
316 B
react-menu
Menu (including children components)
160.102 kB
50.764 kB
160.921 kB
51.055 kB
819 B
291 B
react-menu
Menu (including selectable components)
163.28 kB
51.395 kB
164.099 kB
51.686 kB
819 B
291 B
react-message-bar
MessageBar (all components)
22.306 kB
8.184 kB
25.033 kB
8.86 kB
2.727 kB
676 B
react-overflow
hooks only
9.117 kB
3.241 kB
10.035 kB
3.623 kB
918 B
382 B
react-persona
Persona
54.17 kB
16.793 kB
55.109 kB
17.173 kB
939 B
380 B
react-popover
Popover
125.741 kB
40.448 kB
126.552 kB
40.774 kB
811 B
326 B
react-portal
Portal
12.731 kB
4.963 kB
13.641 kB
5.339 kB
910 B
376 B
react-positioning
useSafeZoneArea
12.445 kB
5 kB
13.229 kB
5.326 kB
784 B
326 B
react-progress
ProgressBar
19.127 kB
7.436 kB
20.052 kB
7.774 kB
925 B
338 B
react-provider
FluentProvider
18.911 kB
7.278 kB
19.867 kB
7.63 kB
956 B
352 B
react-radio
Radio
27.012 kB
8.731 kB
27.951 kB
9.104 kB
939 B
373 B
react-radio
RadioGroup
12.774 kB
5.184 kB
13.716 kB
5.559 kB
942 B
375 B
react-select
Select
24.887 kB
8.943 kB
25.806 kB
9.305 kB
919 B
362 B
react-slider
Slider
32.259 kB
11.103 kB
33.201 kB
11.46 kB
942 B
357 B
react-spinbutton
SpinButton
32.542 kB
10.603 kB
33.459 kB
10.966 kB
917 B
363 B
react-spinner
Spinner
22.441 kB
7.35 kB
23.387 kB
7.71 kB
946 B
360 B
react-swatch-picker
@fluentui/react-swatch-picker - package
92.162 kB
27.267 kB
92.63 kB
27.441 kB
468 B
174 B
react-switch
Switch
32.256 kB
10.183 kB
33.214 kB
10.512 kB
958 B
329 B
react-table
DataGrid
147.115 kB
43.627 kB
147.93 kB
43.933 kB
815 B
306 B
react-table
Table (Primitives only)
36.931 kB
12.324 kB
37.848 kB
12.626 kB
917 B
302 B
react-table
Table as DataGrid
118.7 kB
33.35 kB
119.624 kB
33.697 kB
924 B
347 B
react-table
Table (Selection only)
65.492 kB
18.622 kB
66.418 kB
18.919 kB
926 B
297 B
react-table
Table (Sort only)
64.135 kB
18.232 kB
65.061 kB
18.536 kB
926 B
304 B
react-tag-picker
@fluentui/react-tag-picker - package
174.152 kB
54.127 kB
174.66 kB
54.31 kB
508 B
183 B
react-tags
InteractionTag
12.464 kB
4.95 kB
13.404 kB
5.325 kB
940 B
375 B
react-tags
Tag
28.389 kB
8.911 kB
29.329 kB
9.287 kB
940 B
376 B
react-tags
TagGroup
69.754 kB
21.41 kB
70.688 kB
21.761 kB
934 B
351 B
react-teaching-popover
TeachingPopover
101.1 kB
31.859 kB
101.893 kB
32.177 kB
793 B
318 B
react-text
Text - Default
14.036 kB
5.461 kB
14.952 kB
5.813 kB
916 B
352 B
react-text
Text - Wrappers
17.195 kB
5.772 kB
18.112 kB
6.134 kB
917 B
362 B
react-textarea
Textarea
23.409 kB
8.452 kB
24.325 kB
8.822 kB
916 B
370 B
react-timepicker-compat
TimePicker
141.076 kB
46.036 kB
141.889 kB
46.316 kB
813 B
280 B
react-toast
Toast (including Toaster)
90.614 kB
28.148 kB
91.553 kB
28.467 kB
939 B
319 B
react-tooltip
Tooltip
53.183 kB
18.848 kB
54.144 kB
19.182 kB
961 B
334 B
react-tree
FlatTree
135.901 kB
40.452 kB
136.709 kB
40.74 kB
808 B
288 B
react-tree
PersonaFlatTree
137.729 kB
40.967 kB
138.537 kB
41.257 kB
808 B
290 B
react-tree
PersonaTree
133.79 kB
39.741 kB
134.597 kB
40.03 kB
807 B
289 B
react-tree
Tree
131.968 kB
39.256 kB
132.775 kB
39.562 kB
807 B
306 B
Unchanged fixtures
Package & Exports Size (minified/GZIP)
keyboard-key
keyboard-key package
3.746 kB
1.928 kB
keyboard-keys
Multiple keyCodes
50 B
70 B
keyboard-keys
Multiple keys
87 B
94 B
keyboard-keys
Single key
44 B
64 B
keyboard-keys
Single keyCode
39 B
59 B
priority-overflow
createOverflowManager
5.376 kB
2.176 kB
react
ActivityItem
71.22 kB
23.347 kB
react
Announced
38.472 kB
13.275 kB
react
Autofill
15.42 kB
4.766 kB
react
Breadcrumb
200.805 kB
59.601 kB
react
Button
194.354 kB
55.886 kB
react
ButtonGrid
179.242 kB
53.891 kB
react
Calendar
121.162 kB
36.83 kB
react
Callout
84.299 kB
27.593 kB
react
Check
53.206 kB
17.835 kB
react
Checkbox
59.978 kB
19.874 kB
react
ChoiceGroup
65.488 kB
21.465 kB
react
ChoiceGroupOption
58.769 kB
19.353 kB
react
Coachmark
92.7 kB
29.305 kB
react
Color
7.789 kB
3.127 kB
react
ColorPicker
134.97 kB
42.125 kB
react
ComboBox
250.687 kB
71.515 kB
react
CommandBar
201.861 kB
59.387 kB
react
ContextualMenu
154.229 kB
47.566 kB
react
DatePicker
183.251 kB
55.892 kB
react
DateTimeUtilities
5.244 kB
1.849 kB
react
DetailsList
229.929 kB
65.81 kB
react
Dialog
210.16 kB
62.358 kB
react
Divider
19.588 kB
6.84 kB
react
DocumentCard
215.843 kB
63.666 kB
react
DragDrop
8.343 kB
2.724 kB
react
DraggableZone
34.28 kB
11.488 kB
react
Dropdown
233.151 kB
67.962 kB
react
ExtendedPicker
96.823 kB
27.866 kB
react
Fabric
41.728 kB
14.343 kB
react
Facepile
209.377 kB
62.375 kB
react
FloatingPicker
240.865 kB
68.222 kB
react
FocusTrapZone
16.99 kB
5.891 kB
react
FocusZone
55.1 kB
17.451 kB
react
Grid
179.242 kB
53.891 kB
react
GroupedList
135.035 kB
40.67 kB
react
GroupedListV2
122.659 kB
37.758 kB
react
HoverCard
96.784 kB
30.688 kB
react
Icon
51.887 kB
17.263 kB
react
Icons
66.339 kB
24.385 kB
react
Image
46.901 kB
15.695 kB
react
Keytip
81.301 kB
26.677 kB
react
KeytipData
14.05 kB
4.583 kB
react
KeytipLayer
103.089 kB
31.9 kB
react
Keytips
105.873 kB
32.904 kB
react
Label
38.324 kB
13.241 kB
react
Layer
48.089 kB
16.348 kB
react
Link
39.665 kB
13.653 kB
react
List
39.346 kB
12.454 kB
react
MarqueeSelection
74.49 kB
22.402 kB
react
MessageBar
189.388 kB
56.33 kB
react
Modal
93.738 kB
30.223 kB
react
Nav
186.825 kB
55.723 kB
react
OverflowSet
33.354 kB
11.282 kB
react
Overlay
40.885 kB
14.077 kB
react
Panel
200.327 kB
59.336 kB
react
Persona
114.591 kB
36.435 kB
react
PersonaCoin
114.591 kB
36.435 kB
react
PersonaPresence
58.076 kB
19.372 kB
react
Pickers
297.91 kB
82.996 kB
react
Pivot
187.734 kB
56.5 kB
react
Popup
12.312 kB
4.197 kB
react
Positioning
22.764 kB
7.683 kB
react
PositioningContainer
73.445 kB
23.685 kB
react
ProgressIndicator
39.477 kB
13.528 kB
react
Rating
82.086 kB
26.09 kB
react
Fluent UI React (entire library)
1.019 MB
283.183 kB
react
ResizeGroup
13.35 kB
4.379 kB
react
ResponsiveMode
8.13 kB
2.966 kB
react
ScrollablePane
55.541 kB
17.718 kB
react
SearchBox
187.63 kB
55.936 kB
react
SelectableOption
724 B
413 B
react
SelectedItemsList
231.35 kB
67.176 kB
react
Selection
42.418 kB
12.26 kB
react
Separator
35.365 kB
12.132 kB
react
Shimmer
49.249 kB
16.258 kB
react
ShimmeredDetailsList
240.71 kB
68.549 kB
react
Slider
57.627 kB
19.198 kB
react
SpinButton
191.297 kB
57.006 kB
react
Spinner
41.759 kB
14.468 kB
react
Stack
42.039 kB
14.389 kB
react
Sticky
32.577 kB
10.488 kB
react
Styling
46.033 kB
15.135 kB
react
SwatchColorPicker
189.637 kB
57.417 kB
react
TeachingBubble
204.648 kB
60.317 kB
react
Text
36.886 kB
12.806 kB
react
TextField
80.798 kB
25.308 kB
react
Theme
43.486 kB
14.168 kB
react
ThemeGenerator
12.384 kB
4.116 kB
react
TimePicker
240.515 kB
69.311 kB
react
Toggle
46.201 kB
15.957 kB
react
Tooltip
87.073 kB
28.151 kB
react
Utilities
82.938 kB
25.15 kB
react
Viewport
23.872 kB
7.642 kB
react
WeeklyDayPicker
101.348 kB
31.644 kB
react
WindowProvider
1.059 kB
541 B
react-aria
ARIA - useARIAButtonProps
1.354 kB
648 B
react-aria
ARIA - AriaLiveAnnouncer
3.293 kB
1.507 kB
react-charting
AreaChart
302.827 kB
94.751 kB
react-charting
ChartHoverCard
37.196 kB
12.7 kB
react-charting
DeclarativeChart
677.243 kB
191.438 kB
react-charting
DonutChart
203.703 kB
63.757 kB
react-charting
GanttChart
282.793 kB
88.76 kB
react-charting
GaugeChart
197.055 kB
61.221 kB
react-charting
GroupedVerticalBarChart
294.747 kB
91.91 kB
react-charting
HeatMapChart
285.643 kB
89.439 kB
react-charting
HorizontalBarChart
127.266 kB
39.944 kB
react-charting
HorizontalBarChartWithAxis
293.933 kB
91.166 kB
react-charting
Legends
151.481 kB
46.399 kB
react-charting
LineChart
332.434 kB
101.789 kB
react-charting
MultiStackedBarChart
181.933 kB
55.389 kB
react-charting
PieChart
134.305 kB
42.299 kB
react-charting
PolarChart
235.149 kB
74.293 kB
react-charting
SankeyChart
158.002 kB
49.166 kB
react-charting
ScatterChart
289 kB
91.071 kB
react-charting
Sparkline
87.616 kB
29.671 kB
react-charting
StackedBarChart
175.618 kB
52.99 kB
react-charting
TreeChart
84.809 kB
26.636 kB
react-charting
VerticalBarChart
303.585 kB
93.172 kB
react-charting
VerticalStackedBarChart
300.791 kB
92.923 kB
react-charts
HorizontalBarChartWithAxis
63 B
83 B
react-charts
Sparkline
80.503 kB
26.644 kB
react-jsx-runtime
Classic Pragma
1.101 kB
550 B
react-jsx-runtime
JSX Dev Runtime
1.914 kB
908 B
react-motion
@fluentui/react-motion - createMotionComponent()
4.339 kB
1.881 kB
react-motion
@fluentui/react-motion - createPresenceComponent()
6.091 kB
2.501 kB
react-motion
@fluentui/react-motion - PresenceGroup
1.727 kB
823 B
react-portal-compat
PortalCompatProvider
5.567 kB
2.237 kB
react-positioning
usePositioning
28.889 kB
10.158 kB
react-theme
Single theme token import
69 B
89 B
react-theme
Teams: all themes
37.985 kB
7.895 kB
react-theme
Teams: Light theme
20.803 kB
5.851 kB
react-utilities
SSRProvider
180 B
160 B
🤖 This report was generated against aedc345f58bc16bb8540615b5afdf3d2d3569db4

Hotell added 6 commits June 29, 2026 13:20
…import.meta

cy specs import scripts-cypress whose inlined base.config uses import.meta; type-check under commonjs failed (TS1343). esnext module allows it (type-check only, noEmit).
…oad as ESM

Their cypress.config.ts imports the type:module @fluentui/scripts-cypress, which forces Node to load the config as ESM; ts-node was emitting CommonJS (exports) into that ESM scope (TS-node CJS/ESM mismatch) -> 'exports is not defined in ES module scope'. Aligning the apps to type:module makes ts-node emit ESM. Renamed jest/eslint/rit/test-setup configs to .cjs accordingly.

Validated: rit-tests-v8 e2e(17)+lint+test+type-check, rit-tests-v9 test-rit(17) type-check+test+lint.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant