From 549f4e787b172613795b2ee6e32f475c46e1ef14 Mon Sep 17 00:00:00 2001 From: deechael Date: Wed, 18 Sep 2024 22:54:40 +0800 Subject: [PATCH] feat:init --- .eslintignore | 20 ++ .eslintrc.json | 92 +++++++ .gitignore | 35 +++ .npmrc | 1 + .vscode/settings.json | 3 + LICENSE | 21 ++ README.md | 53 ++++ app/about/layout.tsx | 13 + app/about/page.tsx | 9 + app/blog/layout.tsx | 13 + app/blog/page.tsx | 9 + app/docs/layout.tsx | 13 + app/docs/page.tsx | 9 + app/error.tsx | 31 +++ app/layout.tsx | 68 +++++ app/page.tsx | 64 +++++ app/pricing/layout.tsx | 13 + app/pricing/page.tsx | 9 + app/providers.tsx | 22 ++ components/counter.tsx | 14 ++ components/icons.tsx | 487 ++++++++++++++++++++++++++++++++++++ components/navbar.tsx | 141 +++++++++++ components/primitives.ts | 76 ++++++ components/theme-switch.tsx | 81 ++++++ config/fonts.ts | 11 + config/site.ts | 68 +++++ next.config.js | 4 + package.json | 56 +++++ postcss.config.js | 6 + public/avatar.jpg | Bin 0 -> 29262 bytes public/favicon.ico | Bin 0 -> 25931 bytes public/next.svg | 1 + public/vercel.svg | 1 + styles/globals.css | 3 + tailwind.config.js | 21 ++ tsconfig.json | 28 +++ types/index.ts | 5 + 37 files changed, 1501 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .vscode/settings.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/about/layout.tsx create mode 100644 app/about/page.tsx create mode 100644 app/blog/layout.tsx create mode 100644 app/blog/page.tsx create mode 100644 app/docs/layout.tsx create mode 100644 app/docs/page.tsx create mode 100644 app/error.tsx create mode 100644 app/layout.tsx create mode 100644 app/page.tsx create mode 100644 app/pricing/layout.tsx create mode 100644 app/pricing/page.tsx create mode 100644 app/providers.tsx create mode 100644 components/counter.tsx create mode 100644 components/icons.tsx create mode 100644 components/navbar.tsx create mode 100644 components/primitives.ts create mode 100644 components/theme-switch.tsx create mode 100644 config/fonts.ts create mode 100644 config/site.ts create mode 100644 next.config.js create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/avatar.jpg create mode 100644 public/favicon.ico create mode 100644 public/next.svg create mode 100644 public/vercel.svg create mode 100644 styles/globals.css create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 types/index.ts diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..af6ab76 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,20 @@ +.now/* +*.css +.changeset +dist +esm/* +public/* +tests/* +scripts/* +*.config.js +.DS_Store +node_modules +coverage +.next +build +!.commitlintrc.cjs +!.lintstagedrc.cjs +!jest.config.js +!plopfile.js +!react-shim.js +!tsup.config.ts \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..d3067d4 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,92 @@ +{ + "$schema": "https://json.schemastore.org/eslintrc.json", + "env": { + "browser": false, + "es2021": true, + "node": true + }, + "extends": [ + "plugin:react/recommended", + "plugin:prettier/recommended", + "plugin:react-hooks/recommended", + "plugin:jsx-a11y/recommended" + ], + "plugins": ["react", "unused-imports", "import", "@typescript-eslint", "jsx-a11y", "prettier"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 12, + "sourceType": "module" + }, + "settings": { + "react": { + "version": "detect" + } + }, + "rules": { + "no-console": "warn", + "react/prop-types": "off", + "react/jsx-uses-react": "off", + "react/react-in-jsx-scope": "off", + "react-hooks/exhaustive-deps": "off", + "jsx-a11y/click-events-have-key-events": "warn", + "jsx-a11y/interactive-supports-focus": "warn", + "prettier/prettier": "warn", + "no-unused-vars": "off", + "unused-imports/no-unused-vars": "off", + "unused-imports/no-unused-imports": "warn", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "args": "after-used", + "ignoreRestSiblings": false, + "argsIgnorePattern": "^_.*?$" + } + ], + "import/order": [ + "warn", + { + "groups": [ + "type", + "builtin", + "object", + "external", + "internal", + "parent", + "sibling", + "index" + ], + "pathGroups": [ + { + "pattern": "~/**", + "group": "external", + "position": "after" + } + ], + "newlines-between": "always" + } + ], + "react/self-closing-comp": "warn", + "react/jsx-sort-props": [ + "warn", + { + "callbacksLast": true, + "shorthandFirst": true, + "noSortAlphabetically": false, + "reservedFirst": true + } + ], + "padding-line-between-statements": [ + "warn", + {"blankLine": "always", "prev": "*", "next": "return"}, + {"blankLine": "always", "prev": ["const", "let", "var"], "next": "*"}, + { + "blankLine": "any", + "prev": ["const", "let", "var"], + "next": ["const", "let", "var"] + } + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f322f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# 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/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3662b37 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib" +} \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7f91f84 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Next UI + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..08df0a9 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# Next.js & NextUI Template + +This is a template for creating applications using Next.js 14 (app directory) and NextUI (v2). + +[Try it on CodeSandbox](https://githubbox.com/nextui-org/next-app-template) + +## Technologies Used + +- [Next.js 14](https://nextjs.org/docs/getting-started) +- [NextUI v2](https://nextui.org/) +- [Tailwind CSS](https://tailwindcss.com/) +- [Tailwind Variants](https://tailwind-variants.org) +- [TypeScript](https://www.typescriptlang.org/) +- [Framer Motion](https://www.framer.com/motion/) +- [next-themes](https://github.com/pacocoursey/next-themes) + +## How to Use + +### Use the template with create-next-app + +To create a new project based on this template using `create-next-app`, run the following command: + +```bash +npx create-next-app -e https://github.com/nextui-org/next-app-template +``` + +### Install dependencies + +You can use one of them `npm`, `yarn`, `pnpm`, `bun`, Example using `npm`: + +```bash +npm install +``` + +### Run the development server + +```bash +npm run dev +``` + +### Setup pnpm (optional) + +If you are using `pnpm`, you need to add the following code to your `.npmrc` file: + +```bash +public-hoist-pattern[]=*@nextui-org/* +``` + +After modifying the `.npmrc` file, you need to run `pnpm install` again to ensure that the dependencies are installed correctly. + +## License + +Licensed under the [MIT license](https://github.com/nextui-org/next-app-template/blob/main/LICENSE). diff --git a/app/about/layout.tsx b/app/about/layout.tsx new file mode 100644 index 0000000..98956a5 --- /dev/null +++ b/app/about/layout.tsx @@ -0,0 +1,13 @@ +export default function AboutLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( +
+
+ {children} +
+
+ ); +} diff --git a/app/about/page.tsx b/app/about/page.tsx new file mode 100644 index 0000000..c79c1e6 --- /dev/null +++ b/app/about/page.tsx @@ -0,0 +1,9 @@ +import { title } from "@/components/primitives"; + +export default function AboutPage() { + return ( +
+

About

+
+ ); +} diff --git a/app/blog/layout.tsx b/app/blog/layout.tsx new file mode 100644 index 0000000..911d0bc --- /dev/null +++ b/app/blog/layout.tsx @@ -0,0 +1,13 @@ +export default function BlogLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( +
+
+ {children} +
+
+ ); +} diff --git a/app/blog/page.tsx b/app/blog/page.tsx new file mode 100644 index 0000000..c6d0c65 --- /dev/null +++ b/app/blog/page.tsx @@ -0,0 +1,9 @@ +import { title } from "@/components/primitives"; + +export default function BlogPage() { + return ( +
+

Blog

+
+ ); +} diff --git a/app/docs/layout.tsx b/app/docs/layout.tsx new file mode 100644 index 0000000..eaf63f3 --- /dev/null +++ b/app/docs/layout.tsx @@ -0,0 +1,13 @@ +export default function DocsLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( +
+
+ {children} +
+
+ ); +} diff --git a/app/docs/page.tsx b/app/docs/page.tsx new file mode 100644 index 0000000..4a2f19b --- /dev/null +++ b/app/docs/page.tsx @@ -0,0 +1,9 @@ +import { title } from "@/components/primitives"; + +export default function DocsPage() { + return ( +
+

Docs

+
+ ); +} diff --git a/app/error.tsx b/app/error.tsx new file mode 100644 index 0000000..9ed5104 --- /dev/null +++ b/app/error.tsx @@ -0,0 +1,31 @@ +"use client"; + +import { useEffect } from "react"; + +export default function Error({ + error, + reset, +}: { + error: Error; + reset: () => void; +}) { + useEffect(() => { + // Log the error to an error reporting service + /* eslint-disable no-console */ + console.error(error); + }, [error]); + + return ( +
+

Something went wrong!

+ +
+ ); +} diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000..2eee58d --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,68 @@ +import "@/styles/globals.css"; +import { Metadata, Viewport } from "next"; +import { Link } from "@nextui-org/link"; +import clsx from "clsx"; + +import { Providers } from "./providers"; + +import { siteConfig } from "@/config/site"; +import { fontSans } from "@/config/fonts"; + +export const metadata: Metadata = { + title: { + default: siteConfig.name, + template: `%s - ${siteConfig.name}`, + }, + description: siteConfig.description, + icons: { + icon: "/favicon.ico", + }, +}; + +export const viewport: Viewport = { + themeColor: [ + { media: "(prefers-color-scheme: light)", color: "white" }, + { media: "(prefers-color-scheme: dark)", color: "black" }, + ], +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( + + + DeeChael's Profile + + + +
+
+ {children} +
+
+ + Powered by +

+ NextUI +

+ +
+
+
+ + + ); +} diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 0000000..917349b --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,64 @@ +import { Link } from "@nextui-org/link"; +import { Avatar, Spacer } from "@nextui-org/react"; +import { button as buttonStyles } from "@nextui-org/theme"; + +import { siteConfig } from "@/config/site"; +import { title, subtitle } from "@/components/primitives"; +import { GithubIcon, TwitterIcon, MavenIcon, GiteaIcon } from "@/components/icons"; + +export default function Home() { + return ( +
+ +
+ +
+

DeeChael

+
+

+

+ non-professional  +

+

developer who 

+
+

knows 

+

Java

+

/

+

Kotlin

+

.

+
+
+ +
+ + + + + + + + + + + + +
+
+ ); +} diff --git a/app/pricing/layout.tsx b/app/pricing/layout.tsx new file mode 100644 index 0000000..dc3db6a --- /dev/null +++ b/app/pricing/layout.tsx @@ -0,0 +1,13 @@ +export default function PricingLayout({ + children, +}: { + children: React.ReactNode; +}) { + return ( +
+
+ {children} +
+
+ ); +} diff --git a/app/pricing/page.tsx b/app/pricing/page.tsx new file mode 100644 index 0000000..42e2333 --- /dev/null +++ b/app/pricing/page.tsx @@ -0,0 +1,9 @@ +import { title } from "@/components/primitives"; + +export default function PricingPage() { + return ( +
+

Pricing

+
+ ); +} diff --git a/app/providers.tsx b/app/providers.tsx new file mode 100644 index 0000000..9a1ac92 --- /dev/null +++ b/app/providers.tsx @@ -0,0 +1,22 @@ +"use client"; + +import * as React from "react"; +import { NextUIProvider } from "@nextui-org/system"; +import { useRouter } from "next/navigation"; +import { ThemeProvider as NextThemesProvider } from "next-themes"; +import { ThemeProviderProps } from "next-themes/dist/types"; + +export interface ProvidersProps { + children: React.ReactNode; + themeProps?: ThemeProviderProps; +} + +export function Providers({ children, themeProps }: ProvidersProps) { + const router = useRouter(); + + return ( + + {children} + + ); +} diff --git a/components/counter.tsx b/components/counter.tsx new file mode 100644 index 0000000..d16f862 --- /dev/null +++ b/components/counter.tsx @@ -0,0 +1,14 @@ +"use client"; + +import { useState } from "react"; +import { Button } from "@nextui-org/button"; + +export const Counter = () => { + const [count, setCount] = useState(0); + + return ( + + ); +}; diff --git a/components/icons.tsx b/components/icons.tsx new file mode 100644 index 0000000..fc261b1 --- /dev/null +++ b/components/icons.tsx @@ -0,0 +1,487 @@ +import * as React from "react"; + +import { IconSvgProps } from "@/types"; + +export const Logo: React.FC = ({ + size = 36, + width, + height, + ...props +}) => ( + + + +); + +export const DiscordIcon: React.FC = ({ + size = 24, + width, + height, + ...props +}) => { + return ( + + + + ); +}; + +export const TwitterIcon: React.FC = ({ + size = 24, + width, + height, + ...props +}) => { + return ( + + + + ); +}; + +export const GithubIcon: React.FC = ({ + size = 24, + width, + height, + ...props +}) => { + return ( + + + + ); +}; + +export const GiteaIcon: React.FC = ({ + size = 24, + width, + height, + ...props +}) => { + return ( + + + + ); +}; + +export const MavenIcon: React.FC = ({ + size = 24, + width, + height, + ...props +}) => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export const MoonFilledIcon = ({ + size = 24, + width, + height, + ...props +}: IconSvgProps) => ( + +); + +export const SunFilledIcon = ({ + size = 24, + width, + height, + ...props +}: IconSvgProps) => ( + +); + +export const HeartFilledIcon = ({ + size = 24, + width, + height, + ...props +}: IconSvgProps) => ( + +); + +export const SearchIcon = (props: IconSvgProps) => ( + +); + +export const NextUILogo: React.FC = (props) => { + const { width, height = 40 } = props; + + return ( + + + + + + ); +}; diff --git a/components/navbar.tsx b/components/navbar.tsx new file mode 100644 index 0000000..f9c216c --- /dev/null +++ b/components/navbar.tsx @@ -0,0 +1,141 @@ +import { + Navbar as NextUINavbar, + NavbarContent, + NavbarMenu, + NavbarMenuToggle, + NavbarBrand, + NavbarItem, + NavbarMenuItem, +} from "@nextui-org/navbar"; +import { Button } from "@nextui-org/button"; +import { Kbd } from "@nextui-org/kbd"; +import { Link } from "@nextui-org/link"; +import { Input } from "@nextui-org/input"; +import { link as linkStyles } from "@nextui-org/theme"; +import NextLink from "next/link"; +import clsx from "clsx"; + +import { siteConfig } from "@/config/site"; +import { ThemeSwitch } from "@/components/theme-switch"; +import { + TwitterIcon, + GithubIcon, + DiscordIcon, + HeartFilledIcon, + SearchIcon, + Logo, +} from "@/components/icons"; + +export const Navbar = () => { + const searchInput = ( + + K + + } + labelPlacement="outside" + placeholder="Search..." + startContent={ + + } + type="search" + /> + ); + + return ( + + + + + +

ACME

+
+
+
    + {siteConfig.navItems.map((item) => ( + + + {item.label} + + + ))} +
+
+ + + + + + + + + + + + + + + {searchInput} + + + + + + + + + + + + + + + {searchInput} +
+ {siteConfig.navMenuItems.map((item, index) => ( + + + {item.label} + + + ))} +
+
+
+ ); +}; diff --git a/components/primitives.ts b/components/primitives.ts new file mode 100644 index 0000000..ec7d74b --- /dev/null +++ b/components/primitives.ts @@ -0,0 +1,76 @@ +import { tv } from "tailwind-variants"; + +export const title = tv({ + base: "tracking-tight inline font-semibold", + variants: { + color: { + violet: "from-[#FF1CF7] to-[#b249f8]", + yellow: "from-[#FF705B] to-[#FFB457]", + blue: "from-[#5EA2EF] to-[#0072F5]", + cyan: "from-[#00b7fa] to-[#01cfea]", + green: "from-[#6FEE8D] to-[#17c964]", + pink: "from-[#FF72E1] to-[#F54C7A]", + foreground: "dark:from-[#FFFFFF] dark:to-[#4B4B4B]", + }, + size: { + sm: "text-3xl lg:text-4xl", + md: "text-[2.3rem] lg:text-5xl leading-9", + lg: "text-4xl lg:text-6xl", + }, + fullWidth: { + true: "w-full block", + }, + }, + defaultVariants: { + size: "md", + }, + compoundVariants: [ + { + color: [ + "violet", + "yellow", + "blue", + "cyan", + "green", + "pink", + "foreground", + ], + class: "bg-clip-text text-transparent bg-gradient-to-b", + }, + ], +}); + +export const subtitle = tv({ + base: "w-full md:w-1/2 my-2 text-lg lg:text-xl text-default-600 block max-w-full inline", + variants: { + color: { + violet: "from-[#FF1CF7] to-[#b249f8]", + yellow: "from-[#FF705B] to-[#FFB457]", + blue: "from-[#5EA2EF] to-[#0072F5]", + cyan: "from-[#00b7fa] to-[#01cfea]", + green: "from-[#6FEE8D] to-[#17c964]", + pink: "from-[#FF72E1] to-[#F54C7A]", + foreground: "dark:from-[#FFFFFF] dark:to-[#4B4B4B]", + }, + fullWidth: { + true: "!w-full", + }, + }, + defaultVariants: { + fullWidth: true, + }, + compoundVariants: [ + { + color: [ + "violet", + "yellow", + "blue", + "cyan", + "green", + "pink", + "foreground", + ], + class: "bg-clip-text text-transparent bg-gradient-to-b", + }, + ], +}); diff --git a/components/theme-switch.tsx b/components/theme-switch.tsx new file mode 100644 index 0000000..55bcb0f --- /dev/null +++ b/components/theme-switch.tsx @@ -0,0 +1,81 @@ +"use client"; + +import { FC } from "react"; +import { VisuallyHidden } from "@react-aria/visually-hidden"; +import { SwitchProps, useSwitch } from "@nextui-org/switch"; +import { useTheme } from "next-themes"; +import { useIsSSR } from "@react-aria/ssr"; +import clsx from "clsx"; + +import { SunFilledIcon, MoonFilledIcon } from "@/components/icons"; + +export interface ThemeSwitchProps { + className?: string; + classNames?: SwitchProps["classNames"]; +} + +export const ThemeSwitch: FC = ({ + className, + classNames, +}) => { + const { theme, setTheme } = useTheme(); + const isSSR = useIsSSR(); + + const onChange = () => { + theme === "light" ? setTheme("dark") : setTheme("light"); + }; + + const { + Component, + slots, + isSelected, + getBaseProps, + getInputProps, + getWrapperProps, + } = useSwitch({ + isSelected: theme === "light" || isSSR, + "aria-label": `Switch to ${theme === "light" || isSSR ? "dark" : "light"} mode`, + onChange, + }); + + return ( + + + + +
+ {!isSelected || isSSR ? ( + + ) : ( + + )} +
+
+ ); +}; diff --git a/config/fonts.ts b/config/fonts.ts new file mode 100644 index 0000000..0e7d9c9 --- /dev/null +++ b/config/fonts.ts @@ -0,0 +1,11 @@ +import { Fira_Code as FontMono, Inter as FontSans } from "next/font/google"; + +export const fontSans = FontSans({ + subsets: ["latin"], + variable: "--font-sans", +}); + +export const fontMono = FontMono({ + subsets: ["latin"], + variable: "--font-mono", +}); diff --git a/config/site.ts b/config/site.ts new file mode 100644 index 0000000..2da0ffd --- /dev/null +++ b/config/site.ts @@ -0,0 +1,68 @@ +export type SiteConfig = typeof siteConfig; + +export const siteConfig = { + name: "Next.js + NextUI", + description: "Make beautiful websites regardless of your design experience.", + navItems: [ + { + label: "Home", + href: "/", + }, + { + label: "Docs", + href: "/docs", + }, + { + label: "Pricing", + href: "/pricing", + }, + { + label: "Blog", + href: "/blog", + }, + { + label: "About", + href: "/about", + }, + ], + navMenuItems: [ + { + label: "Profile", + href: "/profile", + }, + { + label: "Dashboard", + href: "/dashboard", + }, + { + label: "Projects", + href: "/projects", + }, + { + label: "Team", + href: "/team", + }, + { + label: "Calendar", + href: "/calendar", + }, + { + label: "Settings", + href: "/settings", + }, + { + label: "Help & Feedback", + href: "/help-feedback", + }, + { + label: "Logout", + href: "/logout", + }, + ], + links: { + github: "https://github.com/DeeChael", + twitter: "https://x.com/DeerioChaelingo", + maven: "https://maven.deechael.net", + gitea: "https://git.deechael.net", + }, +}; diff --git a/next.config.js b/next.config.js new file mode 100644 index 0000000..767719f --- /dev/null +++ b/next.config.js @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {} + +module.exports = nextConfig diff --git a/package.json b/package.json new file mode 100644 index 0000000..3af6c7d --- /dev/null +++ b/package.json @@ -0,0 +1,56 @@ +{ + "name": "next-app-template", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "next dev --turbo", + "build": "next build", + "start": "next start", + "lint": "eslint . --ext .ts,.tsx -c .eslintrc.json --fix" + }, + "dependencies": { + "@nextui-org/button": "2.0.38", + "@nextui-org/code": "2.0.33", + "@nextui-org/input": "2.2.5", + "@nextui-org/kbd": "2.0.34", + "@nextui-org/link": "2.0.35", + "@nextui-org/listbox": "2.1.27", + "@nextui-org/navbar": "2.0.37", + "@nextui-org/react": "^2.4.8", + "@nextui-org/snippet": "2.0.43", + "@nextui-org/switch": "2.0.34", + "@nextui-org/system": "2.2.6", + "@nextui-org/theme": "2.2.11", + "@react-aria/ssr": "3.9.4", + "@react-aria/visually-hidden": "3.8.12", + "clsx": "2.1.1", + "framer-motion": "~11.1.1", + "intl-messageformat": "^10.5.0", + "next": "14.2.4", + "next-themes": "^0.2.1", + "react": "18.3.1", + "react-dom": "18.3.1" + }, + "devDependencies": { + "@types/node": "20.5.7", + "@types/react": "18.3.3", + "@types/react-dom": "18.3.0", + "@typescript-eslint/eslint-plugin": "7.2.0", + "@typescript-eslint/parser": "7.2.0", + "autoprefixer": "10.4.19", + "eslint": "^8.57.0", + "eslint-config-next": "14.2.1", + "eslint-config-prettier": "^8.2.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.23.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-unused-imports": "^3.2.0", + "postcss": "8.4.38", + "tailwind-variants": "0.1.20", + "tailwindcss": "3.4.3", + "typescript": "5.0.4" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/public/avatar.jpg b/public/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cfcaa6931b26a45c143ba2f434fa5b806bec260 GIT binary patch literal 29262 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 J3Hvwo{{YUk>P-Lu literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/public/next.svg b/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg new file mode 100644 index 0000000..d2f8422 --- /dev/null +++ b/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/styles/globals.css b/styles/globals.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/styles/globals.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..573fa4c --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,21 @@ +import {nextui} from '@nextui-org/theme' + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './components/**/*.{js,ts,jsx,tsx,mdx}', + './app/**/*.{js,ts,jsx,tsx,mdx}', + './node_modules/@nextui-org/theme/dist/**/*.{js,ts,jsx,tsx}' + ], + theme: { + extend: { + fontFamily: { + sans: ["var(--font-sans)"], + mono: ["var(--font-mono)"], + }, + }, + }, + darkMode: "class", + darkMode: "class", + plugins: [nextui()], +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e06a445 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/types/index.ts b/types/index.ts new file mode 100644 index 0000000..cece4a4 --- /dev/null +++ b/types/index.ts @@ -0,0 +1,5 @@ +import { SVGProps } from "react"; + +export type IconSvgProps = SVGProps & { + size?: number; +};