Breadcrumbs

Breadcrumbs display the user's current location within a navigational hierarchy, allowing them to trace their path back to the starting point.

Installation

$ cbui-cli install breadcrumbs

Import

index.tsx
1import { Breadcrumbs, BreadcrumbItem, useBreadcrumbsContext, BreadcrumbsContext } from '@/crossbuildui/breadcrumbs'; 2import Icon from 'react-native-vector-icons/MaterialIcons'; // If using custom icons

Basic Usage

Create a breadcrumb trail by nesting BreadcrumbItem components within a Breadcrumbs container. Use the isCurrent prop to indicate the active page.

index.tsx
1<Breadcrumbs> 2 <BreadcrumbItem href="/home">Home</BreadcrumbItem> 3 <BreadcrumbItem href="/products">Products</BreadcrumbItem> 4 <BreadcrumbItem isCurrent>Laptops</BreadcrumbItem> 5</Breadcrumbs>

With Icons

You can include icons or other custom content within breadcrumb items using the startContent or endContent props.

index.tsx
1<Breadcrumbs> 2 <BreadcrumbItem href="/home" startContent={<Icon name="home" size={16} />}> 3 Home 4 </BreadcrumbItem> 5 <BreadcrumbItem href="/settings" startContent={<Icon name="settings" size={16} />}> 6 Settings 7 </BreadcrumbItem> 8 <BreadcrumbItem isCurrent startContent={<Icon name="person" size={16} />}> 9 Profile 10 </BreadcrumbItem> 11</Breadcrumbs>

Variants & Colors

Breadcrumbs support light (default), solid, bordered, and glass variants. The color prop influences item text color and container background/border for solid/bordered variants. For the glass variant, item text color often defaults to the theme's foreground.

index.tsx
1// Light (default) 2<Breadcrumbs> 3 <BreadcrumbItem>Light</BreadcrumbItem> 4 <BreadcrumbItem>Variant</BreadcrumbItem> 5</Breadcrumbs> 6 7// Solid 8<Breadcrumbs variant="solid" color="primary" radius="md"> 9 <BreadcrumbItem>Solid</BreadcrumbItem> 10 <BreadcrumbItem>Primary</BreadcrumbItem> 11</Breadcrumbs> 12 13// Bordered 14<Breadcrumbs variant="bordered" color="secondary" radius="lg"> 15 <BreadcrumbItem>Bordered</BreadcrumbItem> 16 <BreadcrumbItem>Secondary</BreadcrumbItem> 17</Breadcrumbs> 18 19// Glass 20<Breadcrumbs variant="glass" glassIntensity={70} glassTint="light" radius="md"> 21 <BreadcrumbItem href="/store">Store</BreadcrumbItem> 22 <BreadcrumbItem isCurrent>Accessories</BreadcrumbItem> 23</Breadcrumbs>

Sizes

Adjust the size of breadcrumb items using the size prop. Available sizes are sm, md (default), and lg.

index.tsx
1<Breadcrumbs size="sm"> 2 <BreadcrumbItem>Small</BreadcrumbItem> 3 <BreadcrumbItem>Size</BreadcrumbItem> 4</Breadcrumbs> 5 6<Breadcrumbs size="md"> 7 <BreadcrumbItem>Medium</BreadcrumbItem> 8 <BreadcrumbItem>Size</BreadcrumbItem> 9</Breadcrumbs> 10 11<Breadcrumbs size="lg"> 12 <BreadcrumbItem>Large</BreadcrumbItem> 13 <BreadcrumbItem>Size</BreadcrumbItem> 14</Breadcrumbs>

Glass Variant

The glass variant applies a frosted glass effect to the breadcrumbs container using expo-blur. Customize it with glassIntensity (0-100) and glassTint ('light', 'dark', 'default'). Item text and separator colors adapt for better contrast on the blurred background. You might need to adjust item colors manually for dark glass tints.

index.tsx
1<Breadcrumbs variant="glass" glassIntensity={80} glassTint="light" radius="lg" style={{padding: 8}}> 2 <BreadcrumbItem href="/home" startContent={<Icon name="home" size={16} />}> 3 Home 4 </BreadcrumbItem> 5 <BreadcrumbItem isCurrent>Dashboard</BreadcrumbItem> 6</Breadcrumbs> 7 8<Breadcrumbs variant="glass" glassIntensity={40} glassTint="dark" radius="md" style={{padding: 8, marginTop: 16}}> 9 <BreadcrumbItem href="/settings" itemStyles={{content: {color: 'white'}, startContent: {color: 'white'}}} startContent={<Icon name="settings" size={16} />}> 10 Settings 11 </BreadcrumbItem> 12 <BreadcrumbItem isCurrent itemStyles={{content: {color: 'lightgray'}}}>Appearance</BreadcrumbItem> 13</Breadcrumbs>

Collapsing Items

When there are many breadcrumb items, you can use maxItems to collapse intermediate items into an ellipsis (...). Control the number of visible items before and after the ellipsis with itemsBeforeCollapse and itemsAfterCollapse.

index.tsx
1<Breadcrumbs maxItems={3} itemsBeforeCollapse={1} itemsAfterCollapse={1}> 2 <BreadcrumbItem href="/section1">Section 1</BreadcrumbItem> 3 <BreadcrumbItem href="/section2">Section 2</BreadcrumbItem> 4 <BreadcrumbItem href="/section3">Section 3</BreadcrumbItem> 5 <BreadcrumbItem href="/section4">Section 4</BreadcrumbItem> 6 <BreadcrumbItem href="/section5" isCurrent>Section 5</BreadcrumbItem> 7</Breadcrumbs>

Custom Separators

Provide a custom separator globally via the separator prop on Breadcrumbs, or for individual items using the separator prop on BreadcrumbItem.

index.tsx
1<Breadcrumbs separator={<Icon name="arrow-forward-ios" size={12} color="gray" />}> 2 <BreadcrumbItem href="/path1">Path One</BreadcrumbItem> 3 <BreadcrumbItem href="/path2">Path Two</BreadcrumbItem> 4 <BreadcrumbItem isCurrent>Current Page</BreadcrumbItem> 5</Breadcrumbs> 6 7// Item-specific separator 8<Breadcrumbs> 9 <BreadcrumbItem href="/docs">Docs</BreadcrumbItem> 10 <BreadcrumbItem href="/components" separator={<Text style={{marginHorizontal: 4}}>→</Text>}> 11 Components 12 </BreadcrumbItem> 13 <BreadcrumbItem isCurrent>Breadcrumbs</BreadcrumbItem> 14</Breadcrumbs>

Props Overview

Breadcrumbs Props

PROPTYPEDEFAULTDESCRIPTION
childrenReactElement<BreadcrumbItemProps>[]-The breadcrumb items.
variant'solid' | 'bordered' | 'light' | 'glass''light'Visual style.
colorTheme color key'foreground'Color theme.
size'sm' | 'md' | 'lg''md'Size of items.
radius'none' | 'sm' | 'md' | 'lg' | 'full''md'Container border radius for solid/bordered variants.
underline'none' | 'hover' | 'active' | 'always''hover'Underline style.
separatorReactNodeChevron IconCustom global separator.
maxItemsnumber-Max items before collapsing.
itemsBeforeCollapsenumber1Items before ellipsis.
itemsAfterCollapsenumber1Items after ellipsis.
hideSeparatorbooleanfalseHide all separators.
isDisabledbooleanfalseDisable all items (except current).
itemStyleBreadcrumbItemSlotsStyles-Global styles for item slots.
stylesBreadcrumbsSlotsStyles-Styles for container slots (base, list, ellipsis).
styleStyleProp<ViewStyle>-Style for the outer container.
glassTint'default' | 'light' | 'dark'Theme-derivedTint for the 'glass' variant blur effect.
glassIntensitynumber50Intensity (0-100) for the 'glass' variant blur effect.

BreadcrumbItem Props

PROPTYPEDEFAULTDESCRIPTION
childrenReactNode-Content of the item.
color, size, underlinevariousInheritedOverrides parent settings.
startContent, endContentReactNode-Content at start/end.
separatorReactNodeInheritedItem-specific separator.
isCurrentbooleanfalseMarks item as current page.
isLastbooleanInjected(Injected by Breadcrumbs) Marks item as last.
hideSeparatorbooleanfalseHides separator after this item.
disabledbooleanfalseDisables the item.
itemStylesBreadcrumbItemSlotsStyles-Styles for this item's slots.
styleStyleProp<ViewStyle>-Style for the Pressable wrapper.
onPress(event) => void-Handler for press events.
...PressablePropsvarious-Other props from React Native's Pressable.

Styling

Customize the appearance using:

  • style prop on Breadcrumbs for the outer container.
  • styles prop on Breadcrumbs for internal slots like base, list, and ellipsis.
  • itemStyle prop on Breadcrumbs for global styling of all item slots.
  • itemStyles prop on BreadcrumbItem for specific item slot styling.
  • style prop on BreadcrumbItem for the Pressable wrapper.
  • For the glass variant, the background is rendered by BlurView from expo-blur, controlled by glassIntensity and glassTint. The styles.base.backgroundColor will be overridden for this variant.
index.tsx
1<Breadcrumbs 2 style={{ marginVertical: 10 }} // Style for the outer container 3 styles={{ 4 base: { padding: 8, backgroundColor: '#f0f0f0' }, // Style for the main list container 5 list: { justifyContent: 'center' }, 6 ellipsis: { fontWeight: 'bold' } 7 }} 8 itemStyle={{ // Global styles for all items 9 base: { marginHorizontal: 2 }, 10 content: { fontFamily: 'Arial' } 11 }} 12> 13 <BreadcrumbItem 14 itemStyles={{ // Specific styles for this item 15 base: { backgroundColor: 'lightblue' }, 16 content: { color: 'darkblue', fontWeight: 'bold' }, 17 startContent: { marginRight: 8 } 18 }} 19 startContent={<Icon name="star" size={16} />} 20 > 21 Styled Item 22 </BreadcrumbItem> 23 <BreadcrumbItem>Another Item</BreadcrumbItem> 24</Breadcrumbs>

Using Breadcrumbs Context

For advanced customization or to build components that react to the Breadcrumbs state, you can use the useBreadcrumbsContext hook. This hook provides access to properties like variant, color, size, maxItems, items (the children passed to Breadcrumbs), and more.

Any component that calls useBreadcrumbsContext must be a descendant of a Breadcrumbs component.

MyCustomBreadcrumbComponent.tsx
1import { Breadcrumbs, BreadcrumbItem, useBreadcrumbsContext } from '@/crossbuildui/breadcrumbs'; 2import { Text, View } from 'react-native'; 3 4const CustomBreadcrumbContent = () => { 5 const context = useBreadcrumbsContext(); 6 7 if (!context) { 8 return <Text>This component must be used within Breadcrumbs.</Text>; 9 } 10 11 const { variant, color, size, maxItems, items } = context; 12 13 return ( 14 <View style={{ marginTop: 8, padding: 8, backgroundColor: '#f0f0f0', borderRadius: 4 }}> 15 <Text>Breadcrumbs Info:</Text> 16 <Text>- Variant: {variant}</Text> 17 <Text>- Color: {color}</Text> 18 <Text>- Size: {size}</Text> 19 <Text>- Max Items: {maxItems ?? 'Not set'}</Text> 20 <Text>- Total Items (passed as children): {items.length}</Text> 21 </View> 22 ); 23}; 24 25// Later in your component: 26// <Breadcrumbs size="sm" color="primary"><BreadcrumbItem href="/home">Home</BreadcrumbItem><CustomBreadcrumbContent /></Breadcrumbs>

Accessibility

The Breadcrumbs component has accessibilityRole="menubar". Each interactive BreadcrumbItem has accessibilityRole="link" and appropriate accessibilityState (disabled, selected).