{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "breadcrumb", "type": "registry:component", "files": [ { "path": "breadcrumb/breadcrumb.tsx", "type": "registry:component", "content": "'use client'\nimport { cn, getLinkComponent, useSignals } from '@cascivo/core'\nimport { builtin, t } from '@cascivo/i18n'\nimport styles from './breadcrumb.module.css'\n\nexport interface BreadcrumbItem {\n /**\n * Stable React key. Provide when `label`/`href` may repeat.\n *\n * A real breadcrumb repeats hrefs — \"Overview\" and \"Projects\" both pointing at `/` is the\n * normal shape of a console trail — and without an `id` the crumbs key on their index, so\n * reordering or truncating the trail re-keys every row after the change.\n * `SideNavItem`, `ShellHeaderNavLink`, `ShellHeaderNavMenuItem`, `HeaderLink`,\n * `CommandItem` and `SwitcherLink` all carry this field; `BreadcrumbItem` was missed by\n * both earlier sweeps (2026-08-14 report §9).\n */\n id?: string\n label: string\n href?: string\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[]\n maxVisible?: number\n className?: string\n /**\n * Accessible label for the component.\n *\n * @defaultValue `Breadcrumb`\n * @see the component manifest\n */\n ariaLabel?: string\n}\n\nexport function Breadcrumb({ items, maxVisible, className, ariaLabel }: BreadcrumbProps) {\n useSignals()\n const LinkComponent = getLinkComponent()\n const resolvedAriaLabel = ariaLabel ?? t(builtin.breadcrumb.nav)\n let visible = items\n const first = items[0]\n if (first !== undefined && maxVisible !== undefined && items.length > maxVisible) {\n visible = [first, { label: '…' }, ...items.slice(items.length - (maxVisible - 2))]\n }\n\n return (\n \n )\n}\n" }, { "path": "breadcrumb/index.ts", "type": "registry:component", "content": "// Generated by scripts/registry/barrels.ts — run `pnpm regen`. Do not edit.\nexport * from './breadcrumb'\n" }, { "path": "breadcrumb/breadcrumb.module.css", "type": "registry:component", "content": "@layer cascivo.component {\n .breadcrumb {\n font-family: var(--cascivo-font-sans);\n font-size: var(--cascivo-text-sm);\n line-height: var(--cascivo-leading-normal);\n\n & ol {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--cascivo-space-2);\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n & li {\n display: inline-flex;\n align-items: center;\n gap: var(--cascivo-space-2);\n color: var(--cascivo-color-text-muted);\n }\n\n /* Separator — alt text '' keeps it out of the accessibility tree */\n & li + li::before {\n content: '/' / '';\n color: var(--cascivo-color-text-subtle);\n }\n\n & a {\n color: var(--cascivo-color-text-muted);\n text-decoration: none;\n border-radius: var(--cascivo-radius-item);\n transition: color var(--cascivo-duration-150) var(--cascivo-ease-out);\n\n &:hover {\n color: var(--cascivo-color-text);\n text-decoration: underline;\n }\n\n &:focus-visible {\n outline: none;\n box-shadow: var(--cascivo-focus-ring);\n }\n }\n\n & [aria-current='page'] {\n color: var(--cascivo-color-text);\n font-weight: var(--cascivo-font-medium);\n }\n }\n}\n" } ], "description": "Shows the current page location within a navigation hierarchy", "dependencies": ["@cascivo/core", "@cascivo/i18n"], "categories": ["navigation"], "meta": { "cascivo": { "type": "component", "version": "0.17.1" } } }