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 Icon
ruixen-ui/breadcrumb-iconRemovedComponent
Breadcrumb navigation with icons for each item.
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-icon.jsonSource
1"use client";23import * as React from "react";4import { cn } from "@/lib/utils";5import { Home, type LucideIcon } from "lucide-react";67/* ═══════════════════════════════════════════════════════════8 Breadcrumb Icon — Magnetic pill-tracking breadcrumb.910 Flips the cascade metaphor on its head. Instead of dimming11 everything else when you hover, a soft pill highlight12 slides TO the item you're pointing at — the highlight13 comes to you. The hovered icon does a spring micro-bounce14 for tactile feedback without disturbing its neighbors.1516 Two fundamentally different interaction approaches:17 • breadcrumb-separator: hover affects OTHER items (cascade)18 • breadcrumb-icon: hover affects ONLY the target (pill tracks)1920 Curves:21 • Pill slide: cubic-bezier(0.33, 1.52, 0.58, 1) — spring overshoot22 • Icon pop: cubic-bezier(0.34, 1.56, 0.64, 1) — tactile bounce23 ═══════════════════════════════════════════════════════════ */2425export interface BreadcrumbIconItem {26 label: string;27 href?: string;28 icon?: LucideIcon;29}3031export interface BreadcrumbIconProps {32 items: BreadcrumbIconItem[];33 showHomeIcon?: boolean;34 iconOnly?: boolean;35 className?: string;36}3738export function BreadcrumbIcon({39 items,40 showHomeIcon = true,41 iconOnly = false,42 className,43}: BreadcrumbIconProps) {44 const [hoveredIndex, setHoveredIndex] = React.useState<number | null>(null);45 const [pill, setPill] = React.useState({ left: 0, width: 0 });46 const containerRef = React.useRef<HTMLOListElement>(null);47 const itemRefs = React.useRef<(HTMLElement | null)[]>([]);48 const hasPositioned = React.useRef(false);4950 const itemsWithIcons = items.map((item, index) => ({51 ...item,52 icon: item.icon || (index === 0 && showHomeIcon ? Home : undefined),53 }));5455 const handleHover = React.useCallback((index: number) => {56 setHoveredIndex(index);57 const el = itemRefs.current[index];58 const container = containerRef.current;59 if (el && container) {60 const containerRect = container.getBoundingClientRect();61 const elRect = el.getBoundingClientRect();62 setPill({63 left: elRect.left - containerRect.left,64 width: elRect.width,65 });66 }67 }, []);6869 React.useEffect(() => {70// … truncated
What it pulls in
npm packages
