-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
0 parents
commit ef22a24
Showing
34 changed files
with
5,769 additions
and
0 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,10 @@ | ||
# editorconfig.org | ||
root = true | ||
|
||
[*] | ||
charset = utf-8 | ||
end_of_line = lf | ||
indent_size = 2 | ||
indent_style = space | ||
insert_final_newline = true | ||
trim_trailing_whitespace = true |
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,5 @@ | ||
dist/* | ||
.cache | ||
public | ||
node_modules | ||
*.esm.js |
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,30 @@ | ||
{ | ||
"$schema": "https://json.schemastore.org/eslintrc", | ||
"root": true, | ||
"extends": [ | ||
"next/core-web-vitals", | ||
"prettier", | ||
"plugin:tailwindcss/recommended" | ||
], | ||
"plugins": ["tailwindcss"], | ||
"rules": { | ||
"@next/next/no-html-link-for-pages": "off", | ||
"react/jsx-key": "off", | ||
"tailwindcss/no-custom-classname": "off" | ||
}, | ||
"settings": { | ||
"tailwindcss": { | ||
"callees": ["cn"], | ||
"config": "tailwind.config.js" | ||
}, | ||
"next": { | ||
"rootDir": ["./"] | ||
} | ||
}, | ||
"overrides": [ | ||
{ | ||
"files": ["*.ts", "*.tsx"], | ||
"parser": "@typescript-eslint/parser" | ||
} | ||
] | ||
} |
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,36 @@ | ||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. | ||
|
||
# dependencies | ||
node_modules | ||
.pnp | ||
.pnp.js | ||
|
||
# testing | ||
coverage | ||
|
||
# next.js | ||
.next/ | ||
out/ | ||
build | ||
|
||
# misc | ||
.DS_Store | ||
*.pem | ||
|
||
# debug | ||
npm-debug.log* | ||
yarn-debug.log* | ||
yarn-error.log* | ||
.pnpm-debug.log* | ||
|
||
# local env files | ||
.env.local | ||
.env.development.local | ||
.env.test.local | ||
.env.production.local | ||
|
||
# turbo | ||
.turbo | ||
|
||
.contentlayer | ||
.env |
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,12 @@ | ||
cache | ||
.cache | ||
package.json | ||
package-lock.json | ||
public | ||
CHANGELOG.md | ||
.yarn | ||
dist | ||
node_modules | ||
.next | ||
build | ||
.contentlayer |
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,4 @@ | ||
{ | ||
"typescript.tsdk": "../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript/lib", | ||
"typescript.enablePromptUseWorkspaceTsdk": true | ||
} |
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,22 @@ | ||
# next-template | ||
|
||
A Next.js 13 template for building apps with Radix UI and Tailwind CSS. | ||
|
||
## Usage | ||
|
||
```bash | ||
npx create-next-app -e https://github.com/shadcn/next-template | ||
``` | ||
|
||
## Features | ||
|
||
- Next.js 13 App Directory | ||
- Radix UI Primitives | ||
- Tailwind CSS | ||
- Icons from [Lucide](https://lucide.dev) | ||
- Dark mode with `next-themes` | ||
- Tailwind CSS class sorting, merging and linting. | ||
|
||
## License | ||
|
||
Licensed under the [MIT license](https://github.com/shadcn/ui/blob/main/LICENSE.md). |
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,54 @@ | ||
import "@/styles/globals.css" | ||
import { Metadata } from "next" | ||
|
||
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: { | ||
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", | ||
}, | ||
} | ||
|
||
interface RootLayoutProps { | ||
children: React.ReactNode | ||
} | ||
|
||
export default function RootLayout({ children }: RootLayoutProps) { | ||
return ( | ||
<> | ||
<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,39 @@ | ||
import Link from "next/link" | ||
|
||
import { siteConfig } from "@/config/site" | ||
import { buttonVariants } from "@/components/ui/button" | ||
|
||
export default function IndexPage() { | ||
return ( | ||
<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 |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import { | ||
LucideProps, | ||
Moon, | ||
SunMedium, | ||
Twitter, | ||
type Icon as LucideIcon, | ||
} from "lucide-react" | ||
|
||
export type Icon = LucideIcon | ||
|
||
export const Icons = { | ||
sun: SunMedium, | ||
moon: Moon, | ||
twitter: Twitter, | ||
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 |
---|---|---|
@@ -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 |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import Link from "next/link" | ||
|
||
import { siteConfig } from "@/config/site" | ||
import { buttonVariants } from "@/components/ui/button" | ||
import { Icons } from "@/components/icons" | ||
import { MainNav } from "@/components/main-nav" | ||
import { ThemeToggle } from "@/components/theme-toggle" | ||
|
||
export function SiteHeader() { | ||
return ( | ||
<header className="sticky top-0 z-40 w-full border-b bg-background"> | ||
<div className="container flex h-16 items-center space-x-4 sm:justify-between sm:space-x-0"> | ||
<MainNav items={siteConfig.mainNav} /> | ||
<div className="flex flex-1 items-center justify-end space-x-4"> | ||
<nav className="flex items-center space-x-1"> | ||
<Link | ||
href={siteConfig.links.github} | ||
target="_blank" | ||
rel="noreferrer" | ||
> | ||
<div | ||
className={buttonVariants({ | ||
size: "sm", | ||
variant: "ghost", | ||
})} | ||
> | ||
<Icons.gitHub className="h-5 w-5" /> | ||
<span className="sr-only">GitHub</span> | ||
</div> | ||
</Link> | ||
<Link | ||
href={siteConfig.links.twitter} | ||
target="_blank" | ||
rel="noreferrer" | ||
> | ||
<div | ||
className={buttonVariants({ | ||
size: "sm", | ||
variant: "ghost", | ||
})} | ||
> | ||
<Icons.twitter className="h-5 w-5 fill-current" /> | ||
<span className="sr-only">Twitter</span> | ||
</div> | ||
</Link> | ||
<ThemeToggle /> | ||
</nav> | ||
</div> | ||
</div> | ||
</header> | ||
) | ||
} |
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,14 @@ | ||
export function TailwindIndicator() { | ||
if (process.env.NODE_ENV === "production") return null | ||
|
||
return ( | ||
<div className="fixed bottom-1 left-1 z-50 flex h-6 w-6 items-center justify-center rounded-full bg-gray-800 p-3 font-mono text-xs text-white"> | ||
<div className="block sm:hidden">xs</div> | ||
<div className="hidden sm:block md:hidden">sm</div> | ||
<div className="hidden md:block lg:hidden">md</div> | ||
<div className="hidden lg:block xl:hidden">lg</div> | ||
<div className="hidden xl:block 2xl:hidden">xl</div> | ||
<div className="hidden 2xl:block">2xl</div> | ||
</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 |
---|---|---|
@@ -0,0 +1,9 @@ | ||
"use client" | ||
|
||
import * as React from "react" | ||
import { ThemeProvider as NextThemesProvider } from "next-themes" | ||
import { ThemeProviderProps } from "next-themes/dist/types" | ||
|
||
export function ThemeProvider({ children, ...props }: ThemeProviderProps) { | ||
return <NextThemesProvider {...props}>{children}</NextThemesProvider> | ||
} |
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,23 @@ | ||
"use client" | ||
|
||
import * as React from "react" | ||
import { useTheme } from "next-themes" | ||
|
||
import { Button } from "@/components/ui/button" | ||
import { Icons } from "@/components/icons" | ||
|
||
export function ThemeToggle() { | ||
const { setTheme, theme } = useTheme() | ||
|
||
return ( | ||
<Button | ||
variant="ghost" | ||
size="sm" | ||
onClick={() => setTheme(theme === "light" ? "dark" : "light")} | ||
> | ||
<Icons.sun className="rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" /> | ||
<Icons.moon className="absolute rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" /> | ||
<span className="sr-only">Toggle theme</span> | ||
</Button> | ||
) | ||
} |
Oops, something went wrong.