Skip to content

feat(react-headless-components-preview): add headless List and ListItem components#36055

Draft
dmytrokirpa wants to merge 3 commits intomicrosoft:masterfrom
dmytrokirpa:feat/headless-list-listitem
Draft

feat(react-headless-components-preview): add headless List and ListItem components#36055
dmytrokirpa wants to merge 3 commits intomicrosoft:masterfrom
dmytrokirpa:feat/headless-list-listitem

Conversation

@dmytrokirpa
Copy link
Copy Markdown
Contributor

Summary

Adds headless wrappers for the react-list component family to @fluentui/react-headless-components-preview. Both components delegate to @fluentui/react-list hooks and render functions — no Griffel styling, no design tokens.

  • List — wraps useList_unstable + useListContextValues_unstable + renderList_unstable
  • ListItem — wraps useListItem_unstable + renderListItem_unstable

Stack order (review in this order)

  1. test(react-list): hook unit tests + bug fix (test(react-list): add unit tests for useList_unstable and useListItem_unstable; fix as-prop operator precedence #36053)
  2. feat(react-list): base hook exports (feat(react-list): export useListContextValues_unstable and ListContextValues #36054)
  3. This PR — headless List + ListItem ← you are here

Test plan

  • List and ListItem render without any applied styling
  • Context values propagate correctly from List down to ListItem
  • Selection and navigation modes work end-to-end
  • Consumers can apply arbitrary className/style

🤖 Generated with Claude Code

dmytrokirpa and others added 3 commits April 26, 2026 19:43
…_unstable; fix operator precedence in as prop

Tests cover default state, selection modes, navigation modes, and the
composite-mode as-prop branching. The as-prop fix corrects a precedence
bug where `props.as || navigationMode === 'composite' ? 'div' : ...`
was evaluated as `(props.as || navigationMode === 'composite') ? ...`.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…tValues

Required for the headless layer to compose context values without importing
internal module paths.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
…em components

Adds headless wrappers for the react-list component family. Both components
delegate to @fluentui/react-list hooks and render functions with no Griffel
styling applied.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
@github-actions
Copy link
Copy Markdown

Pull request demo site: URL

@@ -0,0 +1,7 @@
{
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 5 Changed
vr-tests-react-components/CalendarCompat 4 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/CalendarCompat.multiDayView - High Contrast.default.chromium.png 2243 Changed
vr-tests-react-components/CalendarCompat.multiDayView - Dark Mode.default.chromium.png 2172 Changed
vr-tests-react-components/CalendarCompat.multiDayView.default.chromium.png 654 Changed
vr-tests-react-components/CalendarCompat.multiDayView.default.chromium_1.png 654 Changed
vr-tests-react-components/Charts-DonutChart 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Charts-DonutChart.Dynamic - Dark Mode.default.chromium.png 7530 Changed
vr-tests-react-components/Charts-DonutChart.Dynamic.default.chromium.png 5581 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.submenus open.chromium.png 413 Changed
vr-tests-react-components/Positioning 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 861 Changed
vr-tests-react-components/Positioning.Positioning end.chromium.png 963 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 32 Changed
vr-tests-react-components/TagPicker 4 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled - Dark Mode.chromium.png 658 Changed
vr-tests-react-components/TagPicker.disabled - High Contrast.disabled input hover.chromium.png 1319 Changed
vr-tests-react-components/TagPicker.disabled - RTL.chromium.png 635 Changed
vr-tests-react-components/TagPicker.disabled.chromium.png 677 Changed

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

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