mirror of
https://github.com/shadcn-ui/ui.git
synced 2026-06-16 04:11:34 +00:00
* feat: init * fix * fix * fix * feat * feat * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * feat: implement icons * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * feat: update init command * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * feat: dialog * feat * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * feat: add registry:base item type * feat: rename frame to canva * fix * feat * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fi * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * feat: add all colors * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * feat: add outfit font * fix * fix * fix * fix * fix * chore: changeset * fix * fix * fix * fix * fix * fix * fix * fix
82 lines
2.3 KiB
TypeScript
82 lines
2.3 KiB
TypeScript
import Image from "next/image"
|
|
|
|
import { ComponentPreviewTabs } from "@/components/component-preview-tabs"
|
|
import { ComponentSource } from "@/components/component-source"
|
|
import { Index } from "@/registry/__index__"
|
|
import { type Style } from "@/registry/_legacy-styles"
|
|
|
|
export function ComponentPreview({
|
|
name,
|
|
styleName = "new-york-v4",
|
|
type,
|
|
className,
|
|
align = "center",
|
|
hideCode = false,
|
|
chromeLessOnMobile = false,
|
|
...props
|
|
}: React.ComponentProps<"div"> & {
|
|
name: string
|
|
styleName?: Style["name"]
|
|
align?: "center" | "start" | "end"
|
|
description?: string
|
|
hideCode?: boolean
|
|
type?: "block" | "component" | "example"
|
|
chromeLessOnMobile?: boolean
|
|
}) {
|
|
const Component = Index[styleName]?.[name]?.component
|
|
|
|
if (!Component) {
|
|
return (
|
|
<p className="text-muted-foreground mt-6 text-sm">
|
|
Component{" "}
|
|
<code className="bg-muted relative rounded px-[0.3rem] py-[0.2rem] font-mono text-sm">
|
|
{name}
|
|
</code>{" "}
|
|
not found in registry.
|
|
</p>
|
|
)
|
|
}
|
|
|
|
if (type === "block") {
|
|
return (
|
|
<div className="relative aspect-[4/2.5] w-full overflow-hidden rounded-md border md:-mx-1">
|
|
<Image
|
|
src={`/r/styles/new-york-v4/${name}-light.png`}
|
|
alt={name}
|
|
width={1440}
|
|
height={900}
|
|
className="bg-background absolute top-0 left-0 z-20 w-[970px] max-w-none sm:w-[1280px] md:hidden dark:hidden md:dark:hidden"
|
|
/>
|
|
<Image
|
|
src={`/r/styles/new-york-v4/${name}-dark.png`}
|
|
alt={name}
|
|
width={1440}
|
|
height={900}
|
|
className="bg-background absolute top-0 left-0 z-20 hidden w-[970px] max-w-none sm:w-[1280px] md:hidden dark:block md:dark:hidden"
|
|
/>
|
|
<div className="bg-background absolute inset-0 hidden w-[1600px] md:block">
|
|
<iframe src={`/view/${styleName}/${name}`} className="size-full" />
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<ComponentPreviewTabs
|
|
className={className}
|
|
align={align}
|
|
hideCode={hideCode}
|
|
component={<Component />}
|
|
source={
|
|
<ComponentSource
|
|
name={name}
|
|
collapsible={false}
|
|
styleName={styleName}
|
|
/>
|
|
}
|
|
chromeLessOnMobile={chromeLessOnMobile}
|
|
{...props}
|
|
/>
|
|
)
|
|
}
|