├── .eslintrc.json
├── .gitignore
├── .vscode
└── settings.json
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── app
├── favicon.ico
├── globals.css
├── layout.tsx
└── page.tsx
├── components.json
├── components
├── card.tsx
├── header.tsx
├── icons.tsx
├── jumbotron.tsx
├── logo.tsx
├── provider.tsx
└── ui
│ ├── avatar.tsx
│ ├── badge.tsx
│ ├── button.tsx
│ ├── card.tsx
│ ├── context-menu.tsx
│ ├── dialog.tsx
│ ├── dropdown-menu.tsx
│ ├── input.tsx
│ ├── label.tsx
│ ├── menubar.tsx
│ ├── scroll-area.tsx
│ ├── separator.tsx
│ └── tabs.tsx
├── data
└── projects.ts
├── lib
├── types.ts
└── utils.ts
├── next.config.js
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── 7-spirits.png
├── fonts
│ ├── Inter-Black.ttf
│ ├── Inter-Bold.ttf
│ ├── Inter-ExtraBold.ttf
│ ├── Inter-ExtraLight.ttf
│ ├── Inter-Light.ttf
│ ├── Inter-Medium.ttf
│ ├── Inter-Regular.ttf
│ ├── Inter-SemiBold.ttf
│ └── Inter-Thin.ttf
├── logo.svg
├── next.svg
├── sample.png
└── vercel.svg
├── tailwind.config.js
└── tsconfig.json
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env*.local
29 |
30 | # vercel
31 | .vercel
32 |
33 | # typescript
34 | *.tsbuildinfo
35 | next-env.d.ts
36 |
37 | #amplify-do-not-edit-begin
38 | amplify/\#current-cloud-backend
39 | amplify/.config/local-*
40 | amplify/logs
41 | amplify/mock-data
42 | amplify/mock-api-resources
43 | amplify/backend/amplify-meta.json
44 | amplify/backend/.temp
45 | build/
46 | dist/
47 | node_modules/
48 | aws-exports.js
49 | awsconfiguration.json
50 | amplifyconfiguration.json
51 | amplifyconfiguration.dart
52 | amplify-build-config.json
53 | amplify-gradle-config.json
54 | amplifytools.xcconfig
55 | .secret-*
56 | **.sample
57 | #amplify-do-not-edit-end
58 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.exclude": {
3 | "amplify/.config": true,
4 | "amplify/**/*-parameters.json": true,
5 | "amplify/**/amplify.state": true,
6 | "amplify/**/transform.conf.json": true,
7 | "amplify/#current-cloud-backend": true,
8 | "amplify/backend/amplify-meta.json": true,
9 | "amplify/backend/awscloudformation": true
10 | }
11 | }
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | ## Adding your project
4 |
5 | 1. Fork this repository
6 | 2. Create your branch: `git checkout -b my-project-name`
7 | 3. Add your project to the list of projects in [projects.ts](./data/projects.ts) . Make sure you follow the format for the project type here in [types.ts](./lib/types.ts)
8 | 4. Commit your changes: `git commit -m 'Add my project'`
9 | 5. Push to the branch: `git push origin my-project-name`
10 |
11 | ## Normal contribution
12 |
13 | 1. Fork this repository
14 | 2. Create your branch: `git checkout -b my-new-feature`
15 | 3. Commit your changes: `git commit -m 'Add some feature'`
16 | 4. Push to the branch: `git push origin my-new-feature`
17 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Yeshua Messiah
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # shadverse
2 |
3 | A collection of projects built with the awesome shadcn-ui component library
4 |
5 | ## How to add your project?
6 |
7 | Checkout [CONTRIBUTING.md](./CONTRIBUTING.md) to know more
8 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/app/favicon.ico
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | :root {
7 | --background: 0 0% 100%;
8 | --foreground: 240 10% 3.9%;
9 |
10 | --muted: 240 4.8% 95.9%;
11 | --muted-foreground: 240 3.8% 46.1%;
12 |
13 | --popover: 0 0% 100%;
14 | --popover-foreground: 240 10% 3.9%;
15 |
16 | --card: 0 0% 100%;
17 | --card-foreground: 240 10% 3.9%;
18 |
19 | --border: 240 5.9% 90%;
20 | --input: 240 5.9% 90%;
21 |
22 | --primary: 240 5.9% 10%;
23 | --primary-foreground: 0 0% 98%;
24 |
25 | --secondary: 240 4.8% 95.9%;
26 | --secondary-foreground: 240 5.9% 10%;
27 |
28 | --accent: 240 4.8% 95.9%;
29 | --accent-foreground: 240 5.9% 10%;
30 |
31 | --destructive: 0 84.2% 60.2%;
32 | --destructive-foreground: 0 0% 98%;
33 |
34 | --ring: 240 5% 64.9%;
35 |
36 | --radius: 0.5rem;
37 | }
38 |
39 | .dark {
40 | --background: 240 10% 3.9%;
41 | --foreground: 0 0% 98%;
42 |
43 | --muted: 240 3.7% 15.9%;
44 | --muted-foreground: 240 5% 64.9%;
45 |
46 | --popover: 240 10% 3.9%;
47 | --popover-foreground: 0 0% 98%;
48 |
49 | --card: 240 10% 3.9%;
50 | --card-foreground: 0 0% 98%;
51 |
52 | --border: 240 3.7% 15.9%;
53 | --input: 240 3.7% 15.9%;
54 |
55 | --primary: 0 0% 98%;
56 | --primary-foreground: 240 5.9% 10%;
57 |
58 | --secondary: 240 3.7% 15.9%;
59 | --secondary-foreground: 0 0% 98%;
60 |
61 | --accent: 240 3.7% 15.9%;
62 | --accent-foreground: 0 0% 98%;
63 |
64 | --destructive: 0 62.8% 30.6%;
65 | --destructive-foreground: 0 85.7% 97.3%;
66 |
67 | --ring: 240 3.7% 15.9%;
68 | }
69 | }
70 |
71 | @layer base {
72 | * {
73 | @apply border-border;
74 | }
75 |
76 | body {
77 | @apply bg-background text-foreground;
78 | }
79 | }
80 |
81 | /* Custom Scrollbars */
82 | ::-webkit-scrollbar {
83 | width: 10px;
84 | height: 6px;
85 | }
86 |
87 | ::-webkit-scrollbar-thumb {
88 | width: 6px;
89 | background: #0c0c0e;
90 | border-radius: 0px;
91 | }
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import { Provider } from "@/components/provider";
2 | import "./globals.css";
3 | import type { Metadata } from "next";
4 | import localFont from "next/font/local";
5 | import Header from "@/components/header";
6 |
7 | const inter = localFont({
8 | src: [
9 | {
10 | path: "../public/fonts/Inter-Thin.ttf",
11 | weight: "100",
12 | style: "normal",
13 | },
14 | {
15 | path: "../public/fonts/Inter-ExtraLight.ttf",
16 | weight: "200",
17 | style: "normal",
18 | },
19 | {
20 | path: "../public/fonts/Inter-Light.ttf",
21 | weight: "300",
22 | style: "normal",
23 | },
24 | {
25 | path: "../public/fonts/Inter-Regular.ttf",
26 | weight: "400",
27 | style: "normal",
28 | },
29 | {
30 | path: "../public/fonts/Inter-Medium.ttf",
31 | weight: "500",
32 | style: "normal",
33 | },
34 | {
35 | path: "../public/fonts/Inter-SemiBold.ttf",
36 | weight: "600",
37 | style: "normal",
38 | },
39 | {
40 | path: "../public/fonts/Inter-Bold.ttf",
41 | weight: "700",
42 | style: "normal",
43 | },
44 | {
45 | path: "../public/fonts/Inter-ExtraBold.ttf",
46 | weight: "800",
47 | style: "normal",
48 | },
49 | {
50 | path: "../public/fonts/Inter-Black.ttf",
51 | weight: "900",
52 | style: "normal",
53 | },
54 | ],
55 | });
56 |
57 | export const metadata: Metadata = {
58 | title: "shadverse",
59 | description:
60 | "A collection of projects built with the awesome shadcn-ui component library",
61 | };
62 |
63 | export default function RootLayout({
64 | children,
65 | }: {
66 | children: React.ReactNode;
67 | }) {
68 | return (
69 |
70 |
71 |
72 |
73 | {children}
74 |
75 |
76 |
77 | );
78 | }
79 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import { Metadata } from "next";
2 | import Jumbotron from "@/components/jumbotron";
3 | import { Button } from "@/components/ui/button";
4 | import { Input } from "@/components/ui/input";
5 | import ProjectCard from "@/components/card";
6 |
7 | import { projects } from "@/data/projects";
8 |
9 | export const metadata: Metadata = {
10 | title: "shadverse",
11 | description:
12 | "A collection of projects built with the awesome shadcn-ui component library",
13 | };
14 | export default function Home() {
15 | return (
16 |
17 |
18 |
19 |
24 | Search
25 |
26 |
27 | {projects.map((project, i) => (
28 |
29 | ))}
30 |
31 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "new-york",
4 | "rsc": true,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.js",
8 | "css": "app/globals.css",
9 | "baseColor": "zinc",
10 | "cssVariables": true
11 | },
12 | "aliases": {
13 | "components": "@/components",
14 | "utils": "@/lib/utils"
15 | }
16 | }
--------------------------------------------------------------------------------
/components/card.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { Link2Icon } from "@radix-ui/react-icons";
4 | import GitHubButton from "react-github-btn";
5 |
6 | import { Button } from "@/components/ui/button";
7 | import {
8 | Card,
9 | CardContent,
10 | CardDescription,
11 | CardHeader,
12 | CardTitle,
13 | } from "@/components/ui/card";
14 | import { IProject } from "@/lib/types";
15 |
16 | export default function ProjectCard({ project }: { project: IProject }) {
17 | return (
18 |
19 |
25 |
26 |
27 |
28 |
29 |
30 | {project.title}
31 | {project.description}
32 |
33 |
34 |
35 |
36 |
37 | {/*
38 | Dave Burk */}
39 |
45 | Stars
46 |
47 |
48 |
49 | {/*
50 | 20k */}
51 |
52 |
58 | Follow author
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | {/* Live url */}
67 | Github
68 |
69 |
70 |
71 | );
72 | }
73 |
--------------------------------------------------------------------------------
/components/header.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import { useState, useEffect } from "react";
4 |
5 | import Link from "next/link";
6 | import { Button } from "@/components/ui/button";
7 |
8 | import Logo from "./logo";
9 |
10 | export default function Header() {
11 | const [top, setTop] = useState(true);
12 |
13 | const scrollHandler = () => {
14 | window.scrollY > 10 ? setTop(false) : setTop(true);
15 | };
16 |
17 | useEffect(() => {
18 | scrollHandler();
19 | window.addEventListener("scroll", scrollHandler);
20 | return () => window.removeEventListener("scroll", scrollHandler);
21 | }, [top]);
22 |
23 | return (
24 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | shadverse
37 |
38 |
39 |
40 |
41 |
42 |
43 |
56 |
57 |
58 |
59 |
60 | );
61 | }
62 |
--------------------------------------------------------------------------------
/components/icons.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | AlertTriangle,
3 | ArrowRight,
4 | Banknote,
5 | Check,
6 | CheckCircle,
7 | ChevronLeft,
8 | ChevronRight,
9 | ClipboardCheck,
10 | Copy,
11 | CreditCard,
12 | DownloadCloud,
13 | Edit3,
14 | Eye,
15 | Facebook,
16 | File,
17 | FileText,
18 | Film,
19 | HeartHandshake,
20 | HelpCircle,
21 | Image,
22 | KeyRound,
23 | Laptop,
24 | Loader,
25 | Loader2,
26 | LogOut,
27 | LucideProps,
28 | Moon,
29 | Monitor,
30 | MoreVertical,
31 | Newspaper,
32 | Pizza,
33 | Plus,
34 | ScrollText,
35 | Search,
36 | Settings,
37 | Share2,
38 | SunMedium,
39 | Terminal,
40 | Trash,
41 | Twitter,
42 | Unlock,
43 | UploadCloud,
44 | User,
45 | Wallet,
46 | Waves,
47 | X,
48 | } from "lucide-react";
49 |
50 | export const Icons = {
51 | logo: (props: LucideProps) => (
52 |
61 |
62 |
63 | ),
64 | close: X,
65 | spinner: Loader,
66 | spinner2: Loader2,
67 | chevronLeft: ChevronLeft,
68 | chevronRight: ChevronRight,
69 | trash: Trash,
70 | post: FileText,
71 | page: File,
72 | media: Image,
73 | settings: Settings,
74 | billing: CreditCard,
75 | ellipsis: MoreVertical,
76 | search: Search,
77 | add: Plus,
78 | warning: AlertTriangle,
79 | user: User,
80 | arrowRight: ArrowRight,
81 | help: HelpCircle,
82 | pizza: Pizza,
83 | twitter: Twitter,
84 | check: Check,
85 | checkCircle: CheckCircle,
86 | copy: Copy,
87 | copyDone: ClipboardCheck,
88 | sun: SunMedium,
89 | moon: Moon,
90 | laptop: Laptop,
91 | wallet: Wallet,
92 | heartHandshake: HeartHandshake,
93 | terminal: Terminal,
94 | waves: Waves,
95 | facebook: Facebook,
96 | banknote: Banknote,
97 | monitor: Monitor,
98 | eye: Eye,
99 | newspaper: Newspaper,
100 | film: Film,
101 | edit3: Edit3,
102 | download: DownloadCloud,
103 | scrollText: ScrollText,
104 | key: KeyRound,
105 | upload: UploadCloud,
106 | share: Share2,
107 | logout: LogOut,
108 | unlock: Unlock,
109 | system: (props: LucideProps) => (
110 |
111 |
116 |
117 | ),
118 | gitHub: (props: LucideProps) => (
119 |
120 |
124 |
125 | ),
126 | radix: (props: LucideProps) => (
127 |
128 |
132 |
133 |
137 |
138 | ),
139 | aria: (props: LucideProps) => (
140 |
141 |
142 |
143 | ),
144 | npm: (props: LucideProps) => (
145 |
146 |
150 |
151 | ),
152 | yarn: (props: LucideProps) => (
153 |
154 |
158 |
159 | ),
160 | pnpm: (props: LucideProps) => (
161 |
162 |
166 |
167 | ),
168 | react: (props: LucideProps) => (
169 |
170 |
174 |
175 | ),
176 | tailwind: (props: LucideProps) => (
177 |
178 |
182 |
183 | ),
184 | google: (props: LucideProps) => (
185 |
186 |
190 |
191 | ),
192 | apple: (props: LucideProps) => (
193 |
194 |
198 |
199 | ),
200 | paypal: (props: LucideProps) => (
201 |
202 |
206 |
207 | ),
208 | };
209 |
--------------------------------------------------------------------------------
/components/jumbotron.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Button } from "./ui/button";
3 |
4 | export default function Jumbotron() {
5 | return (
6 |
7 |
8 |
9 | Share and discover applications built with the awesome shadcn/ui
10 |
11 |
12 | Shadverse is a web app that curates a captivating collection of
13 | projects all crafted with the cutting-edge{" "}
14 |
15 |
20 | shadcn/ui
21 |
22 | {" "}
23 | component library
24 |
25 |
45 |
46 |
47 | );
48 | }
49 |
--------------------------------------------------------------------------------
/components/logo.tsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export default function Logo() {
4 | return (
5 |
12 |
18 |
19 | );
20 | }
21 |
--------------------------------------------------------------------------------
/components/provider.tsx:
--------------------------------------------------------------------------------
1 | "use client";
2 |
3 | import * as React from "react";
4 | import { ThemeProvider as NextThemesProvider } from "next-themes";
5 | import { type ThemeProviderProps } from "next-themes/dist/types";
6 |
7 | export function Provider({ children, ...props }: ThemeProviderProps) {
8 | return <>{children}>;
9 | }
10 |
--------------------------------------------------------------------------------
/components/ui/avatar.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as AvatarPrimitive from "@radix-ui/react-avatar"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const Avatar = React.forwardRef<
9 | React.ElementRef,
10 | React.ComponentPropsWithoutRef
11 | >(({ className, ...props }, ref) => (
12 |
20 | ))
21 | Avatar.displayName = AvatarPrimitive.Root.displayName
22 |
23 | const AvatarImage = React.forwardRef<
24 | React.ElementRef,
25 | React.ComponentPropsWithoutRef
26 | >(({ className, ...props }, ref) => (
27 |
32 | ))
33 | AvatarImage.displayName = AvatarPrimitive.Image.displayName
34 |
35 | const AvatarFallback = React.forwardRef<
36 | React.ElementRef,
37 | React.ComponentPropsWithoutRef
38 | >(({ className, ...props }, ref) => (
39 |
47 | ))
48 | AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
49 |
50 | export { Avatar, AvatarImage, AvatarFallback }
51 |
--------------------------------------------------------------------------------
/components/ui/badge.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { cva, type VariantProps } from "class-variance-authority"
3 |
4 | import { cn } from "@/lib/utils"
5 |
6 | const badgeVariants = cva(
7 | "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
8 | {
9 | variants: {
10 | variant: {
11 | default:
12 | "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
13 | secondary:
14 | "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
15 | destructive:
16 | "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",
17 | outline: "text-foreground",
18 | },
19 | },
20 | defaultVariants: {
21 | variant: "default",
22 | },
23 | }
24 | )
25 |
26 | export interface BadgeProps
27 | extends React.HTMLAttributes,
28 | VariantProps {}
29 |
30 | function Badge({ className, variant, ...props }: BadgeProps) {
31 | return (
32 |
33 | )
34 | }
35 |
36 | export { Badge, badgeVariants }
37 |
--------------------------------------------------------------------------------
/components/ui/button.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { Slot } from "@radix-ui/react-slot"
3 | import { cva, type VariantProps } from "class-variance-authority"
4 |
5 | import { cn } from "@/lib/utils"
6 |
7 | const buttonVariants = cva(
8 | "inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
9 | {
10 | variants: {
11 | variant: {
12 | default:
13 | "bg-primary text-primary-foreground shadow hover:bg-primary/90",
14 | destructive:
15 | "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
16 | outline:
17 | "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
18 | secondary:
19 | "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
20 | ghost: "hover:bg-accent hover:text-accent-foreground",
21 | link: "text-primary underline-offset-4 hover:underline",
22 | },
23 | size: {
24 | default: "h-9 px-4 py-2",
25 | sm: "h-8 rounded-md px-3 text-xs",
26 | lg: "h-10 rounded-md px-8",
27 | icon: "h-9 w-9",
28 | },
29 | },
30 | defaultVariants: {
31 | variant: "default",
32 | size: "default",
33 | },
34 | }
35 | )
36 |
37 | export interface ButtonProps
38 | extends React.ButtonHTMLAttributes,
39 | VariantProps {
40 | asChild?: boolean
41 | }
42 |
43 | const Button = React.forwardRef(
44 | ({ className, variant, size, asChild = false, ...props }, ref) => {
45 | const Comp = asChild ? Slot : "button"
46 | return (
47 |
52 | )
53 | }
54 | )
55 | Button.displayName = "Button"
56 |
57 | export { Button, buttonVariants }
58 |
--------------------------------------------------------------------------------
/components/ui/card.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | const Card = React.forwardRef<
6 | HTMLDivElement,
7 | React.HTMLAttributes
8 | >(({ className, ...props }, ref) => (
9 |
17 | ))
18 | Card.displayName = "Card"
19 |
20 | const CardHeader = React.forwardRef<
21 | HTMLDivElement,
22 | React.HTMLAttributes
23 | >(({ className, ...props }, ref) => (
24 |
29 | ))
30 | CardHeader.displayName = "CardHeader"
31 |
32 | const CardTitle = React.forwardRef<
33 | HTMLParagraphElement,
34 | React.HTMLAttributes
35 | >(({ className, ...props }, ref) => (
36 |
41 | ))
42 | CardTitle.displayName = "CardTitle"
43 |
44 | const CardDescription = React.forwardRef<
45 | HTMLParagraphElement,
46 | React.HTMLAttributes
47 | >(({ className, ...props }, ref) => (
48 |
53 | ))
54 | CardDescription.displayName = "CardDescription"
55 |
56 | const CardContent = React.forwardRef<
57 | HTMLDivElement,
58 | React.HTMLAttributes
59 | >(({ className, ...props }, ref) => (
60 |
61 | ))
62 | CardContent.displayName = "CardContent"
63 |
64 | const CardFooter = React.forwardRef<
65 | HTMLDivElement,
66 | React.HTMLAttributes
67 | >(({ className, ...props }, ref) => (
68 |
73 | ))
74 | CardFooter.displayName = "CardFooter"
75 |
76 | export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
77 |
--------------------------------------------------------------------------------
/components/ui/context-menu.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as ContextMenuPrimitive from "@radix-ui/react-context-menu"
5 | import {
6 | CheckIcon,
7 | ChevronRightIcon,
8 | DotFilledIcon,
9 | } from "@radix-ui/react-icons"
10 |
11 | import { cn } from "@/lib/utils"
12 |
13 | const ContextMenu = ContextMenuPrimitive.Root
14 |
15 | const ContextMenuTrigger = ContextMenuPrimitive.Trigger
16 |
17 | const ContextMenuGroup = ContextMenuPrimitive.Group
18 |
19 | const ContextMenuPortal = ContextMenuPrimitive.Portal
20 |
21 | const ContextMenuSub = ContextMenuPrimitive.Sub
22 |
23 | const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup
24 |
25 | const ContextMenuSubTrigger = React.forwardRef<
26 | React.ElementRef,
27 | React.ComponentPropsWithoutRef & {
28 | inset?: boolean
29 | }
30 | >(({ className, inset, children, ...props }, ref) => (
31 |
40 | {children}
41 |
42 |
43 | ))
44 | ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName
45 |
46 | const ContextMenuSubContent = React.forwardRef<
47 | React.ElementRef,
48 | React.ComponentPropsWithoutRef
49 | >(({ className, ...props }, ref) => (
50 |
58 | ))
59 | ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName
60 |
61 | const ContextMenuContent = React.forwardRef<
62 | React.ElementRef,
63 | React.ComponentPropsWithoutRef
64 | >(({ className, ...props }, ref) => (
65 |
66 |
74 |
75 | ))
76 | ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName
77 |
78 | const ContextMenuItem = React.forwardRef<
79 | React.ElementRef,
80 | React.ComponentPropsWithoutRef & {
81 | inset?: boolean
82 | }
83 | >(({ className, inset, ...props }, ref) => (
84 |
93 | ))
94 | ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName
95 |
96 | const ContextMenuCheckboxItem = React.forwardRef<
97 | React.ElementRef,
98 | React.ComponentPropsWithoutRef
99 | >(({ className, children, checked, ...props }, ref) => (
100 |
109 |
110 |
111 |
112 |
113 |
114 | {children}
115 |
116 | ))
117 | ContextMenuCheckboxItem.displayName =
118 | ContextMenuPrimitive.CheckboxItem.displayName
119 |
120 | const ContextMenuRadioItem = React.forwardRef<
121 | React.ElementRef,
122 | React.ComponentPropsWithoutRef
123 | >(({ className, children, ...props }, ref) => (
124 |
132 |
133 |
134 |
135 |
136 |
137 | {children}
138 |
139 | ))
140 | ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName
141 |
142 | const ContextMenuLabel = React.forwardRef<
143 | React.ElementRef,
144 | React.ComponentPropsWithoutRef & {
145 | inset?: boolean
146 | }
147 | >(({ className, inset, ...props }, ref) => (
148 |
157 | ))
158 | ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName
159 |
160 | const ContextMenuSeparator = React.forwardRef<
161 | React.ElementRef,
162 | React.ComponentPropsWithoutRef
163 | >(({ className, ...props }, ref) => (
164 |
169 | ))
170 | ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName
171 |
172 | const ContextMenuShortcut = ({
173 | className,
174 | ...props
175 | }: React.HTMLAttributes) => {
176 | return (
177 |
184 | )
185 | }
186 | ContextMenuShortcut.displayName = "ContextMenuShortcut"
187 |
188 | export {
189 | ContextMenu,
190 | ContextMenuTrigger,
191 | ContextMenuContent,
192 | ContextMenuItem,
193 | ContextMenuCheckboxItem,
194 | ContextMenuRadioItem,
195 | ContextMenuLabel,
196 | ContextMenuSeparator,
197 | ContextMenuShortcut,
198 | ContextMenuGroup,
199 | ContextMenuPortal,
200 | ContextMenuSub,
201 | ContextMenuSubContent,
202 | ContextMenuSubTrigger,
203 | ContextMenuRadioGroup,
204 | }
205 |
--------------------------------------------------------------------------------
/components/ui/dialog.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as DialogPrimitive from "@radix-ui/react-dialog"
5 | import { Cross2Icon } from "@radix-ui/react-icons"
6 |
7 | import { cn } from "@/lib/utils"
8 |
9 | const Dialog = DialogPrimitive.Root
10 |
11 | const DialogTrigger = DialogPrimitive.Trigger
12 |
13 | const DialogPortal = ({
14 | className,
15 | ...props
16 | }: DialogPrimitive.DialogPortalProps) => (
17 |
18 | )
19 | DialogPortal.displayName = DialogPrimitive.Portal.displayName
20 |
21 | const DialogOverlay = React.forwardRef<
22 | React.ElementRef,
23 | React.ComponentPropsWithoutRef
24 | >(({ className, ...props }, ref) => (
25 |
33 | ))
34 | DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
35 |
36 | const DialogContent = React.forwardRef<
37 | React.ElementRef,
38 | React.ComponentPropsWithoutRef
39 | >(({ className, children, ...props }, ref) => (
40 |
41 |
42 |
50 | {children}
51 |
52 |
53 | Close
54 |
55 |
56 |
57 | ))
58 | DialogContent.displayName = DialogPrimitive.Content.displayName
59 |
60 | const DialogHeader = ({
61 | className,
62 | ...props
63 | }: React.HTMLAttributes) => (
64 |
71 | )
72 | DialogHeader.displayName = "DialogHeader"
73 |
74 | const DialogFooter = ({
75 | className,
76 | ...props
77 | }: React.HTMLAttributes) => (
78 |
85 | )
86 | DialogFooter.displayName = "DialogFooter"
87 |
88 | const DialogTitle = React.forwardRef<
89 | React.ElementRef,
90 | React.ComponentPropsWithoutRef
91 | >(({ className, ...props }, ref) => (
92 |
100 | ))
101 | DialogTitle.displayName = DialogPrimitive.Title.displayName
102 |
103 | const DialogDescription = React.forwardRef<
104 | React.ElementRef,
105 | React.ComponentPropsWithoutRef
106 | >(({ className, ...props }, ref) => (
107 |
112 | ))
113 | DialogDescription.displayName = DialogPrimitive.Description.displayName
114 |
115 | export {
116 | Dialog,
117 | DialogTrigger,
118 | DialogContent,
119 | DialogHeader,
120 | DialogFooter,
121 | DialogTitle,
122 | DialogDescription,
123 | }
124 |
--------------------------------------------------------------------------------
/components/ui/dropdown-menu.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
5 | import {
6 | CheckIcon,
7 | ChevronRightIcon,
8 | DotFilledIcon,
9 | } from "@radix-ui/react-icons"
10 |
11 | import { cn } from "@/lib/utils"
12 |
13 | const DropdownMenu = DropdownMenuPrimitive.Root
14 |
15 | const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
16 |
17 | const DropdownMenuGroup = DropdownMenuPrimitive.Group
18 |
19 | const DropdownMenuPortal = DropdownMenuPrimitive.Portal
20 |
21 | const DropdownMenuSub = DropdownMenuPrimitive.Sub
22 |
23 | const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
24 |
25 | const DropdownMenuSubTrigger = React.forwardRef<
26 | React.ElementRef,
27 | React.ComponentPropsWithoutRef & {
28 | inset?: boolean
29 | }
30 | >(({ className, inset, children, ...props }, ref) => (
31 |
40 | {children}
41 |
42 |
43 | ))
44 | DropdownMenuSubTrigger.displayName =
45 | DropdownMenuPrimitive.SubTrigger.displayName
46 |
47 | const DropdownMenuSubContent = React.forwardRef<
48 | React.ElementRef,
49 | React.ComponentPropsWithoutRef
50 | >(({ className, ...props }, ref) => (
51 |
59 | ))
60 | DropdownMenuSubContent.displayName =
61 | DropdownMenuPrimitive.SubContent.displayName
62 |
63 | const DropdownMenuContent = React.forwardRef<
64 | React.ElementRef,
65 | React.ComponentPropsWithoutRef
66 | >(({ className, sideOffset = 4, ...props }, ref) => (
67 |
68 |
78 |
79 | ))
80 | DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
81 |
82 | const DropdownMenuItem = React.forwardRef<
83 | React.ElementRef,
84 | React.ComponentPropsWithoutRef & {
85 | inset?: boolean
86 | }
87 | >(({ className, inset, ...props }, ref) => (
88 |
97 | ))
98 | DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
99 |
100 | const DropdownMenuCheckboxItem = React.forwardRef<
101 | React.ElementRef,
102 | React.ComponentPropsWithoutRef
103 | >(({ className, children, checked, ...props }, ref) => (
104 |
113 |
114 |
115 |
116 |
117 |
118 | {children}
119 |
120 | ))
121 | DropdownMenuCheckboxItem.displayName =
122 | DropdownMenuPrimitive.CheckboxItem.displayName
123 |
124 | const DropdownMenuRadioItem = React.forwardRef<
125 | React.ElementRef,
126 | React.ComponentPropsWithoutRef
127 | >(({ className, children, ...props }, ref) => (
128 |
136 |
137 |
138 |
139 |
140 |
141 | {children}
142 |
143 | ))
144 | DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
145 |
146 | const DropdownMenuLabel = React.forwardRef<
147 | React.ElementRef,
148 | React.ComponentPropsWithoutRef & {
149 | inset?: boolean
150 | }
151 | >(({ className, inset, ...props }, ref) => (
152 |
161 | ))
162 | DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
163 |
164 | const DropdownMenuSeparator = React.forwardRef<
165 | React.ElementRef,
166 | React.ComponentPropsWithoutRef
167 | >(({ className, ...props }, ref) => (
168 |
173 | ))
174 | DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
175 |
176 | const DropdownMenuShortcut = ({
177 | className,
178 | ...props
179 | }: React.HTMLAttributes) => {
180 | return (
181 |
185 | )
186 | }
187 | DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
188 |
189 | export {
190 | DropdownMenu,
191 | DropdownMenuTrigger,
192 | DropdownMenuContent,
193 | DropdownMenuItem,
194 | DropdownMenuCheckboxItem,
195 | DropdownMenuRadioItem,
196 | DropdownMenuLabel,
197 | DropdownMenuSeparator,
198 | DropdownMenuShortcut,
199 | DropdownMenuGroup,
200 | DropdownMenuPortal,
201 | DropdownMenuSub,
202 | DropdownMenuSubContent,
203 | DropdownMenuSubTrigger,
204 | DropdownMenuRadioGroup,
205 | }
206 |
--------------------------------------------------------------------------------
/components/ui/input.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | export interface InputProps
6 | extends React.InputHTMLAttributes {}
7 |
8 | const Input = React.forwardRef(
9 | ({ className, type, ...props }, ref) => {
10 | return (
11 |
20 | )
21 | }
22 | )
23 | Input.displayName = "Input"
24 |
25 | export { Input }
26 |
--------------------------------------------------------------------------------
/components/ui/label.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as LabelPrimitive from "@radix-ui/react-label"
5 | import { cva, type VariantProps } from "class-variance-authority"
6 |
7 | import { cn } from "@/lib/utils"
8 |
9 | const labelVariants = cva(
10 | "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
11 | )
12 |
13 | const Label = React.forwardRef<
14 | React.ElementRef,
15 | React.ComponentPropsWithoutRef &
16 | VariantProps
17 | >(({ className, ...props }, ref) => (
18 |
23 | ))
24 | Label.displayName = LabelPrimitive.Root.displayName
25 |
26 | export { Label }
27 |
--------------------------------------------------------------------------------
/components/ui/menubar.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import {
5 | CheckIcon,
6 | ChevronRightIcon,
7 | DotFilledIcon,
8 | } from "@radix-ui/react-icons"
9 | import * as MenubarPrimitive from "@radix-ui/react-menubar"
10 |
11 | import { cn } from "@/lib/utils"
12 |
13 | const MenubarMenu = MenubarPrimitive.Menu
14 |
15 | const MenubarGroup = MenubarPrimitive.Group
16 |
17 | const MenubarPortal = MenubarPrimitive.Portal
18 |
19 | const MenubarSub = MenubarPrimitive.Sub
20 |
21 | const MenubarRadioGroup = MenubarPrimitive.RadioGroup
22 |
23 | const Menubar = React.forwardRef<
24 | React.ElementRef,
25 | React.ComponentPropsWithoutRef
26 | >(({ className, ...props }, ref) => (
27 |
35 | ))
36 | Menubar.displayName = MenubarPrimitive.Root.displayName
37 |
38 | const MenubarTrigger = React.forwardRef<
39 | React.ElementRef,
40 | React.ComponentPropsWithoutRef
41 | >(({ className, ...props }, ref) => (
42 |
50 | ))
51 | MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName
52 |
53 | const MenubarSubTrigger = React.forwardRef<
54 | React.ElementRef,
55 | React.ComponentPropsWithoutRef & {
56 | inset?: boolean
57 | }
58 | >(({ className, inset, children, ...props }, ref) => (
59 |
68 | {children}
69 |
70 |
71 | ))
72 | MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName
73 |
74 | const MenubarSubContent = React.forwardRef<
75 | React.ElementRef,
76 | React.ComponentPropsWithoutRef
77 | >(({ className, ...props }, ref) => (
78 |
86 | ))
87 | MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName
88 |
89 | const MenubarContent = React.forwardRef<
90 | React.ElementRef,
91 | React.ComponentPropsWithoutRef
92 | >(
93 | (
94 | { className, align = "start", alignOffset = -4, sideOffset = 8, ...props },
95 | ref
96 | ) => (
97 |
98 |
109 |
110 | )
111 | )
112 | MenubarContent.displayName = MenubarPrimitive.Content.displayName
113 |
114 | const MenubarItem = React.forwardRef<
115 | React.ElementRef,
116 | React.ComponentPropsWithoutRef & {
117 | inset?: boolean
118 | }
119 | >(({ className, inset, ...props }, ref) => (
120 |
129 | ))
130 | MenubarItem.displayName = MenubarPrimitive.Item.displayName
131 |
132 | const MenubarCheckboxItem = React.forwardRef<
133 | React.ElementRef,
134 | React.ComponentPropsWithoutRef
135 | >(({ className, children, checked, ...props }, ref) => (
136 |
145 |
146 |
147 |
148 |
149 |
150 | {children}
151 |
152 | ))
153 | MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName
154 |
155 | const MenubarRadioItem = React.forwardRef<
156 | React.ElementRef,
157 | React.ComponentPropsWithoutRef
158 | >(({ className, children, ...props }, ref) => (
159 |
167 |
168 |
169 |
170 |
171 |
172 | {children}
173 |
174 | ))
175 | MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName
176 |
177 | const MenubarLabel = React.forwardRef<
178 | React.ElementRef,
179 | React.ComponentPropsWithoutRef & {
180 | inset?: boolean
181 | }
182 | >(({ className, inset, ...props }, ref) => (
183 |
192 | ))
193 | MenubarLabel.displayName = MenubarPrimitive.Label.displayName
194 |
195 | const MenubarSeparator = React.forwardRef<
196 | React.ElementRef,
197 | React.ComponentPropsWithoutRef
198 | >(({ className, ...props }, ref) => (
199 |
204 | ))
205 | MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName
206 |
207 | const MenubarShortcut = ({
208 | className,
209 | ...props
210 | }: React.HTMLAttributes) => {
211 | return (
212 |
219 | )
220 | }
221 | MenubarShortcut.displayname = "MenubarShortcut"
222 |
223 | export {
224 | Menubar,
225 | MenubarMenu,
226 | MenubarTrigger,
227 | MenubarContent,
228 | MenubarItem,
229 | MenubarSeparator,
230 | MenubarLabel,
231 | MenubarCheckboxItem,
232 | MenubarRadioGroup,
233 | MenubarRadioItem,
234 | MenubarPortal,
235 | MenubarSubContent,
236 | MenubarSubTrigger,
237 | MenubarGroup,
238 | MenubarSub,
239 | MenubarShortcut,
240 | }
241 |
--------------------------------------------------------------------------------
/components/ui/scroll-area.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const ScrollArea = React.forwardRef<
9 | React.ElementRef,
10 | React.ComponentPropsWithoutRef
11 | >(({ className, children, ...props }, ref) => (
12 |
17 |
18 | {children}
19 |
20 |
21 |
22 |
23 | ))
24 | ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
25 |
26 | const ScrollBar = React.forwardRef<
27 | React.ElementRef,
28 | React.ComponentPropsWithoutRef
29 | >(({ className, orientation = "vertical", ...props }, ref) => (
30 |
43 |
44 |
45 | ))
46 | ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
47 |
48 | export { ScrollArea, ScrollBar }
49 |
--------------------------------------------------------------------------------
/components/ui/separator.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as SeparatorPrimitive from "@radix-ui/react-separator"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const Separator = React.forwardRef<
9 | React.ElementRef,
10 | React.ComponentPropsWithoutRef
11 | >(
12 | (
13 | { className, orientation = "horizontal", decorative = true, ...props },
14 | ref
15 | ) => (
16 |
27 | )
28 | )
29 | Separator.displayName = SeparatorPrimitive.Root.displayName
30 |
31 | export { Separator }
32 |
--------------------------------------------------------------------------------
/components/ui/tabs.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as TabsPrimitive from "@radix-ui/react-tabs"
5 |
6 | import { cn } from "@/lib/utils"
7 |
8 | const Tabs = TabsPrimitive.Root
9 |
10 | const TabsList = React.forwardRef<
11 | React.ElementRef,
12 | React.ComponentPropsWithoutRef
13 | >(({ className, ...props }, ref) => (
14 |
22 | ))
23 | TabsList.displayName = TabsPrimitive.List.displayName
24 |
25 | const TabsTrigger = React.forwardRef<
26 | React.ElementRef,
27 | React.ComponentPropsWithoutRef
28 | >(({ className, ...props }, ref) => (
29 |
37 | ))
38 | TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
39 |
40 | const TabsContent = React.forwardRef<
41 | React.ElementRef,
42 | React.ComponentPropsWithoutRef
43 | >(({ className, ...props }, ref) => (
44 |
52 | ))
53 | TabsContent.displayName = TabsPrimitive.Content.displayName
54 |
55 | export { Tabs, TabsList, TabsTrigger, TabsContent }
56 |
--------------------------------------------------------------------------------
/data/projects.ts:
--------------------------------------------------------------------------------
1 | import type { IProject } from "@/lib/types";
2 |
3 | export const projects: IProject[] = [
4 | {
5 | title: "shadcn/ui",
6 | description:
7 | "Beautifully designed components that you can copy and paste into your apps. Accessible. Customizable. Open Source.",
8 | authorGithub: "https://github.com/shadcn-ui",
9 | projectRepo: "https://github.com/shadcn-ui/ui",
10 | projectLink: "https://ui.shadcn.com/",
11 | },
12 | {
13 | title: "shadverse",
14 | description:
15 | "Share and discover applications built with the awesome shadcn/ui",
16 | authorGithub: "https://github.com/lucky-chap",
17 | projectRepo: "https://github.com/lucky-chap/shadverse",
18 | projectLink: "https://shadverse.vercel.app/",
19 | },
20 | ];
21 |
--------------------------------------------------------------------------------
/lib/types.ts:
--------------------------------------------------------------------------------
1 | export interface IProject {
2 | title: string;
3 | description: string;
4 | authorGithub: string;
5 | projectRepo: string;
6 | projectLink?: string;
7 | }
8 |
--------------------------------------------------------------------------------
/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from "clsx"
2 | import { twMerge } from "tailwind-merge"
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | images: {
4 | remotePatterns: [
5 | {
6 | protocol: "https",
7 | hostname: "*",
8 | port: "",
9 | },
10 | ],
11 | },
12 | };
13 |
14 | module.exports = nextConfig;
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "awesome-shadcn-ui",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@radix-ui/react-avatar": "^1.0.3",
13 | "@radix-ui/react-context-menu": "^2.1.4",
14 | "@radix-ui/react-dialog": "^1.0.4",
15 | "@radix-ui/react-dropdown-menu": "^2.0.5",
16 | "@radix-ui/react-icons": "^1.3.0",
17 | "@radix-ui/react-label": "^2.0.2",
18 | "@radix-ui/react-menubar": "^1.0.3",
19 | "@radix-ui/react-scroll-area": "^1.0.4",
20 | "@radix-ui/react-separator": "^1.0.3",
21 | "@radix-ui/react-slot": "^1.0.2",
22 | "@radix-ui/react-tabs": "^1.0.4",
23 | "@types/node": "20.4.4",
24 | "@types/react": "18.2.15",
25 | "@types/react-dom": "18.2.7",
26 | "autoprefixer": "10.4.14",
27 | "class-variance-authority": "^0.7.0",
28 | "clsx": "^2.0.0",
29 | "eslint": "8.45.0",
30 | "eslint-config-next": "13.4.12",
31 | "lucide-react": "^0.244.0",
32 | "next": "13.4.12",
33 | "next-themes": "^0.2.1",
34 | "postcss": "8.4.27",
35 | "react": "18.2.0",
36 | "react-dom": "18.2.0",
37 | "react-github-btn": "^1.4.0",
38 | "tailwind-merge": "^1.14.0",
39 | "tailwindcss": "3.3.3",
40 | "tailwindcss-animate": "^1.0.6",
41 | "typescript": "5.1.6"
42 | },
43 | "devDependencies": {
44 | "@types/react-responsive-masonry": "^2.1.0",
45 | "prettier-plugin-tailwindcss": "^0.4.1"
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/7-spirits.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/7-spirits.png
--------------------------------------------------------------------------------
/public/fonts/Inter-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-Black.ttf
--------------------------------------------------------------------------------
/public/fonts/Inter-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-Bold.ttf
--------------------------------------------------------------------------------
/public/fonts/Inter-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-ExtraBold.ttf
--------------------------------------------------------------------------------
/public/fonts/Inter-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-ExtraLight.ttf
--------------------------------------------------------------------------------
/public/fonts/Inter-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-Light.ttf
--------------------------------------------------------------------------------
/public/fonts/Inter-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-Medium.ttf
--------------------------------------------------------------------------------
/public/fonts/Inter-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-Regular.ttf
--------------------------------------------------------------------------------
/public/fonts/Inter-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-SemiBold.ttf
--------------------------------------------------------------------------------
/public/fonts/Inter-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/fonts/Inter-Thin.ttf
--------------------------------------------------------------------------------
/public/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/sample.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lucky-chap/shadverse/bf04dff210e9ab56db6bdc9f670103fddb5bc686/public/sample.png
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | darkMode: ["class"],
4 | content: [
5 | './pages/**/*.{ts,tsx}',
6 | './components/**/*.{ts,tsx}',
7 | './app/**/*.{ts,tsx}',
8 | './src/**/*.{ts,tsx}',
9 | ],
10 | theme: {
11 | container: {
12 | center: true,
13 | padding: "2rem",
14 | screens: {
15 | "2xl": "1400px",
16 | },
17 | },
18 | extend: {
19 | colors: {
20 | border: "hsl(var(--border))",
21 | input: "hsl(var(--input))",
22 | ring: "hsl(var(--ring))",
23 | background: "hsl(var(--background))",
24 | foreground: "hsl(var(--foreground))",
25 | primary: {
26 | DEFAULT: "hsl(var(--primary))",
27 | foreground: "hsl(var(--primary-foreground))",
28 | },
29 | secondary: {
30 | DEFAULT: "hsl(var(--secondary))",
31 | foreground: "hsl(var(--secondary-foreground))",
32 | },
33 | destructive: {
34 | DEFAULT: "hsl(var(--destructive))",
35 | foreground: "hsl(var(--destructive-foreground))",
36 | },
37 | muted: {
38 | DEFAULT: "hsl(var(--muted))",
39 | foreground: "hsl(var(--muted-foreground))",
40 | },
41 | accent: {
42 | DEFAULT: "hsl(var(--accent))",
43 | foreground: "hsl(var(--accent-foreground))",
44 | },
45 | popover: {
46 | DEFAULT: "hsl(var(--popover))",
47 | foreground: "hsl(var(--popover-foreground))",
48 | },
49 | card: {
50 | DEFAULT: "hsl(var(--card))",
51 | foreground: "hsl(var(--card-foreground))",
52 | },
53 | },
54 | borderRadius: {
55 | lg: "var(--radius)",
56 | md: "calc(var(--radius) - 2px)",
57 | sm: "calc(var(--radius) - 4px)",
58 | },
59 | keyframes: {
60 | "accordion-down": {
61 | from: { height: 0 },
62 | to: { height: "var(--radix-accordion-content-height)" },
63 | },
64 | "accordion-up": {
65 | from: { height: "var(--radix-accordion-content-height)" },
66 | to: { height: 0 },
67 | },
68 | },
69 | animation: {
70 | "accordion-down": "accordion-down 0.2s ease-out",
71 | "accordion-up": "accordion-up 0.2s ease-out",
72 | },
73 | },
74 | },
75 | plugins: [require("tailwindcss-animate")],
76 | }
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "bundler",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "incremental": true,
17 | "plugins": [
18 | {
19 | "name": "next"
20 | }
21 | ],
22 | "paths": {
23 | "@/*": ["./*"]
24 | }
25 | },
26 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
27 | "exclude": ["node_modules"]
28 | }
29 |
--------------------------------------------------------------------------------