Skip to content

feat(react-breadcrumb): add useBreadcrumbBase_unstable hook#35819

Draft
dmytrokirpa wants to merge 3 commits intomasterfrom
feat/react-breadcrumb-base-hooks
Draft

feat(react-breadcrumb): add useBreadcrumbBase_unstable hook#35819
dmytrokirpa wants to merge 3 commits intomasterfrom
feat/react-breadcrumb-base-hooks

Conversation

@dmytrokirpa
Copy link
Contributor

Summary

This PR adds base state hooks for all Breadcrumb components as part of the experimental base hooks initiative.

What was implemented

  • useBreadcrumbBase_unstable — base hook for Breadcrumb component

    • Props type: BreadcrumbBaseProps (omits size)
    • State type: BreadcrumbBaseState (omits size)
    • Handles: focusMode/arrow navigation via useArrowNavigationGroup, ARIA label, slot structure (root, list)
  • useBreadcrumbButtonBase_unstable — base hook for BreadcrumbButton component

    • Props type: BreadcrumbButtonBaseProps (omits size)
    • State type: BreadcrumbButtonBaseState (omits size)
    • Handles: current state, aria-current, aria-disabled, button element type selection, calls useButtonBase_unstable
  • useBreadcrumbDividerBase_unstable — base hook for BreadcrumbDivider component

    • Props type: BreadcrumbDividerBaseProps (same as BreadcrumbDividerProps since no design props)
    • State type: BreadcrumbDividerBaseState (omits size)
    • Handles: aria-hidden, RTL/LTR chevron icon selection via useFluent
  • useBreadcrumbItemBase_unstable — base hook for BreadcrumbItem component

    • Props type: BreadcrumbItemBaseProps (omits size)
    • State type: BreadcrumbItemBaseState (omits size)
    • Handles: slot structure for li element

Refactoring

All styled hooks (useBreadcrumb_unstable, useBreadcrumbButton_unstable, useBreadcrumbDivider_unstable, useBreadcrumbItem_unstable) now call their base counterparts internally and spread results, then add the size design prop.

Exports

All new types and hooks are exported from the package index.ts. They are NOT exported from @fluentui/react-components.

Test plan

  • TypeScript compilation passes (npx tsc --noEmit on the package)
  • Existing Breadcrumb components render unchanged
  • New base hooks can be used independently without design props

🤖 Generated with Claude Code

@github-actions
Copy link

github-actions bot commented Mar 3, 2026

Pull request demo site: URL

dmytrokirpa and others added 2 commits March 5, 2026 12:02
…mbButton, BreadcrumbDivider, and BreadcrumbItem

Implements base state hooks for all Breadcrumb components as part of the experimental base hooks initiative.
Each base hook extracts pure component logic (slot structure, ARIA attributes, keyboard navigation)
while omitting design props (primarily size).

- BreadcrumbBaseProps/BreadcrumbBaseState: omits size
  useBreadcrumbBase_unstable: handles focusMode, arrow navigation, ARIA label, slot structure

- BreadcrumbButtonBaseProps/BreadcrumbButtonBaseState: omits size
  useBreadcrumbButtonBase_unstable: handles current state, aria-current, aria-disabled, button behavior

- BreadcrumbDividerBaseProps/BreadcrumbDividerBaseState: excludes size (injected via context in full hook)
  useBreadcrumbDividerBase_unstable: handles aria-hidden, RTL/LTR chevron icon selection

- BreadcrumbItemBaseProps/BreadcrumbItemBaseState: excludes size (injected via context in full hook)
  useBreadcrumbItemBase_unstable: handles slot structure

All styled hooks now call their base counterparts internally.
All new types and hooks exported from package index.ts.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@dmytrokirpa dmytrokirpa force-pushed the feat/react-breadcrumb-base-hooks branch from 55bdfa4 to d4d7850 Compare March 5, 2026 11:03
@dmytrokirpa dmytrokirpa changed the base branch from experimental/component-base-hooks to master March 5, 2026 11:03
@@ -0,0 +1,7 @@
{
Copy link

@github-actions github-actions bot Mar 5, 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/Breadcrumb Converged 5 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Breadcrumb Converged.appearance - High Contrast.pressed.chromium.png 466 Changed
vr-tests-react-components/Breadcrumb Converged.appearance - Dark Mode.focused.chromium.png 275 Changed
vr-tests-react-components/Breadcrumb Converged.appearance - RTL.pressed.chromium.png 186 Changed
vr-tests-react-components/Breadcrumb Converged.appearance.default.chromium.png 184 Changed
vr-tests-react-components/Breadcrumb Converged.size.pressed.chromium.png 577 Changed
vr-tests-react-components/CalendarCompat 4 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/CalendarCompat.multiDayView - Dark Mode.default.chromium.png 1107 Changed
vr-tests-react-components/CalendarCompat.multiDayView - High Contrast.default.chromium.png 1236 Changed
vr-tests-react-components/CalendarCompat.multiDayView - RTL.default.chromium.png 495 Changed
vr-tests-react-components/CalendarCompat.multiDayView.default.chromium_1.png 403 Changed
vr-tests-react-components/Charts-DonutChart 3 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 - RTL.default.chromium.png 5570 Changed
vr-tests-react-components/Charts-DonutChart.Dynamic.default.chromium.png 5581 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 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 605 Changed
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 510 Changed
vr-tests-react-components/TagPicker 3 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled - Dark Mode.disabled input hover.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.disabled input hover.chromium.png 635 Changed

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

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

github-actions bot commented Mar 5, 2026

📊 Bundle size report

Package & Exports Baseline (minified/GZIP) PR Change
react-breadcrumb
@fluentui/react-breadcrumb - package
114.911 kB
31.405 kB
115.054 kB
31.45 kB
143 B
45 B
react-components
react-components: entire library
1.292 MB
323.107 kB
1.292 MB
323.159 kB
143 B
52 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.537 kB
68.697 kB
react-components
react-components: FluentProvider & webLightTheme
43.612 kB
14.022 kB
react-portal-compat
PortalCompatProvider
8.386 kB
2.624 kB
react-timepicker-compat
TimePicker
108.174 kB
35.695 kB
🤖 This report was generated against ace36179073ac4600a3635304a0941bd7dcda21d

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