Skip to content

feat(react-combobox): add base hooks for Combobox and Dropdown#35915

Open
dmytrokirpa wants to merge 3 commits intomicrosoft:masterfrom
dmytrokirpa:feat/react-combobox-base-hooks
Open

feat(react-combobox): add base hooks for Combobox and Dropdown#35915
dmytrokirpa wants to merge 3 commits intomicrosoft:masterfrom
dmytrokirpa:feat/react-combobox-base-hooks

Conversation

@dmytrokirpa
Copy link
Copy Markdown
Contributor

@dmytrokirpa dmytrokirpa commented Mar 26, 2026

Summary

  • Adds useComboboxBase_unstable for Combobox (omits appearance, size; expandIcon/clearIcon without default icon children)
  • Adds useDropdownBase_unstable for Dropdown (omits appearance, size; expandIcon/clearButton without default icon children)
  • Exports ComboboxBaseHookProps, ComboboxBaseHookState, DropdownBaseHookProps, DropdownBaseHookState from package index
  • Note: naming uses *HookProps/*HookState suffix to avoid conflict with existing ComboboxBaseProps/ComboboxBaseState types (shared internal state between Combobox and Dropdown)
  • Listbox, Option, OptionGroup skipped — no design-only state props

Part of the base state hooks RFC: docs/react-v9/contributing/rfcs/react-components/convergence/base-state-hooks.md

Test plan

  • Existing tests pass
  • TypeScript passes (tsc --noEmit)
  • Lint passes

🤖 Generated with Claude Code

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Pull request demo site: URL

@@ -0,0 +1,7 @@
{
Copy link
Copy Markdown

@github-actions github-actions bot Mar 26, 2026

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/Charts-DonutChart 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Charts-DonutChart.Dynamic - RTL.default.chromium.png 5570 Changed
vr-tests-react-components/Charts-DonutChart.Dynamic.default.chromium.png 5581 Changed
vr-tests-react-components/Charts-DonutChart.Dynamic - Dark Mode.default.chromium.png 7530 Changed
vr-tests-react-components/Field 4 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Field.Combobox+horizontal.default.chromium.png 6024 Changed
vr-tests-react-components/Field.Dropdown+horizontal.default.chromium.png 6002 Changed
vr-tests-react-components/Field.Dropdown.default.chromium.png 3582 Changed
vr-tests-react-components/Field.Combobox.default.chromium.png 3608 Changed
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 605 Changed
vr-tests-react-components/Menu Converged - submenuIndicator slotted content.default - RTL.submenus open.chromium.png 599 Changed
vr-tests-react-components/Positioning 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Positioning.Positioning end.chromium.png 959 Changed
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 624 Changed
vr-tests-react-components/ProgressBar converged 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - High Contrast.default.chromium.png 128 Changed
vr-tests-react-components/TagPicker 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled - High Contrast.chromium.png 1319 Changed
vr-tests-react-components/TagPicker.disabled - RTL.disabled input hover.chromium.png 635 Changed

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

@github-actions
Copy link
Copy Markdown

📊 Bundle size report

Package & Exports Baseline (minified/GZIP) PR Change
react-combobox
Combobox (including child components)
105.208 kB
34.168 kB
105.599 kB
34.274 kB
391 B
106 B
react-combobox
Dropdown (including child components)
105.832 kB
34.1 kB
106.23 kB
34.229 kB
398 B
129 B
react-components
react-components: entire library
1.297 MB
324.105 kB
1.297 MB
324.268 kB
662 B
163 B
react-tag-picker
@fluentui/react-tag-picker - package
186.596 kB
55.849 kB
186.726 kB
55.891 kB
130 B
42 B
react-timepicker-compat
TimePicker
108.174 kB
35.695 kB
108.565 kB
35.848 kB
391 B
153 B
Unchanged fixtures
Package & Exports Size (minified/GZIP)
react-components
react-components: Button, FluentProvider & webLightTheme
70.397 kB
19.96 kB
react-components
react-components: Accordion, Button, FluentProvider, Image, Menu, Popover
236.663 kB
68.729 kB
react-components
react-components: FluentProvider & webLightTheme
43.612 kB
14.022 kB
react-portal-compat
PortalCompatProvider
8.386 kB
2.624 kB
🤖 This report was generated against 8244b433cc0d2be428c043604ce419fe10d2ae4f

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