Skip to content

Breadcrumb ​

A neo-brutalist breadcrumb navigation component built on Reka UI's breadcrumb primitives, suitable for displaying multi-level page trees, especially as a standard navigation element in complex nested scenarios such as admin dashboards.

Default links render as solid labels with a full border, background, and hard shadow. Hover changes the background; pressing moves the text and border together toward the shadow and hides it. The current page uses an accent fill with a smaller hard shadow. The folder variant retains its open-bottom tab appearance and flat surface, with background feedback on hover.

Demo ​

Preview

Installation ​

pnpm dlx brutx-vue@latest add breadcrumb

Usage ​

vue
<script setup>
import {
    Breadcrumb,
    BreadcrumbList,
    BreadcrumbItem,
    BreadcrumbLink,
    BreadcrumbPage,
    BreadcrumbSeparator,
    BreadcrumbEllipsis
} from 'brutx-ui-vue'
</script>

<template>
    <Breadcrumb>
        <BreadcrumbList>
            <BreadcrumbItem>
                <BreadcrumbLink href="/">Home</BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
                <BreadcrumbLink href="/components">Components</BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
                <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
            </BreadcrumbItem>
        </BreadcrumbList>
    </Breadcrumb>
</template>

Collapsed Ellipsis ​

When there are many page levels, use BreadcrumbEllipsis to collapse less important intermediate pages. It is a purely presentational ellipsis indicator (role="presentation", no interactive semantics); wrap it with a DropdownMenu or similar trigger if click-to-expand behavior is needed.

vue
<template>
    <Breadcrumb>
        <BreadcrumbList>
            <BreadcrumbItem>
                <BreadcrumbLink href="#">Home</BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
                <!-- Collapsed ellipsis indicator (presentational, non-interactive) -->
                <BreadcrumbEllipsis />
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
                <BreadcrumbPage>Current Page</BreadcrumbPage>
            </BreadcrumbItem>
        </BreadcrumbList>
    </Breadcrumb>
</template>

Sub-components ​

ComponentDescription
BreadcrumbRoot container
BreadcrumbListBreadcrumb list container
BreadcrumbItemSingle breadcrumb item container
BreadcrumbLinkClickable link item
BreadcrumbPageCurrent page indicator (non-clickable)
BreadcrumbSeparatorSeparator, renders a forward slash / by default
BreadcrumbEllipsisEllipsis indicator (presentational) for collapsing intermediate levels

API Reference ​

Breadcrumb

Breadcrumb — Props
NameTypeDefaultDescription
class
string | undefined
undefined
CSS classes added to the breadcrumb navigation <nav> root.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

Breadcrumb.vue:7

packages/ui/src/components/breadcrumb/Breadcrumb.vue

Breadcrumb — Slots
NameSignature or typeDescription
#default
{}
Breadcrumb navigation children, usually containing BreadcrumbList.
Details

Declared type

{}

Source

Breadcrumb.vue

packages/ui/src/components/breadcrumb/Breadcrumb.vue

BreadcrumbEllipsis

BreadcrumbEllipsis — Props
NameTypeDefaultDescription
class
string | undefined
undefined
CSS classes added to the ellipsis presentation element.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BreadcrumbEllipsis.vue:10

packages/ui/src/components/breadcrumb/BreadcrumbEllipsis.vue

iconSize
IconSize | undefined
"md"
The size of the default ellipsis icon, using the project IconSize presets.
Details

Declared type

IconSize | undefined

Literal values

  • "2xl"
  • "lg"
  • "md"
  • "sm"
  • "xl"
  • "xs"

Referenced types

IconSize
Type definition — IconSize
export type IconSize = NonNullable<VariantProps<typeof iconSizeVariants>['size']>

Default value details

Resolved value
"md"

Source

BreadcrumbEllipsis.vue:11

packages/ui/src/components/breadcrumb/BreadcrumbEllipsis.vue

BreadcrumbEllipsis — Slots
NameSignature or typeDescription
#default
{}
Replaces the default MoreHorizontal icon; custom content should provide an appropriate accessible name.
Details

Declared type

{}

Source

BreadcrumbEllipsis.vue

packages/ui/src/components/breadcrumb/BreadcrumbEllipsis.vue

BreadcrumbItem

BreadcrumbItem — Props
NameTypeDefaultDescription
class
string | undefined
undefined
CSS classes added to the <li> element for one breadcrumb item.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BreadcrumbItem.vue:7

packages/ui/src/components/breadcrumb/BreadcrumbItem.vue

BreadcrumbItem — Slots
NameSignature or typeDescription
#default
{}
One breadcrumb item, usually a link or the current page.
Details

Declared type

{}

Source

BreadcrumbItem.vue

packages/ui/src/components/breadcrumb/BreadcrumbItem.vue

BreadcrumbList

BreadcrumbList — Props
NameTypeDefaultDescription
class
string | undefined
undefined
CSS classes added to the ordered list <ol>.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BreadcrumbList.vue:9

packages/ui/src/components/breadcrumb/BreadcrumbList.vue

variant
"default" | "folder" | undefined
"default"
default uses the regular list style; folder renders links as folder-tab labels.
Details

Declared type

"default" | "folder" | undefined

Literal values

  • "default"
  • "folder"

Default value details

Resolved value
"default"

Source

BreadcrumbList.vue:11

packages/ui/src/components/breadcrumb/BreadcrumbList.vue

BreadcrumbList — Slots
NameSignature or typeDescription
#default
{}
Breadcrumb items and separators; children should use list-item components valid inside an ordered list.
Details

Declared type

{}

Source

BreadcrumbList.vue

packages/ui/src/components/breadcrumb/BreadcrumbList.vue

BreadcrumbPage

BreadcrumbPage — Props
NameTypeDefaultDescription
class
string | undefined
undefined
CSS classes added to the current-page <span>.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BreadcrumbPage.vue:7

packages/ui/src/components/breadcrumb/BreadcrumbPage.vue

BreadcrumbPage — Slots
NameSignature or typeDescription
#default
{}
The current page label. The component marks it with aria-current="page" and does not render it as a link.
Details

Declared type

{}

Source

BreadcrumbPage.vue

packages/ui/src/components/breadcrumb/BreadcrumbPage.vue

BreadcrumbSeparator

BreadcrumbSeparator — Props
NameTypeDefaultDescription
class
string | undefined
undefined
CSS classes added to the separator list item.
Details

Declared type

string | undefined

Default value details

Resolved value
undefined

Source

BreadcrumbSeparator.vue:7

packages/ui/src/components/breadcrumb/BreadcrumbSeparator.vue

BreadcrumbSeparator — Slots
NameSignature or typeDescription
#default
{}
Custom separator content; a forward slash / is shown when omitted. The separator is hidden from the accessibility tree.
Details

Declared type

{}

Source

BreadcrumbSeparator.vue

packages/ui/src/components/breadcrumb/BreadcrumbSeparator.vue

Accessibility ​

  • Keyboard operation: Link items support Tab key navigation and Enter key activation
  • ARIA attributes: Automatically adds aria-label="Breadcrumb" to the navigation container and aria-current="page" to identify the current page
  • Semantic structure: Wrapped in a <nav> element with an <ol> list structure conforming to the WAI-ARIA breadcrumb specification

Brute force builds.