From 778342b40b304179ff9bb98387064bc42307aa9e Mon Sep 17 00:00:00 2001 From: ngc2207 Date: Tue, 12 Nov 2024 18:32:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0shadcn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lockb | Bin 180551 -> 182910 bytes components.json | 20 ++++++++++++++ package.json | 5 ++++ src/app/globals.css | 63 ++++++++++++++++++++++++++++++++++++++++++++ src/lib/utils.ts | 6 +++++ tailwind.config.ts | 60 +++++++++++++++++++++++++++++++++++------ 6 files changed, 146 insertions(+), 8 deletions(-) create mode 100644 components.json create mode 100644 src/lib/utils.ts diff --git a/bun.lockb b/bun.lockb index fbc62f5f50e63230f9cb0d6e07ce7e86023146c1..faef72173e2eed27c3871be14373b11c8521d17f 100755 GIT binary patch delta 36711 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 UliQlXZ?k5qIkqJXRxdR9e@_+eqyPW_ delta 35082 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 diff --git a/components.json b/components.json new file mode 100644 index 0000000..7a63543 --- /dev/null +++ b/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app/globals.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} \ No newline at end of file diff --git a/package.json b/package.json index 57fadb7..9d3f7d5 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,15 @@ "@monaco-editor/react": "^4.6.0", "@prisma/client": "5.22.0", "ai": "^3.4.33", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "lucide-react": "^0.456.0", "next": "15.0.2", "prisma": "^5.22.0", "react": "19.0.0-rc-02c0e824-20241028", "react-dom": "19.0.0-rc-02c0e824-20241028", + "tailwind-merge": "^2.5.4", + "tailwindcss-animate": "^1.0.7", "zod": "^3.23.8" }, "devDependencies": { diff --git a/src/app/globals.css b/src/app/globals.css index b5c61c9..89b55f8 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,3 +1,66 @@ @tailwind base; @tailwind components; @tailwind utilities; +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 240 10% 3.9%; + --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%; + --radius: 0.5rem + } + .dark { + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 240 5.9% 10%; + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --ring: 240 4.9% 83.9%; + --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; + } +} diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/tailwind.config.ts b/tailwind.config.ts index 021c393..0aecfcc 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -1,19 +1,63 @@ import type { Config } from "tailwindcss"; const config: Config = { - content: [ + darkMode: ["class"], + content: [ "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", "./src/components/**/*.{js,ts,jsx,tsx,mdx}", "./src/app/**/*.{js,ts,jsx,tsx,mdx}", ], theme: { - extend: { - colors: { - background: "var(--background)", - foreground: "var(--foreground)", - }, - }, + extend: { + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + } + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + } + } }, - plugins: [], + plugins: [require("tailwindcss-animate")], }; export default config;