-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
349 additions
and
131 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
import * as React from "react" | ||
import { Slot } from "@radix-ui/react-slot" | ||
import { cva, type VariantProps } from "class-variance-authority" | ||
|
||
import { cn } from "@/lib/utils" | ||
|
||
const buttonVariants = cva( | ||
"inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none ring-offset-background", | ||
{ | ||
variants: { | ||
variant: { | ||
default: "bg-primary text-primary-foreground hover:bg-primary/90", | ||
destructive: | ||
"bg-destructive text-destructive-foreground hover:bg-destructive/90", | ||
outline: | ||
"border border-input hover:bg-accent hover:text-accent-foreground", | ||
secondary: | ||
"bg-secondary text-secondary-foreground hover:bg-secondary/80", | ||
ghost: "hover:bg-accent hover:text-accent-foreground", | ||
link: "underline-offset-4 hover:underline text-primary", | ||
}, | ||
size: { | ||
default: "h-10 py-2 px-4", | ||
sm: "h-9 px-3 rounded-md", | ||
lg: "h-11 px-8 rounded-md", | ||
icon: "h-10 w-10", | ||
}, | ||
}, | ||
defaultVariants: { | ||
variant: "default", | ||
size: "default", | ||
}, | ||
} | ||
) | ||
|
||
export interface ButtonProps | ||
extends React.ButtonHTMLAttributes<HTMLButtonElement>, | ||
VariantProps<typeof buttonVariants> { | ||
asChild?: boolean | ||
} | ||
|
||
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>( | ||
({ className, variant, size, asChild = false, ...props }, ref) => { | ||
const Comp = asChild ? Slot : "button" | ||
return ( | ||
<Comp | ||
className={cn(buttonVariants({ variant, size, className }))} | ||
ref={ref} | ||
{...props} | ||
/> | ||
) | ||
} | ||
) | ||
Button.displayName = "Button" | ||
|
||
export { Button, buttonVariants } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import { LucideProps, Moon, SunMedium, type LucideIcon } from "lucide-react" | ||
|
||
export type Icon = LucideIcon | ||
|
||
export const Icons = { | ||
sun: SunMedium, | ||
moon: Moon, | ||
twitter: (props: LucideProps) => ( | ||
<svg | ||
{...props} | ||
height="23" | ||
viewBox="0 0 1200 1227" | ||
width="23" | ||
xmlns="http://www.w3.org/2000/svg" | ||
> | ||
<path d="M714.163 519.284L1160.89 0H1055.03L667.137 450.887L357.328 0H0L468.492 681.821L0 1226.37H105.866L515.491 750.218L842.672 1226.37H1200L714.137 519.284H714.163ZM569.165 687.828L521.697 619.934L144.011 79.6944H306.615L611.412 515.685L658.88 583.579L1055.08 1150.3H892.476L569.165 687.854V687.828Z" /> | ||
</svg> | ||
), | ||
logo: (props: LucideProps) => ( | ||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" {...props}> | ||
<path | ||
fill="currentColor" | ||
d="M11.572 0c-.176 0-.31.001-.358.007a19.76 19.76 0 0 1-.364.033C7.443.346 4.25 2.185 2.228 5.012a11.875 11.875 0 0 0-2.119 5.243c-.096.659-.108.854-.108 1.747s.012 1.089.108 1.748c.652 4.506 3.86 8.292 8.209 9.695.779.25 1.6.422 2.534.525.363.04 1.935.04 2.299 0 1.611-.178 2.977-.577 4.323-1.264.207-.106.247-.134.219-.158-.02-.013-.9-1.193-1.955-2.62l-1.919-2.592-2.404-3.558a338.739 338.739 0 0 0-2.422-3.556c-.009-.002-.018 1.579-.023 3.51-.007 3.38-.01 3.515-.052 3.595a.426.426 0 0 1-.206.214c-.075.037-.14.044-.495.044H7.81l-.108-.068a.438.438 0 0 1-.157-.171l-.05-.106.006-4.703.007-4.705.072-.092a.645.645 0 0 1 .174-.143c.096-.047.134-.051.54-.051.478 0 .558.018.682.154.035.038 1.337 1.999 2.895 4.361a10760.433 10760.433 0 0 0 4.735 7.17l1.9 2.879.096-.063a12.317 12.317 0 0 0 2.466-2.163 11.944 11.944 0 0 0 2.824-6.134c.096-.66.108-.854.108-1.748 0-.893-.012-1.088-.108-1.747-.652-4.506-3.859-8.292-8.208-9.695a12.597 12.597 0 0 0-2.499-.523A33.119 33.119 0 0 0 11.573 0zm4.069 7.217c.347 0 .408.005.486.047a.473.473 0 0 1 .237.277c.018.06.023 1.365.018 4.304l-.006 4.218-.744-1.14-.746-1.14v-3.066c0-1.982.01-3.097.023-3.15a.478.478 0 0 1 .233-.296c.096-.05.13-.054.5-.054z" | ||
/> | ||
</svg> | ||
), | ||
gitHub: (props: LucideProps) => ( | ||
<svg viewBox="0 0 438.549 438.549" {...props}> | ||
<path | ||
fill="currentColor" | ||
d="M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z" | ||
></path> | ||
</svg> | ||
), | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,52 +1,54 @@ | ||
import "@/styles/globals.css" | ||
import { Metadata } from "next" | ||
|
||
import { Announcement } from "@/components/announcement" | ||
import { | ||
PageActions, | ||
PageHeader, | ||
PageHeaderDescription, | ||
PageHeaderHeading, | ||
} from "@/components/page-header" | ||
import { Button } from "@/registry/new-york/ui/button" | ||
import { siteConfig } from "@/config/site" | ||
import { fontSans } from "@/lib/fonts" | ||
import { cn } from "@/lib/utils" | ||
import { SiteHeader } from "@/components/site-header" | ||
import { TailwindIndicator } from "@/components/tailwind-indicator" | ||
import { ThemeProvider } from "@/components/theme-provider" | ||
|
||
export const metadata: Metadata = { | ||
title: "Building Blocks.", | ||
description: | ||
"Beautifully designed. Copy and paste into your apps. Open Source.", | ||
title: { | ||
default: siteConfig.name, | ||
template: `%s - ${siteConfig.name}`, | ||
}, | ||
description: siteConfig.description, | ||
themeColor: [ | ||
{ media: "(prefers-color-scheme: light)", color: "white" }, | ||
{ media: "(prefers-color-scheme: dark)", color: "black" }, | ||
], | ||
icons: { | ||
icon: "/favicon.ico", | ||
shortcut: "/favicon-16x16.png", | ||
apple: "/apple-touch-icon.png", | ||
}, | ||
} | ||
|
||
export default function BlocksLayout({ | ||
children, | ||
}: { | ||
interface RootLayoutProps { | ||
children: React.ReactNode | ||
}) { | ||
} | ||
|
||
export default function RootLayout({ children }: RootLayoutProps) { | ||
return ( | ||
<div className="container relative"> | ||
<PageHeader className="max-w-3xl"> | ||
<Announcement /> | ||
<PageHeaderHeading className="text-balance"> | ||
Building Blocks for the Web | ||
</PageHeaderHeading> | ||
<PageHeaderDescription> | ||
Beautifully designed. Copy and paste into your apps. Open Source. | ||
</PageHeaderDescription> | ||
<PageActions> | ||
<Button asChild> | ||
<a href="#blocks">Browse</a> | ||
</Button> | ||
<Button asChild variant="outline"> | ||
<a | ||
href="https://github.com/shadcn-ui/ui/discussions/new?category=blocks-request" | ||
target="_blank" | ||
> | ||
Request a block | ||
</a> | ||
</Button> | ||
</PageActions> | ||
</PageHeader> | ||
<section id="blocks" className="grid scroll-mt-24 gap-24 lg:gap-48"> | ||
{children} | ||
</section> | ||
</div> | ||
<> | ||
<html lang="en" suppressHydrationWarning> | ||
<head /> | ||
<body | ||
className={cn( | ||
"min-h-screen bg-background font-sans antialiased", | ||
fontSans.variable | ||
)} | ||
> | ||
<ThemeProvider attribute="class" defaultTheme="system" enableSystem> | ||
<div className="relative flex min-h-screen flex-col"> | ||
<SiteHeader /> | ||
<div className="flex-1">{children}</div> | ||
</div> | ||
<TailwindIndicator /> | ||
</ThemeProvider> | ||
</body> | ||
</html> | ||
</> | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import * as React from "react" | ||
import Link from "next/link" | ||
|
||
import { NavItem } from "@/types/nav" | ||
import { siteConfig } from "@/config/site" | ||
import { cn } from "@/lib/utils" | ||
import { Icons } from "@/components/icons" | ||
|
||
interface MainNavProps { | ||
items?: NavItem[] | ||
} | ||
|
||
export function MainNav({ items }: MainNavProps) { | ||
return ( | ||
<div className="flex gap-6 md:gap-10"> | ||
<Link href="/" className="flex items-center space-x-2"> | ||
<Icons.logo className="h-6 w-6" /> | ||
<span className="inline-block font-bold">{siteConfig.name}</span> | ||
</Link> | ||
{items?.length ? ( | ||
<nav className="flex gap-6"> | ||
{items?.map( | ||
(item, index) => | ||
item.href && ( | ||
<Link | ||
key={index} | ||
href={item.href} | ||
className={cn( | ||
"flex items-center text-sm font-medium text-muted-foreground", | ||
item.disabled && "cursor-not-allowed opacity-80" | ||
)} | ||
> | ||
{item.title} | ||
</Link> | ||
) | ||
)} | ||
</nav> | ||
) : null} | ||
</div> | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,86 +1,39 @@ | ||
import { siteConfig } from "@/config/site" | ||
import { getAllBlockIds, getBlock } from "@/lib/blocks" | ||
import { absoluteUrl } from "@/lib/utils" | ||
import { Style, styles } from "@/registry/styles" | ||
|
||
import "@/styles/mdx.css" | ||
import { Metadata } from "next" | ||
import { notFound } from "next/navigation" | ||
|
||
export async function generateMetadata({ | ||
params, | ||
}: { | ||
params: { | ||
style: Style["name"] | ||
name: string | ||
} | ||
}): Promise<Metadata> { | ||
const { name, style } = params | ||
const block = await getBlock(name, style) | ||
|
||
if (!block) { | ||
return {} | ||
} | ||
|
||
return { | ||
title: block.name, | ||
description: block.description, | ||
openGraph: { | ||
title: block.name, | ||
description: block.description, | ||
type: "article", | ||
url: absoluteUrl(`/blocks/${block.name}`), | ||
images: [ | ||
{ | ||
url: siteConfig.ogImage, | ||
width: 1200, | ||
height: 630, | ||
alt: siteConfig.name, | ||
}, | ||
], | ||
}, | ||
twitter: { | ||
card: "summary_large_image", | ||
title: block.name, | ||
description: block.description, | ||
images: [siteConfig.ogImage], | ||
creator: "@shadcn", | ||
}, | ||
} | ||
} | ||
import Link from "next/link" | ||
|
||
export async function generateStaticParams() { | ||
const blockIds = await getAllBlockIds() | ||
return styles | ||
.map((style) => | ||
blockIds.map((name) => ({ | ||
style: style.name, | ||
name, | ||
})) | ||
) | ||
.flat() | ||
} | ||
|
||
export default async function BlockPage({ | ||
params, | ||
}: { | ||
params: { | ||
style: Style["name"] | ||
name: string | ||
} | ||
}) { | ||
const { name, style } = params | ||
const block = await getBlock(name, style) | ||
|
||
if (!block) { | ||
return notFound() | ||
} | ||
|
||
const Component = block.component | ||
import { siteConfig } from "@/config/site" | ||
import { buttonVariants } from "@/components/ui/button" | ||
|
||
export default function IndexPage() { | ||
return ( | ||
<div className={block.container?.className || ""}> | ||
<Component /> | ||
</div> | ||
<section className="container grid items-center gap-6 pb-8 pt-6 md:py-10"> | ||
<div className="flex max-w-[980px] flex-col items-start gap-2"> | ||
<h1 className="text-3xl font-extrabold leading-tight tracking-tighter md:text-4xl"> | ||
Beautifully designed components <br className="hidden sm:inline" /> | ||
built with Radix UI and Tailwind CSS. | ||
</h1> | ||
<p className="max-w-[700px] text-lg text-muted-foreground"> | ||
Accessible and customizable components that you can copy and paste | ||
into your apps. Free. Open Source. And Next.js 13 Ready. | ||
</p> | ||
</div> | ||
<div className="flex gap-4"> | ||
<Link | ||
href={siteConfig.links.docs} | ||
target="_blank" | ||
rel="noreferrer" | ||
className={buttonVariants()} | ||
> | ||
Documentation | ||
</Link> | ||
<Link | ||
target="_blank" | ||
rel="noreferrer" | ||
href={siteConfig.links.github} | ||
className={buttonVariants({ variant: "outline" })} | ||
> | ||
GitHub | ||
</Link> | ||
</div> | ||
</section> | ||
) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,4 @@ | ||
{ | ||
"eslint.workingDirectories": [ | ||
{ "pattern": "apps/*/" }, | ||
{ "pattern": "packages/*/" } | ||
], | ||
"tailwindCSS.experimental.classRegex": [ | ||
["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], | ||
["cn\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"] | ||
] | ||
"typescript.tsdk": "../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib", | ||
"typescript.enablePromptUseWorkspaceTsdk": true | ||
} |
Oops, something went wrong.