Files
zeekay 26ef3426f7 fix: resolve all CI failures across app/, registry/, and tests
- Fix app/ TypeScript errors: broken imports, missing types, unused
  ts-expect-error directives, META_THEME_COLORS declaration
- Fix registry/v4 config.ts: refine -> superRefine for zod 4 compat
- Fix registry/v4 docs-integration.ts: remove non-existent properties,
  add nullish coalescing for optional type field
- Fix apps/v4 lint: remove duplicate SortingState value import
- Fix pkg/ui test assertions: update class names and component defaults
  to match post-merge component behavior
- Add tsconfig excludes for legacy orphaned files (cards, colors, v4)
- Add re-export shims for backward-compat toast/registry imports
2026-02-09 11:38:11 -08:00

87 lines
2.8 KiB
TypeScript

"use client"
import Link from "next/link"
import { usePathname } from "next/navigation"
import { SidebarNavItem } from "types/nav"
import type { DocsConfig } from "@/config/docs"
import { cn } from "@/lib/utils"
export function DocsNav({ config }: { config: DocsConfig }) {
const pathname = usePathname()
const items = config.sidebarNav
return items.length ? (
<div className="flex flex-col gap-6">
{items.map((item, index) => (
<div key={index} className="flex flex-col gap-1">
<h4 className="rounded-md px-2 py-1 text-sm font-medium">
{item.title}{" "}
{item.label && (
<span className="ml-2 rounded-md bg-[#adfa1d] px-1.5 py-0.5 text-xs font-normal leading-none text-[#000000] no-underline group-hover:no-underline">
{item.label}
</span>
)}
</h4>
{item?.items?.length && (
<DocsNavItems items={item.items} pathname={pathname} />
)}
</div>
))}
</div>
) : null
}
function DocsNavItems({
items,
pathname,
}: {
items: SidebarNavItem[]
pathname: string | null
}) {
return items?.length ? (
<div className="grid grid-flow-row auto-rows-max gap-0.5 text-sm">
{items.map((item, index) =>
item.href && !item.disabled ? (
<Link
key={index}
href={item.href}
className={cn(
"group relative flex h-8 w-full items-center rounded-lg px-2 after:absolute after:inset-x-0 after:inset-y-[-2px] after:rounded-lg hover:bg-accent hover:text-accent-foreground ",
item.disabled && "cursor-not-allowed opacity-60",
pathname === item.href
? "bg-accent font-medium text-accent-foreground"
: "font-normal text-foreground"
)}
target={item.external ? "_blank" : ""}
rel={item.external ? "noreferrer" : ""}
>
{item.title}
{item.label && (
<span className="ml-2 rounded-md bg-background border border-border px-1.5 py-0.5 text-xs leading-none text-foreground no-underline group-hover:no-underline">
{item.label}
</span>
)}
</Link>
) : (
<span
key={index}
className={cn(
"flex w-full cursor-not-allowed items-center rounded-md p-2 text-muted-foreground hover:underline",
item.disabled && "cursor-not-allowed opacity-60"
)}
>
{item.title}
{item.label && (
<span className="ml-2 rounded-md bg-muted px-1.5 py-0.5 text-xs leading-none text-muted-foreground no-underline group-hover:no-underline">
{item.label}
</span>
)}
</span>
)
)}
</div>
) : null
}