Skip to content

[WEB-8151] feat(breadcrumb): finalize Breadcrumb for design system — typed label/icon API, menu-crumb caret, a11y + RTL coverage#227

Open
codingwolf-at wants to merge 3 commits into
mainfrom
WEB-8151/breadcrumb-design-docs
Open

[WEB-8151] feat(breadcrumb): finalize Breadcrumb for design system — typed label/icon API, menu-crumb caret, a11y + RTL coverage#227
codingwolf-at wants to merge 3 commits into
mainfrom
WEB-8151/breadcrumb-design-docs

Conversation

@codingwolf-at

@codingwolf-at codingwolf-at commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Description

Finalizes the Breadcrumb component for design-system lock. Moves the component-tier crumbs from a children-based API to typed props, adds first-class icon slots, introduces a dedicated disclosure caret with an active state, and closes the API/a11y gaps found in a production-readiness audit.

API

  • BreadcrumbLink / BreadcrumbPage (components tier) now take a required label: string and an optional leading icon — typed and predictable — instead of freeform children. (Elements tier keeps the low-level children slots.)
  • Leading crumb icons render 16×16 automatically via the crumb's --node-size and tint secondary — consumers pass <Icon icon={…} tint="secondary" /> with no magnitude, matching the MenuItem convention.
  • BreadcrumbMenuTrigger / BreadcrumbEllipsisTrigger: render is no longer exposed, so a consumer can't accidentally override the fixed styled-crumb graft; label is now required on the menu trigger so it always has an accessible name.

New part

  • BreadcrumbTriggerIndicator — the menu-crumb disclosure caret, replacing the shared DisclosureIndicator. It carries a breadcrumb-specific active state: icon-secondary at rest, shifting to icon-primary (and rotating down) when that crumb's menu is open.

Styling

  • Crumb labels get whitespace-nowrap so long labels stay on a single line instead of wrapping and breaking the row.

Stories / docs

  • Added WithLongLabel, WithIcon, and an RTL CSS canary (asserts the separator chevron mirror + caret rotation under dir="rtl").
  • Documented the separator convention (N crumbs → N−1 separators; the Figma trailing-arrow is an authoring artifact, not spec) and refreshed JSDoc across parts.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • Feature (non-breaking change which adds functionality)
  • Improvement (change that would cause existing functionality to not work as expected)
  • Code refactoring
  • Performance improvements
  • Documentation update

Test Scenarios

  • Basic trail: render BreadcrumbLink label="…" crumbs + a final BreadcrumbPage label="…"; confirm the last crumb has aria-current="page" and there is no separator after it.
  • Icons: pass icon={} to a link and a page; confirm each renders 16×16 without a magnitude.
  • Long label: a long crumb label stays on one line (row height stays 24px, no wrap).
  • Menu crumb: open the menu; caret rotates down and turns primary while open, returns to secondary/inline-end when closed. Keyboard: ArrowDown opens, Enter selects, Escape closes and restores focus to the trigger.
  • Collapsed crumbs: click the ellipsis trigger; hidden crumbs appear as menuitems.
  • RTL: set dir="rtl"; the separator chevron mirrors and the caret rotation flips.
  • Types: BreadcrumbMenuTrigger/BreadcrumbEllipsisTrigger reject a render prop; BreadcrumbMenuTrigger requires label.
  • Gates: vp check clean; full vp test green (116 files / 796 tests, 13 breadcrumb).

References

WEB-8151

- Added `BreadcrumbLink` for navigable crumbs with an optional leading icon and label.
- Introduced `BreadcrumbPage` for the current page crumb, also supporting an optional leading icon.
- Updated `BreadcrumbMenuTrigger` to use `BreadcrumbTriggerIndicator` for improved visual consistency.
- Refactored existing breadcrumb components and stories to accommodate new structures and enhance usability.
- Adjusted styles and variants to ensure consistent appearance across breadcrumb elements.
@github-actions

Copy link
Copy Markdown

📚 Storybook preview: https://pr-227-propel-storybook.vamsi-906.workers.dev

…nents

- Modified `BreadcrumbEllipsisTriggerProps` and `BreadcrumbMenuTriggerProps` to include "render" in the omitted props for better flexibility.
- Updated the rendering order in `BreadcrumbEllipsisTrigger` and `BreadcrumbMenuTrigger` for improved clarity.
- Enhanced documentation for props to clarify usage and requirements.
- Added a new `RTLCanary` story to test and demonstrate RTL support in breadcrumb components, ensuring proper visual behavior in both LTR and RTL layouts.
@codingwolf-at codingwolf-at changed the title feat(breadcrumb): introduce BreadcrumbLink and BreadcrumbPage components [WIP] [WEB-8151] feat(breadcrumb): finalize Breadcrumb for design system — typed label/icon API, menu-crumb caret, a11y + RTL coverage Jul 13, 2026
@makeplane

makeplane Bot commented Jul 13, 2026

Copy link
Copy Markdown

Linked to Plane Work Item(s)

This comment was auto-generated by Plane

…nents

- Replaced the `swallow` function with inline event handling in `BreadcrumbLink` components to prevent default link behavior.
- Cleaned up the code by removing unnecessary comments related to the previous event handling approach.
- Ensured consistent behavior across all breadcrumb stories by updating the click event handling for navigable crumbs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant