Components

Breadcrumb

Displays the path to the current resource using a hierarchy of links.

Overview

Home / Components / Breadcrumb —— link 可点击,末级 Page 是纯文本。

GPUI · Live previewGPUI WASM

Installation

Breadcrumb 是单个 Rust 文件(src/breadcrumb.rs),只依赖 gpui-kit —— chevron / slash / dot 分隔符全部 PathBuilder 手绘。

Cargo.toml
[dependencies]gpui-kit = "0.6.6"# breadcrumb.rs is self-contained — separators are# painted with PathBuilder, no extra deps.

Download runnable example

Terminal
# Download the runnable example crate, then:cargo run --locked -- --breadcrumb# Other demos:cargo run --locked -- --breadcrumb separatorcargo run --locked -- --breadcrumb collapsedcargo run --locked -- --breadcrumb linkcargo run --locked -- --breadcrumb rtl

Usage

Breadcrumb 是实体(cx.new),CrumbItem 描述每条:Link 可点、Page 是纯文本、Ellipsis 表示折叠的中间层级。

Example.rs
use justdo_command::breadcrumb::{Breadcrumb, CrumbItem, CrumbSeparator};// Breadcrumb is an entity — create it on your view, render as// a child, subscribe for BreadcrumbNavigateEvent.let breadcrumb = cx.new(|_| {    Breadcrumb::new()        .items(vec![            CrumbItem::link("Home"),            CrumbItem::link("Components"),            CrumbItem::page("Breadcrumb"),        ])        .separator(CrumbSeparator::Chevron)});div().child(breadcrumb)

网页预览与桌面端运行同一份 Rust / GPUI 组件。

Composition

组合结构对齐 shadcn/ui 的 Breadcrumb / BreadcrumbList / Item / Link / Separator / Page / Ellipsis。

Structure
Breadcrumb                entity — renders the trail, emits BreadcrumbNavigateEvent└── BreadcrumbList        flex row of items + separators    ├── BreadcrumbItem    CrumbItem::Link(..) — clickable ancestor link    ├── BreadcrumbSeparator  Chevron | Slash | Dot (mirrored in RTL)    ├── BreadcrumbItem    CrumbItem::Ellipsis — collapsed "More"    └── BreadcrumbItem    CrumbItem::Page(..) — current page, plain text
Example.rs
// Links and the ellipsis emit BreadcrumbNavigateEvent;// the trailing Page crumb is text only (aria-current="page").cx.subscribe(&breadcrumb, |demo, _, event, cx| {    demo.navigate(event.label.clone());    cx.notify();});

Notes

Hit testing. 每条 link / ellipsis 是带 .id() 的独立元素 —— hover 变色、Tab 聚焦、focus-visible 描边都由 GPUI 命中测试驱动,不用自己算区域。

RTL. .rtl(true) 反转条目顺序并把 chevron 画成左向 —— 分隔符镜像逻辑在 chevron(color, mirrored) 里。

Accessibility

Current page

末级 crumb 渲染为纯文本(对应 BreadcrumbPage / aria-current="page"),不进入 Tab 顺序,点击无效果。

Keyboard

每条 link 与 ellipsis 可通过 Tab 聚焦,focus-visible 描边反馈;链接 hover 加深,不只依赖颜色表达可交互。

API Reference

实体暴露的 builder 方法、条目类型与事件。

APISignatureNotes
Breadcrumb::new()-> BreadcrumbDefault Home / Components / Breadcrumb trail.
.items(..)Vec<CrumbItem>Ordered crumbs; last should usually be Page.
CrumbItem::link(..)impl Into<SharedString>Clickable ancestor — BreadcrumbLink.
CrumbItem::page(..)impl Into<SharedString>Current page text — BreadcrumbPage.
CrumbItem::Ellipsis-Collapsed "…" marker — BreadcrumbEllipsis, pressable.
.separator(..)CrumbSeparatorChevron | Slash | Dot between crumbs.
.rtl(..)boolReverse order + mirrored chevrons for RTL locales.
BreadcrumbNavigateEvent{ label }Emitted by link/ellipsis press; subscribe via cx.subscribe.

Source & inspiration

结构与视觉参考 shadcn/ui Breadcrumb 。本页交互由 Rust / GPUI 绘制,基础样式来自 gpui-kit 。