This component no longer exists. It was in ruixen-ui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-12 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
Breadcrumb Dropdown
ruixen-ui/breadcrumb-dropdownRemovedComponent
Inline-expanding collapsible breadcrumb with staggered path reveal.
Live preview
live · rendered by the registry
Rendered by ruixen-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ruixen.com/r/breadcrumb-dropdown.jsonSource
1"use client";23import * as React from "react";4import { cn } from "@/lib/utils";56/* ═══════════════════════════════════════════════════════════7 Breadcrumb Dropdown — Inline-expanding collapsible path.89 Kills the floating dropdown entirely. Instead of hovering10 a trigger to summon a disembodied menu, click the ··· and11 the hidden path segments unfold INLINE — items stagger in12 from the left, each 50ms apart, expanding the breadcrumb13 to reveal the full path. Click again to snap it closed.1415 Three distinct paradigms across the breadcrumb family:16 • separator: hover affects OTHER items (cascade)17 • icon: a HIGHLIGHT slides to target (pill)18 • dropdown: HIDDEN CONTENT unfolds in place (expand)1920 The trigger icon morphs between three dots (collapsed)21 and a dash (expanded) with a scale + rotate crossfade.2223 Curve: cubic-bezier(0.0, 0.0, 0.2, 1) — Material24 standard deceleration. No spring overshoot — the stagger25 choreography is the motion interest, not the curve.26 ═══════════════════════════════════════════════════════════ */2728interface BreadcrumbDropdownItem {29 label: string;30 href?: string;31}3233interface BreadcrumbDropdownProps {34 items: BreadcrumbDropdownItem[];35 maxVisible?: number;36 className?: string;37}3839export function BreadcrumbDropdown({40 items,41 maxVisible = 3,42 className,43}: BreadcrumbDropdownProps) {44 const [expanded, setExpanded] = React.useState(false);45 const [itemVisible, setItemVisible] = React.useState<boolean[]>([]);46 const staggerTimers = React.useRef<ReturnType<typeof setTimeout>[]>([]);4748 const shouldCollapse = items.length > maxVisible;49 const hiddenItems = shouldCollapse50 ? items.slice(1, items.length - (maxVisible - 2))51 : [];52 const visibleEnd = shouldCollapse53 ? items.slice(items.length - (maxVisible - 2))54 : items.slice(1);55 const hiddenCount = hiddenItems.length;5657 const toggle = React.useCallback(() => {58 staggerTimers.current.forEach(clearTimeout);59 staggerTimers.current = [];6061 if (!expanded) {62 setExpanded(true);63 setItemVisible(new Array(hiddenCount).fill(false));64 for (let i = 0; i < hiddenCount; i++) {65 const timer = setTimeout(() => {66// … truncated
