From f4c84e0e89f76648ff3c6d35f130195351b8b8ed Mon Sep 17 00:00:00 2001 From: Varun Raj Date: Sat, 17 Aug 2024 17:15:34 +0530 Subject: [PATCH] =?UTF-8?q?feat:=20initial=20setup=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Varun Raj --- .env.sample | 2 + .gitignore | 2 + bun.lockb | Bin 145532 -> 152774 bytes components.json | 17 ++++ package.json | 18 ++-- postcss.config.js | 6 ++ src/components/layouts/RootLayout.tsx | 23 ++++++ src/components/ui/button.tsx | 57 +++++++++++++ src/lib/utils.ts | 6 ++ src/pages/_app.tsx | 5 +- src/pages/index.tsx | 113 +------------------------- src/styles/globals.css | 33 -------- src/styles/globals.scss | 69 ++++++++++++++++ tailwind.config.ts | 90 +++++++++++++++++--- 14 files changed, 279 insertions(+), 162 deletions(-) create mode 100644 .env.sample create mode 100644 components.json create mode 100644 postcss.config.js create mode 100644 src/components/layouts/RootLayout.tsx create mode 100644 src/components/ui/button.tsx create mode 100644 src/lib/utils.ts delete mode 100644 src/styles/globals.css create mode 100644 src/styles/globals.scss diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..8826df7 --- /dev/null +++ b/.env.sample @@ -0,0 +1,2 @@ +IMMICH_URL="" +IMMICH_API_KEY="" \ No newline at end of file diff --git a/.gitignore b/.gitignore index fd3dbb5..b9f8d23 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +.env \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 4585f6631add8865d631c7a9c7da53207d0f0dc2..72082725d6200b770b997b407f12ce3c80ecdd6c 100755 GIT binary patch delta 33787 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 + {children} + + ) +} diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..0270f64 --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap 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", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..d084cca --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index a7a790f..75bf2e1 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -1,6 +1,7 @@ -import "@/styles/globals.css"; +import RootLayout from "@/components/layouts/RootLayout"; +import "@/styles/globals.scss"; import type { AppProps } from "next/app"; export default function App({ Component, pageProps }: AppProps) { - return ; + return } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 35ab434..8da11df 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,118 +1,13 @@ import Image from "next/image"; import { Inter } from "next/font/google"; +import { Button } from "@/components/ui/button"; const inter = Inter({ subsets: ["latin"] }); export default function Home() { return ( -
-
-

- Get started by editing  - src/pages/index.tsx -

- -
- -
- Next.js Logo -
- - -
+ ); } diff --git a/src/styles/globals.css b/src/styles/globals.css deleted file mode 100644 index 875c01e..0000000 --- a/src/styles/globals.css +++ /dev/null @@ -1,33 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -:root { - --foreground-rgb: 0, 0, 0; - --background-start-rgb: 214, 219, 220; - --background-end-rgb: 255, 255, 255; -} - -@media (prefers-color-scheme: dark) { - :root { - --foreground-rgb: 255, 255, 255; - --background-start-rgb: 0, 0, 0; - --background-end-rgb: 0, 0, 0; - } -} - -body { - color: rgb(var(--foreground-rgb)); - background: linear-gradient( - to bottom, - transparent, - rgb(var(--background-end-rgb)) - ) - rgb(var(--background-start-rgb)); -} - -@layer utilities { - .text-balance { - text-wrap: balance; - } -} diff --git a/src/styles/globals.scss b/src/styles/globals.scss new file mode 100644 index 0000000..bc0ea3d --- /dev/null +++ b/src/styles/globals.scss @@ -0,0 +1,69 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 0% 3.9%; + --radius: 0.5rem; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + } + + .dark { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + --ring: 0 0% 83.1%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/tailwind.config.ts b/tailwind.config.ts index e9a0944..a473989 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,20 +1,84 @@ -import type { Config } from "tailwindcss"; +import type { Config } from "tailwindcss" +import { fontFamily } from "tailwindcss/defaultTheme" -const config: Config = { +const config = { + darkMode: ["class"], content: [ - "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", - "./src/components/**/*.{js,ts,jsx,tsx,mdx}", - "./src/app/**/*.{js,ts,jsx,tsx,mdx}", - ], + './pages/**/*.{ts,tsx}', + './components/**/*.{ts,tsx}', + './app/**/*.{ts,tsx}', + './src/**/*.{ts,tsx}', + ], + prefix: "", theme: { + fontFamily: { + sans: ["var(--font-sans)", ...fontFamily.sans], + }, + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px", + }, + }, extend: { - backgroundImage: { - "gradient-radial": "radial-gradient(var(--tw-gradient-stops))", - "gradient-conic": - "conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))", + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", }, }, }, - plugins: [], -}; -export default config; + plugins: [require("tailwindcss-animate")], +} satisfies Config + +export default config \ No newline at end of file