{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "tab-navbar", "title": "Tab Navbar", "description": "Bottom-style row of icon + label tabs with parent-controlled active state and per-item click handlers.", "files": [ { "path": "registry/components/tab-navbar/index.ts", "content": "export { TabNavbar } from \"./index.tsx\"\nexport type { TabNavbarItem, TabNavbarProps } from \"./types\"\n", "type": "registry:block" }, { "path": "registry/components/tab-navbar/index.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\n\nimport type { TabNavbarProps } from \"./types\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport function TabNavbar({\n items,\n className,\n labelClassName,\n ariaLabel = \"Primary navigation\",\n}: TabNavbarProps) {\n if (!items.length) {\n return null\n }\n\n return (\n \n {items.map((item, index) => {\n const key = item.id ?? `${item.label}-${index}`\n const isActive = Boolean(item.isActive)\n\n return (\n \n \n {item.icon}\n \n \n {item.label}\n \n \n )\n })}\n \n )\n}\n\nexport type { TabNavbarItem, TabNavbarProps } from \"./types\"\n", "type": "registry:block" }, { "path": "registry/components/tab-navbar/types.ts", "content": "import type { MouseEventHandler, ReactNode } from \"react\"\n\nexport type TabNavbarItem = {\n id?: string\n label: string\n icon: ReactNode\n /**\n * Mark the current section (parent-controlled), same idea as `NavbarLinkItem.isActive`.\n */\n isActive?: boolean\n onClick?: MouseEventHandler\n}\n\nexport type TabNavbarProps = {\n items: TabNavbarItem[]\n /**\n * Merged onto the root `