mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-06-29 23:55:02 +00:00
* feat: move new-york to lucide-react * fix: mail open * chore: update registry * chore: add test:dev * chore: add changeset * feat: build an icon registry * chore: add missing registry icons * feat: add an icons debug page * feat: add an icon migration * chore(www): migrate all radix icons to lucide * feat: update migration script * chore: update changeset * feat(shadcn): implement icons transformer * fix: missing registry icons * fix(shadcn): handling of missing icons * feat: add support for multiple libraries
68 lines
1.7 KiB
TypeScript
68 lines
1.7 KiB
TypeScript
import Link from "next/link"
|
|
import { Doc } from "contentlayer/generated"
|
|
import { ChevronLeft, ChevronRight } from "lucide-react"
|
|
import { NavItem, NavItemWithChildren } from "types/nav"
|
|
|
|
import { docsConfig } from "@/config/docs"
|
|
import { Button } from "@/registry/new-york/ui/button"
|
|
|
|
interface DocsPagerProps {
|
|
doc: Doc
|
|
}
|
|
|
|
export function DocsPager({ doc }: DocsPagerProps) {
|
|
const pager = getPagerForDoc(doc)
|
|
|
|
if (!pager) {
|
|
return null
|
|
}
|
|
|
|
return (
|
|
<div className="flex flex-row items-center justify-between">
|
|
{pager?.prev?.href && (
|
|
<Button variant="ghost" asChild>
|
|
<Link href={pager.prev.href}>
|
|
<ChevronLeft />
|
|
{pager.prev.title}
|
|
</Link>
|
|
</Button>
|
|
)}
|
|
{pager?.next?.href && (
|
|
<Button variant="ghost" className="ml-auto" asChild>
|
|
<Link href={pager.next.href}>
|
|
{pager.next.title}
|
|
<ChevronRight />
|
|
</Link>
|
|
</Button>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export function getPagerForDoc(doc: Doc) {
|
|
const nav = doc.slug.startsWith("/docs/charts")
|
|
? docsConfig.chartsNav
|
|
: docsConfig.sidebarNav
|
|
const flattenedLinks = [null, ...flatten(nav), null]
|
|
const activeIndex = flattenedLinks.findIndex(
|
|
(link) => doc.slug === link?.href
|
|
)
|
|
const prev = activeIndex !== 0 ? flattenedLinks[activeIndex - 1] : null
|
|
const next =
|
|
activeIndex !== flattenedLinks.length - 1
|
|
? flattenedLinks[activeIndex + 1]
|
|
: null
|
|
return {
|
|
prev,
|
|
next,
|
|
}
|
|
}
|
|
|
|
export function flatten(links: NavItemWithChildren[]): NavItem[] {
|
|
return links
|
|
.reduce<NavItem[]>((flat, link) => {
|
|
return flat.concat(link.items?.length ? flatten(link.items) : link)
|
|
}, [])
|
|
.filter((link) => !link?.disabled)
|
|
}
|