184 lines
4.2 KiB
Plaintext
184 lines
4.2 KiB
Plaintext
---
|
|
title: Next.js
|
|
description: RetroUI ❤️ Next.js
|
|
lastUpdated: 6 Mar, 2024
|
|
---
|
|
|
|
### 1. Create Project
|
|
|
|
Run the init command to create a new Next.js project or to setup an existing one:
|
|
|
|
<CliCommand npmCommand="npx shadcn@latest init" />
|
|
|
|
<br />
|
|
|
|
### 2. Install utilities
|
|
|
|
If the `libs/utils.ts` file is not present in your project, you can install it using the following command:
|
|
|
|
<CliCommand npmCommand="npx shadcn@latest add https://retroui.dev/r/utils.json" />
|
|
|
|
<br />
|
|
|
|
### 3. That's it 🚀
|
|
|
|
Now you can start using RetroUI components in your project. You can install them through CLI or manually.
|
|
|
|
<br />
|
|
|
|
<ComponentInstall>
|
|
<ComponentInstall.Cli npmCommand="npx shadcn@latest add 'https://retroui.dev/r/button.json'" />
|
|
<ComponentInstall.Manual>
|
|
#### 1. Install dependencies:
|
|
|
|
```sh
|
|
npm install class-variance-authority
|
|
```
|
|
|
|
<br />
|
|
|
|
#### 2. Copy the code 👇 into your project:
|
|
|
|
<ComponentSource name="button" />
|
|
|
|
</ComponentInstall.Manual>
|
|
</ComponentInstall>
|
|
|
|
<br />
|
|
After installing the component in your project, you can then simply import it like this:
|
|
|
|
```tsx
|
|
import { Button } from "@/components/retroui/Button";
|
|
|
|
export default function ButtonExample() {
|
|
return <Button>Click Me!</Button>;
|
|
}
|
|
```
|
|
|
|
<br />
|
|
<br />
|
|
|
|
### Optional
|
|
|
|
You are free to pick your own fonts and theme, but if you'd like to use RetroUI theme then use the following guide.
|
|
|
|
<br />
|
|
|
|
#### 1. Add Fonts
|
|
|
|
We are using `Archivo Black` for headings and `Space Grotesk` for everything else. You can install them from Nextjs fonts or manually from Google fonts.
|
|
|
|
```tsx
|
|
import { Archivo_Black, Space_Grotesk } from "next/font/google";
|
|
|
|
const archivoBlack = Archivo_Black({
|
|
subsets: ["latin"],
|
|
weight: "400",
|
|
variable: "--font-head",
|
|
display: "swap",
|
|
});
|
|
|
|
const space = Space_Grotesk({
|
|
subsets: ["latin"],
|
|
weight: "400",
|
|
variable: "--font-sans",
|
|
display: "swap",
|
|
});
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
return (
|
|
<html lang="en">
|
|
<body className={`${archivoBlack.variable} ${space.variable}`}>
|
|
{children}
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|
|
```
|
|
|
|
<br />
|
|
|
|
#### 2. Add Theme
|
|
|
|
Save your theme as CSS variables in `global.css`:
|
|
|
|
```scss
|
|
@theme {
|
|
--font-head: var(--font-head);
|
|
--font-sans: var(--font-sans);
|
|
--radius: var(--radius);
|
|
|
|
--shadow-xs: 1px 1px 0 0 var(--border);
|
|
--shadow-sm: 2px 2px 0 0 var(--border);
|
|
--shadow: 3px 3px 0 0 var(--border);
|
|
--shadow-md: 4px 4px 0 0 var(--border);
|
|
--shadow-lg: 6px 6px 0 0 var(--border);
|
|
--shadow-xl: 10px 10px 0 1px var(--border);
|
|
--shadow-2xl: 16px 16px 0 1px var(--border);
|
|
|
|
--color-background: var(--background);
|
|
--color-foreground: var(--foreground);
|
|
--color-primary: var(--primary);
|
|
--color-primary-foreground: var(--primary-foreground);
|
|
--color-secondary: var(--secondary);
|
|
--color-secondary-foreground: var(--secondary-foreground);
|
|
--color-primary-hover: var(--primary-hover);
|
|
--color-card: var(--card);
|
|
--color-card-foreground: var(--card-foreground);
|
|
--color-muted: var(--muted);
|
|
--color-muted-foreground: var(--muted-foreground);
|
|
--color-accent: var(--accent);
|
|
--color-accent-foreground: var(--accent-foreground);
|
|
--color-destructive: var(--destructive);
|
|
--color-destructive-foreground: var(--destructive-foreground);
|
|
--color-border: var(--border);
|
|
}
|
|
|
|
:root {
|
|
--radius: 0;
|
|
--background: #fff;
|
|
--foreground: #000;
|
|
--card: #fff;
|
|
--card-foreground: #000;
|
|
--primary: #ffdb33;
|
|
--primary-hover: #ffcc00;
|
|
--primary-foreground: #000;
|
|
--secondary: #000;
|
|
--secondary-foreground: #fff;
|
|
--muted: #aeaeae;
|
|
--muted-foreground: #5a5a5a;
|
|
--accent: #fae583;
|
|
--accent-foreground: #000;
|
|
--destructive: #e63946;
|
|
--destructive-foreground: #fff;
|
|
--border: #000;
|
|
}
|
|
|
|
.dark {
|
|
--radius: 0;
|
|
--background: #1a1a1a;
|
|
--foreground: #f5f5f5;
|
|
--card: #242424;
|
|
--card-foreground: #f5f5f5;
|
|
--primary: #ffdb33;
|
|
--primary-hover: #ffcc00;
|
|
--primary-foreground: #000;
|
|
--secondary: #3a3a3a;
|
|
--secondary-foreground: #f5f5f5;
|
|
--muted: #3f3f46;
|
|
--muted-foreground: #a0a0a0;
|
|
--accent: #fae583;
|
|
--accent-foreground: #000;
|
|
--destructive: #e63946;
|
|
--destructive-foreground: #fff;
|
|
--border: #3a3a3a;
|
|
}
|
|
```
|
|
|
|
<br />
|
|
|
|
If you need any additional help, you can feel free to ask it in our Discord community. |