Skip to content

feat(headless): add autoSize for headless positioning API - #36662

Draft
Victor Genaev (mainframev) wants to merge 1 commit into
microsoft:masterfrom
mainframev:feat/headless-pos-autosize
Draft

feat(headless): add autoSize for headless positioning API#36662
Victor Genaev (mainframev) wants to merge 1 commit into
microsoft:masterfrom
mainframev:feat/headless-pos-autosize

Conversation

@mainframev

Copy link
Copy Markdown
Contributor

No description provided.

@github-actions

Copy link
Copy Markdown

📊 Bundle size report

Package & Exports Baseline (minified/GZIP) PR Change
react-headless-components-preview
react-headless-components-preview: entire library
238.991 kB
67.288 kB
241.332 kB
68.106 kB
2.341 kB
818 B
react-headless-components-preview
@fluentui/react-headless-components-preview/tag-picker
53.988 kB
17.748 kB
56.317 kB
18.492 kB
2.329 kB
744 B
react-headless-components-preview
@fluentui/react-headless-components-preview/teaching-popover
36.048 kB
11.996 kB
38.396 kB
12.751 kB
2.348 kB
755 B
Unchanged fixtures
Package & Exports Size (minified/GZIP)
react-avatar
Avatar
48.382 kB
15.299 kB
react-avatar
AvatarGroup
17.259 kB
6.885 kB
react-avatar
AvatarGroupItem
61.366 kB
19.157 kB
react-breadcrumb
@fluentui/react-breadcrumb - package
103.659 kB
29.076 kB
react-charts
AreaChart
406.892 kB
127.178 kB
react-charts
DeclarativeChart
758.436 kB
222.685 kB
react-charts
DonutChart
317.723 kB
97.973 kB
react-charts
FunnelChart
309.123 kB
94.771 kB
react-charts
GanttChart
390.022 kB
121.659 kB
react-charts
GaugeChart
317.073 kB
97.398 kB
react-charts
GroupedVerticalBarChart
398.105 kB
124.449 kB
react-charts
HeatMapChart
392.162 kB
122.7 kB
react-charts
HorizontalBarChart
297.399 kB
90.467 kB
react-charts
HorizontalBarChartWithAxis
63 B
83 B
react-charts
Legends
236.586 kB
71.05 kB
react-charts
LineChart
418.241 kB
130.308 kB
react-charts
PolarChart
345.578 kB
108.001 kB
react-charts
SankeyChart
213.787 kB
68.717 kB
react-charts
ScatterChart
397.565 kB
124.365 kB
react-charts
Sparkline
80.888 kB
26.864 kB
react-charts
VerticalBarChart
434.556 kB
129.335 kB
react-charts
VerticalStackedBarChart
404.12 kB
125.841 kB
react-checkbox
Checkbox
30.771 kB
10.912 kB
react-combobox
Combobox (including child components)
139.308 kB
45.062 kB
react-combobox
Dropdown (including child components)
139.073 kB
44.814 kB
react-components
react-components: all base hooks
217.385 kB
68.171 kB
react-components
react-components: Button, FluentProvider & webLightTheme
67.461 kB
19.461 kB
react-components
react-components: Accordion, Button, FluentProvider, Image, Menu, Popover
227.126 kB
68.406 kB
react-components
react-components: FluentProvider & webLightTheme
40.684 kB
13.549 kB
react-components
react-components: entire library
1.283 MB
322.105 kB
react-datepicker-compat
DatePicker Compat
217.437 kB
64.403 kB
react-dialog
Dialog (including children components)
90.974 kB
28.25 kB
react-field
Field
22.301 kB
8.308 kB
react-input
Input
26.23 kB
8.639 kB
react-list
List
75.535 kB
23.403 kB
react-list
ListItem
99.05 kB
30.27 kB
react-menu
Menu (including children components)
160.778 kB
51.105 kB
react-menu
Menu (including selectable components)
163.944 kB
51.734 kB
react-overflow
hooks only
10.203 kB
3.694 kB
react-persona
Persona
55.335 kB
17.235 kB
react-popover
Popover
126.59 kB
40.869 kB
react-portal-compat
PortalCompatProvider
5.341 kB
2.146 kB
react-positioning
usePositioning
28.985 kB
10.198 kB
react-positioning
useSafeZoneArea
13.398 kB
5.365 kB
react-progress
ProgressBar
20.207 kB
7.832 kB
react-radio
Radio
28.156 kB
9.153 kB
react-radio
RadioGroup
13.921 kB
5.609 kB
react-select
Select
26.099 kB
9.399 kB
react-slider
Slider
33.395 kB
11.506 kB
react-spinbutton
SpinButton
33.651 kB
11.009 kB
react-swatch-picker
@fluentui/react-swatch-picker - package
93.176 kB
27.605 kB
react-switch
Switch
33.392 kB
10.562 kB
react-table
DataGrid
147.799 kB
43.973 kB
react-table
Table (Primitives only)
38.032 kB
12.685 kB
react-table
Table as DataGrid
119.67 kB
33.75 kB
react-table
Table (Selection only)
66.547 kB
18.953 kB
react-table
Table (Sort only)
65.21 kB
18.575 kB
react-tag-picker
@fluentui/react-tag-picker - package
174.753 kB
54.556 kB
react-tags
InteractionTag
13.619 kB
5.381 kB
react-tags
Tag
29.532 kB
9.334 kB
react-tags
TagGroup
70.796 kB
21.806 kB
react-teaching-popover
TeachingPopover
101.77 kB
32.204 kB
react-textarea
Textarea
24.596 kB
8.908 kB
react-timepicker-compat
TimePicker
142.027 kB
46.435 kB
react-tooltip
Tooltip
54.69 kB
19.443 kB
react-tree
FlatTree
136.683 kB
40.816 kB
react-tree
PersonaFlatTree
138.546 kB
41.356 kB
react-tree
PersonaTree
134.627 kB
40.138 kB
react-tree
Tree
132.77 kB
39.634 kB
🤖 This report was generated against 49c0291821bfa7e2ef29514685a666198001ac73

@github-actions

Copy link
Copy Markdown

Pull request demo site: URL

@@ -0,0 +1,7 @@
{

@github-actions github-actions Bot Aug 31, 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/Avatar Converged 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Avatar Converged.badgeMask.normal.chromium.png 3 Changed
vr-tests-react-components/Menu Converged - submenuIndicator slotted content 1 screenshots
Image Name Diff(in Pixels) Image Type
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 897 Changed
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 498 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 173 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness.default.chromium.png 137 Changed

@mainframev
Victor Genaev (mainframev) force-pushed the feat/headless-pos-autosize branch 4 times, most recently from 8a80a2b to b2cfaeb Compare September 1, 2026 10:25

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR adds autoSize support to the headless preview positioning hook by reusing (and now publicly exporting) normalizeAutoSize from @fluentui/react-positioning, plus new measurement logic to derive available space from the anchor + viewport and apply logical max-* constraints.

Changes:

  • Exposes normalizeAutoSize (and NormalizedAutoSize) from @fluentui/react-positioning public entrypoint and updates API report.
  • Implements headless autoSize via a new useAutoSize hook and computeAvailableSize utilities, integrating it into the existing placement observer.
  • Adds Storybook docs/stories and Jest + Cypress coverage for autoSize behavior and edge cases.

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packages/react-components/react-positioning/library/src/index.ts Re-exports normalizeAutoSize (and NormalizedAutoSize) from the package entrypoint.
packages/react-components/react-positioning/library/etc/react-positioning.api.md API report updated to include normalizeAutoSize and NormalizedAutoSize.
packages/react-components/react-headless-components-preview/stories/src/Concepts/Positioning/utils.stories.tsx Updates supported props list so Storybook args include autoSize.
packages/react-components/react-headless-components-preview/stories/src/Concepts/Positioning/PositioningAutoSizeDescription.md Adds user-facing docs describing autoSize behavior and requirements.
packages/react-components/react-headless-components-preview/stories/src/Concepts/Positioning/PositioningAutoSize.stories.tsx New story exercising autoSize with overflowing content.
packages/react-components/react-headless-components-preview/stories/src/Concepts/Positioning/positioning.module.css Adds styling for the new autoSize story surface/content.
packages/react-components/react-headless-components-preview/stories/src/Concepts/Positioning/index.stories.tsx Registers the new AutoSize story.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/offset.ts Tightens resolveOffset return type to Required<OffsetObject>.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/index.ts Re-exports newly added available-size utilities/types.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/computeAvailableSize.ts New utility to compute available block/inline size from anchor + viewport.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/utils/computeAvailableSize.test.ts Unit tests for available-size computation and boundary measurement.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/usePositioning.ts Integrates autoSize into headless positioning and refines center-alignment workaround.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/usePositioning.test.tsx Adds alignment parameterized tests and comprehensive Jest coverage for autoSize.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/usePlacementObserver.ts Adds onUpdate callback to reuse observer ticks for auto-size updates.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/useAutoSize.ts New hook that applies/removes logical max-* constraints and overflow ownership.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/types.ts Extends headless PositioningProps to include autoSize.
packages/react-components/react-headless-components-preview/library/src/hooks/usePositioning/types.test.ts Ensures PositioningProps accepts the canonical AutoSize values.
packages/react-components/react-headless-components-preview/library/src/components/Popover/Popover.cy.tsx Adds Cypress coverage for autoSize (guarded by anchor-positioning support).
packages/react-components/react-headless-components-preview/library/etc/positioning.api.md Updates API report to include autoSize on exported PositioningProps.
packages/react-components/react-headless-components-preview/library/docs/popover-spec.md Updates spec doc with autoSize behavior + limitations, and clarifies alignment workaround.
packages/react-components/react-headless-components-preview/library/config/tests.cjs Adds CSS.supports shim for JSDOM so feature-gated paths can be tested.
change/@fluentui-react-positioning-eabe93ba-61eb-4d74-9975-7bbdf563ce9b.json Beachball change file for the new public export.
change/@fluentui-react-headless-components-preview-11a7a26b-d650-4d75-b17e-cb9d56a242fc.json Beachball change file for the headless autoSize feature.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

overflowProperty: string,
owned: boolean,
): boolean {
if (!enabled || size <= 0) {
@@ -0,0 +1,6 @@
{
"type": "minor",
"comment": "feat: expose normalizeAutosize",
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.

2 participants