Skip to content

feat(react-headless-components-preview): add Combobox component and stories#36114

Open
dmytrokirpa wants to merge 3 commits into
feat/headless-dropdown-storiesfrom
feat/headless-combobox-stories
Open

feat(react-headless-components-preview): add Combobox component and stories#36114
dmytrokirpa wants to merge 3 commits into
feat/headless-dropdown-storiesfrom
feat/headless-combobox-stories

Conversation

@dmytrokirpa
Copy link
Copy Markdown
Contributor

@dmytrokirpa dmytrokirpa commented May 7, 2026

Summary

  • Adds the headless Combobox component, its stories, and Cypress/test coverage to @fluentui/react-headless-components-preview.
  • Wires up a ./combobox subpath export and registers the package in the bundle-size fixture.
  • Shares Listbox, Option, and OptionGroup with the headless Dropdown by re-exporting from ../Dropdown/....

Note: This PR is stacked on top of #36101 (headless Dropdown). Merge that one first; the diff here will collapse to Combobox-only changes once the base is merged.

@dmytrokirpa dmytrokirpa requested a review from a team as a code owner May 7, 2026 09:22
@dmytrokirpa dmytrokirpa self-assigned this May 7, 2026
@dmytrokirpa dmytrokirpa marked this pull request as draft May 7, 2026 09:25
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 7, 2026

Pull request demo site: URL

@dmytrokirpa dmytrokirpa force-pushed the feat/headless-dropdown-stories branch from edf6790 to 1dab2d3 Compare May 7, 2026 09:35
dmytrokirpa and others added 3 commits May 7, 2026 12:17
…tories

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…tories

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@dmytrokirpa dmytrokirpa force-pushed the feat/headless-combobox-stories branch from 4547588 to 2e230cf Compare May 7, 2026 10:20
@dmytrokirpa dmytrokirpa marked this pull request as ready for review May 12, 2026 11:24
@dmytrokirpa dmytrokirpa requested review from Copilot May 12, 2026 13:17
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds a new headless Combobox surface to @fluentui/react-headless-components-preview, including Storybook stories, unit tests, Cypress coverage, and a new ./combobox subpath export. It also reuses the headless Dropdown’s Listbox/Option/OptionGroup implementations via re-exports to keep behavior consistent across headless selection components.

Changes:

  • Added headless Combobox implementation (state, render, context values) plus Jest + Cypress tests.
  • Added Storybook stories and styling for common scenarios (default, controlled, freeform, grouped, multiselect, disabled, controlled open).
  • Wired ./combobox export + API report, and registered Combobox in the bundle-size fixture.

Reviewed changes

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

Show a summary per file
File Description
packages/react-components/react-headless-components-preview/stories/src/Dropdown/DropdownBestPractices.md Adds placeholder Best Practices doc for Dropdown stories/docs.
packages/react-components/react-headless-components-preview/stories/src/Combobox/index.stories.tsx Registers Combobox Storybook entry and story exports.
packages/react-components/react-headless-components-preview/stories/src/Combobox/ComboboxMultiselect.stories.tsx Adds multiselect Combobox story.
packages/react-components/react-headless-components-preview/stories/src/Combobox/ComboboxGrouped.stories.tsx Adds grouped options Combobox story.
packages/react-components/react-headless-components-preview/stories/src/Combobox/ComboboxFreeform.stories.tsx Adds freeform input Combobox story.
packages/react-components/react-headless-components-preview/stories/src/Combobox/ComboboxDisabled.stories.tsx Adds disabled Combobox story.
packages/react-components/react-headless-components-preview/stories/src/Combobox/ComboboxDescription.md Adds component-level Storybook description text.
packages/react-components/react-headless-components-preview/stories/src/Combobox/ComboboxDefault.stories.tsx Adds default Combobox story with clear + expand icons.
packages/react-components/react-headless-components-preview/stories/src/Combobox/ComboboxControllingOpenAndClose.stories.tsx Adds controlled open/close story for Combobox.
packages/react-components/react-headless-components-preview/stories/src/Combobox/ComboboxControlled.stories.tsx Adds fully controlled selection/value story.
packages/react-components/react-headless-components-preview/stories/src/Combobox/combobox.module.css Adds story styling for the headless Combobox examples.
packages/react-components/react-headless-components-preview/library/src/components/Combobox/useComboboxContextValues.ts Adapts useComboboxContextValues from @fluentui/react-combobox for headless state typing.
packages/react-components/react-headless-components-preview/library/src/components/Combobox/useCombobox.ts Implements headless Combobox state using shared popup/listbox plumbing.
packages/react-components/react-headless-components-preview/library/src/components/Combobox/renderCombobox.tsx Adds default renderer for headless Combobox + providers.
packages/react-components/react-headless-components-preview/library/src/components/Combobox/index.ts Exposes Combobox API and re-exports Dropdown Listbox/Option/OptionGroup.
packages/react-components/react-headless-components-preview/library/src/components/Combobox/Combobox.types.ts Defines headless Combobox public types and data attributes.
packages/react-components/react-headless-components-preview/library/src/components/Combobox/Combobox.tsx Adds headless Combobox component entrypoint.
packages/react-components/react-headless-components-preview/library/src/components/Combobox/Combobox.test.tsx Adds Jest conformance + basic behavior assertions.
packages/react-components/react-headless-components-preview/library/src/components/Combobox/Combobox.cy.tsx Adds Cypress coverage for key interactions and variants.
packages/react-components/react-headless-components-preview/library/src/combobox.ts Adds ./combobox subpath entry re-exporting the Combobox surface.
packages/react-components/react-headless-components-preview/library/package.json Adds exports["./combobox"] mapping.
packages/react-components/react-headless-components-preview/library/etc/combobox.api.md Adds API Extractor report for ./combobox.
packages/react-components/react-headless-components-preview/library/bundle-size/AllComponents.fixture.js Registers combobox export in bundle-size fixture.
change/@fluentui-react-headless-components-preview-0ee0a685-d92f-4953-a5bd-8813ad8abc16.json Adds Beachball change entry for the new Combobox export.

},
listbox: open || hasFocus ? listbox : undefined,
clearIcon: slot.optional(mergedProps.clearIcon, {
defaultProps: { 'aria-hidden': 'true' },
id="combobox"
placeholder="Select an animal"
clearable
clearIcon={{ id: 'clear-icon', children: 'X', 'aria-label': 'Clear selection' }}
Comment on lines +34 to +42
>
{options.map(option => (
<Option
className={styles.option}
key={option}
checkIcon={{ className: styles.checkIcon, children: <CheckmarkRegular /> }}
disabled={option === 'Ferret'}
>
{option}
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