mirror of
https://github.com/hanzoai/shadcn.git
synced 2026-10-30 18:22:59 +00:00
275 lines
7.9 KiB
TypeScript
275 lines
7.9 KiB
TypeScript
import * as React from "react"
|
|
import Image from "next/image"
|
|
import Link from "next/link"
|
|
import { CodeBlock, Pre } from "@hanzo/docs-ui/components/codeblock"
|
|
import defaultComponents from "@hanzo/docs-ui/mdx"
|
|
import type { MDXComponents } from "mdx/types"
|
|
|
|
import { cn } from "@/lib/utils"
|
|
import { Callout } from "@/components/callout"
|
|
import { CodeBlockWrapper } from "@/components/code-block-wrapper"
|
|
import { CodeTabs } from "@/components/code-tabs"
|
|
import { ComponentExample } from "@/components/component-example"
|
|
import { ComponentGrid } from "@/components/component-grid"
|
|
import { ComponentPreview } from "@/components/component-preview"
|
|
import { ComponentSource } from "@/components/component-source"
|
|
import { CopyButton, CopyNpmCommandButton } from "@/components/copy-button"
|
|
import { FrameworkDocs } from "@/components/framework-docs"
|
|
import { StyleWrapper } from "@/components/style-wrapper"
|
|
import {
|
|
Accordion,
|
|
AccordionContent,
|
|
AccordionItem,
|
|
AccordionTrigger,
|
|
} from "@/registry/default/ui/accordion"
|
|
import {
|
|
Alert,
|
|
AlertDescription,
|
|
AlertTitle,
|
|
} from "@/registry/default/ui/alert"
|
|
import { AspectRatio } from "@/registry/default/ui/aspect-ratio"
|
|
import { Kbd } from "@/registry/default/ui/kbd"
|
|
import {
|
|
Tabs,
|
|
TabsContent,
|
|
TabsList,
|
|
TabsTrigger,
|
|
} from "@/registry/default/ui/tabs"
|
|
|
|
export const mdxComponents: MDXComponents = {
|
|
...defaultComponents,
|
|
Accordion,
|
|
AccordionContent,
|
|
AccordionItem,
|
|
AccordionTrigger,
|
|
Alert,
|
|
AlertTitle,
|
|
AlertDescription,
|
|
CodeTabs,
|
|
Kbd,
|
|
h1: ({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => (
|
|
<h1
|
|
className={cn(
|
|
"font-heading mt-2 scroll-m-20 text-4xl font-bold",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
h2: ({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => (
|
|
<h2
|
|
className={cn(
|
|
"font-heading mt-12 scroll-m-20 border-b pb-2 text-2xl font-semibold tracking-tight first:mt-0",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
h3: ({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => (
|
|
<h3
|
|
className={cn(
|
|
"font-heading mt-8 scroll-m-20 text-xl font-semibold tracking-tight",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
h4: ({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => (
|
|
<h4
|
|
className={cn(
|
|
"font-heading mt-8 scroll-m-20 text-lg font-semibold tracking-tight",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
h5: ({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => (
|
|
<h5
|
|
className={cn(
|
|
"mt-8 scroll-m-20 text-lg font-semibold tracking-tight",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
h6: ({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) => (
|
|
<h6
|
|
className={cn(
|
|
"mt-8 scroll-m-20 text-base font-semibold tracking-tight",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
a: ({ className, ...props }: React.HTMLAttributes<HTMLAnchorElement>) => (
|
|
<a
|
|
className={cn("font-medium underline underline-offset-4", className)}
|
|
{...props}
|
|
/>
|
|
),
|
|
p: ({ className, ...props }: React.HTMLAttributes<HTMLParagraphElement>) => (
|
|
<p
|
|
className={cn("leading-7 [&:not(:first-child)]:mt-6", className)}
|
|
{...props}
|
|
/>
|
|
),
|
|
ul: ({ className, ...props }: React.HTMLAttributes<HTMLUListElement>) => (
|
|
<ul className={cn("my-6 ml-6 list-disc", className)} {...props} />
|
|
),
|
|
ol: ({ className, ...props }: React.HTMLAttributes<HTMLOListElement>) => (
|
|
<ol className={cn("my-6 ml-6 list-decimal", className)} {...props} />
|
|
),
|
|
li: ({ className, ...props }: React.HTMLAttributes<HTMLElement>) => (
|
|
<li className={cn("mt-2", className)} {...props} />
|
|
),
|
|
blockquote: ({ className, ...props }: React.HTMLAttributes<HTMLElement>) => (
|
|
<blockquote
|
|
className={cn("mt-6 border-l-2 pl-6 italic", className)}
|
|
{...props}
|
|
/>
|
|
),
|
|
img: ({
|
|
className,
|
|
alt,
|
|
...props
|
|
}: React.ImgHTMLAttributes<HTMLImageElement>) => (
|
|
<img
|
|
className={cn("rounded-md", className)}
|
|
alt={alt}
|
|
loading="lazy"
|
|
{...props}
|
|
/>
|
|
),
|
|
hr: ({ ...props }: React.HTMLAttributes<HTMLHRElement>) => (
|
|
<hr className="my-4 md:my-8" {...props} />
|
|
),
|
|
table: ({ className, ...props }: React.HTMLAttributes<HTMLTableElement>) => (
|
|
<div className="my-6 w-full overflow-y-auto">
|
|
<table className={cn("w-full", className)} {...props} />
|
|
</div>
|
|
),
|
|
tr: ({ className, ...props }: React.HTMLAttributes<HTMLTableRowElement>) => (
|
|
<tr
|
|
className={cn("m-0 border-t p-0 even:bg-muted", className)}
|
|
{...props}
|
|
/>
|
|
),
|
|
th: ({ className, ...props }: React.HTMLAttributes<HTMLTableCellElement>) => (
|
|
<th
|
|
className={cn(
|
|
"border px-4 py-2 text-left font-bold [&[align=center]]:text-center [&[align=right]]:text-right",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
td: ({ className, ...props }: React.HTMLAttributes<HTMLTableCellElement>) => (
|
|
<td
|
|
className={cn(
|
|
"border px-4 py-2 text-left [&[align=center]]:text-center [&[align=right]]:text-right",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
pre: (props: React.ComponentPropsWithoutRef<"pre">) => (
|
|
<CodeBlock {...props}>
|
|
<Pre>{props.children}</Pre>
|
|
</CodeBlock>
|
|
),
|
|
code: ({ className, ...props }: React.HTMLAttributes<HTMLElement>) => (
|
|
<code
|
|
className={cn(
|
|
"relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
Image,
|
|
Callout,
|
|
ComponentGrid,
|
|
ComponentPreview,
|
|
ComponentExample,
|
|
ComponentSource,
|
|
AspectRatio,
|
|
CodeBlockWrapper: ({ ...props }) => (
|
|
<CodeBlockWrapper className="rounded-md border" {...props} />
|
|
),
|
|
Step: ({ className, ...props }: React.ComponentProps<"h3">) => (
|
|
<h3
|
|
className={cn(
|
|
"font-heading mt-8 scroll-m-20 text-xl font-semibold tracking-tight",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
Steps: ({ ...props }) => (
|
|
<div
|
|
className="[&>h3]:step steps mb-12 ml-4 border-l pl-8 [counter-reset:step]"
|
|
{...props}
|
|
/>
|
|
),
|
|
Tabs: ({ className, ...props }: React.ComponentProps<typeof Tabs>) => (
|
|
<Tabs className={cn("relative mt-6 w-full", className)} {...props} />
|
|
),
|
|
TabsList: ({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof TabsList>) => (
|
|
<TabsList
|
|
className={cn(
|
|
"h-10 w-full justify-start rounded-none border-b bg-transparent p-0",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
TabsTrigger: ({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof TabsTrigger>) => (
|
|
<TabsTrigger
|
|
className={cn(
|
|
"relative rounded-none border-b-2 border-b-transparent bg-transparent px-4 pb-3 pt-2 font-semibold text-muted-foreground shadow-none transition-colors data-[state=active]:border-b-primary data-[state=active]:text-foreground data-[state=active]:shadow-none",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
TabsContent: ({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof TabsContent>) => (
|
|
<TabsContent
|
|
className={cn(
|
|
"relative mt-2 [&_h3.font-heading]:text-base [&_h3.font-heading]:font-semibold",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
FrameworkDocs: ({
|
|
className,
|
|
...props
|
|
}: React.ComponentProps<typeof FrameworkDocs>) => (
|
|
<FrameworkDocs className={cn(className)} {...props} />
|
|
),
|
|
Link: ({ className, ...props }: React.ComponentProps<typeof Link>) => (
|
|
<Link
|
|
className={cn("font-medium underline underline-offset-4", className)}
|
|
{...props}
|
|
/>
|
|
),
|
|
LinkedCard: ({ className, ...props }: React.ComponentProps<typeof Link>) => (
|
|
<Link
|
|
className={cn(
|
|
"flex w-full flex-col items-center rounded-xl border bg-card p-6 text-card-foreground shadow transition-colors hover:bg-muted/50 sm:p-10",
|
|
className
|
|
)}
|
|
{...props}
|
|
/>
|
|
),
|
|
}
|