chore: upgrade to Tailwind CSS v4

This commit is contained in:
ReaJason
2025-02-15 13:50:04 +08:00
parent f8624f0e72
commit 011f919e2a
5 changed files with 123 additions and 94 deletions
BIN
View File
Binary file not shown.
+26 -28
View File
@@ -13,50 +13,48 @@
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "1.9.4", "@biomejs/biome": "1.9.4",
"@tanstack/router-plugin": "^1.97.8", "@tanstack/router-plugin": "^1.104.1",
"@types/node": "^22.10.7", "@types/node": "^22.13.4",
"@types/react": "^19.0.7", "@types/react": "^19.0.8",
"@types/react-dom": "^19.0.3", "@types/react-dom": "^19.0.3",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.3.4",
"@types/react-copy-to-clipboard": "^5.0.7", "@types/react-copy-to-clipboard": "^5.0.7",
"@types/react-syntax-highlighter": "^15.5.13", "@types/react-syntax-highlighter": "^15.5.13",
"autoprefixer": "^10.4.20", "tailwindcss": "^4.0.6",
"postcss": "^8.5.1",
"tailwindcss": "^3.4.17",
"typescript": "^5.7.3", "typescript": "^5.7.3",
"vite": "^6.0.11" "vite": "^6.1.0"
}, },
"dependencies": { "dependencies": {
"@hookform/resolvers": "^3.10.0", "@hookform/resolvers": "^4.0.0",
"@radix-ui/react-alert-dialog": "^1.1.4", "@radix-ui/react-alert-dialog": "^1.1.6",
"@radix-ui/react-checkbox": "^1.1.3", "@radix-ui/react-checkbox": "^1.1.4",
"@radix-ui/react-dropdown-menu": "^2.1.4", "@radix-ui/react-dropdown-menu": "^2.1.6",
"@radix-ui/react-label": "^2.1.1", "@radix-ui/react-label": "^2.1.2",
"@radix-ui/react-radio-group": "^1.2.2", "@radix-ui/react-radio-group": "^1.2.3",
"@radix-ui/react-select": "^2.1.4", "@radix-ui/react-select": "^2.1.6",
"@radix-ui/react-separator": "^1.1.1", "@radix-ui/react-separator": "^1.1.2",
"@radix-ui/react-slot": "^1.1.1", "@radix-ui/react-slot": "^1.1.2",
"@radix-ui/react-switch": "^1.1.2", "@radix-ui/react-switch": "^1.1.3",
"@radix-ui/react-tabs": "^1.1.2", "@radix-ui/react-tabs": "^1.1.3",
"@radix-ui/react-tooltip": "^1.1.6", "@radix-ui/react-tooltip": "^1.1.8",
"@tanstack/react-query": "^5.64.2", "@tailwindcss/vite": "^4.0.6",
"@tanstack/react-router": "^1.97.8", "@tanstack/react-query": "^5.66.0",
"@tanstack/router-devtools": "^1.97.8", "@tanstack/react-router": "^1.104.1",
"@tanstack/router-devtools": "^1.104.3",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"i18next": "^24.2.1", "i18next": "^24.2.2",
"lucide-react": "^0.473.0", "lucide-react": "^0.475.0",
"next-themes": "^0.4.4",
"react": "^19.0.0", "react": "^19.0.0",
"react-copy-to-clipboard": "^5.1.0", "react-copy-to-clipboard": "^5.1.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"react-hook-form": "^7.54.2", "react-hook-form": "^7.54.2",
"react-i18next": "^15.4.0", "react-i18next": "^15.4.0",
"react-syntax-highlighter": "^15.6.1", "react-syntax-highlighter": "^15.6.1",
"sonner": "^1.7.2", "sonner": "^1.7.4",
"tailwind-merge": "^2.6.0", "tailwind-merge": "^3.0.1",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"zod": "^3.24.1" "zod": "^3.24.2"
}, },
"trustedDependencies": ["@biomejs/biome"] "trustedDependencies": ["@biomejs/biome"]
} }
-6
View File
@@ -1,6 +0,0 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
+95 -59
View File
@@ -1,68 +1,104 @@
@tailwind base; @import "tailwindcss";
@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.3rem;
}
.dark { @plugin "tailwindcss-animate";
--background: 240 10% 3.9%;
--foreground: 0 0% 98%; @custom-variant dark (&:is(.dark *));
--card: 240 10% 3.9%;
--card-foreground: 0 0% 98%; @theme {
--popover: 240 10% 3.9%; --font-sans: var(--font-geist-sans);
--popover-foreground: 0 0% 98%; --font-mono: var(--font-geist-mono);
--primary: 0 0% 98%; }
--primary-foreground: 240 5.9% 10%;
--secondary: 240 3.7% 15.9%; :root {
--secondary-foreground: 0 0% 98%; --background: hsl(0 0% 100%);
--muted: 240 3.7% 15.9%; --foreground: hsl(240 10% 3.9%);
--muted-foreground: 240 5% 64.9%; --card: hsl(0 0% 100%);
--accent: 240 3.7% 15.9%; --card-foreground: hsl(240 10% 3.9%);
--accent-foreground: 0 0% 98%; --popover: hsl(0 0% 100%);
--destructive: 0 62.8% 30.6%; --popover-foreground: hsl(240 10% 3.9%);
--destructive-foreground: 0 0% 98%; --primary: hsl(240 5.9% 10%);
--border: 240 3.7% 15.9%; --primary-foreground: hsl(0 0% 98%);
--input: 240 3.7% 15.9%; --secondary: hsl(240 4.8% 95.9%);
--ring: 240 4.9% 83.9%; --secondary-foreground: hsl(240 5.9% 10%);
--chart-1: 220 70% 50%; --muted: hsl(240 4.8% 95.9%);
--chart-2: 160 60% 45%; --muted-foreground: hsl(240 3.8% 46.1%);
--chart-3: 30 80% 55%; --accent: hsl(240 4.8% 95.9%);
--chart-4: 280 65% 60%; --accent-foreground: hsl(240 5.9% 10%);
--chart-5: 340 75% 55%; --destructive: hsl(0 84.2% 60.2%);
} --destructive-foreground: hsl(0 0% 98%);
--border: hsl(240 5.9% 90%);
--input: hsl(240 5.9% 90%);
--ring: hsl(240 10% 3.9%);
--chart-1: hsl(12 76% 61%);
--chart-2: hsl(173 58% 39%);
--chart-3: hsl(197 37% 24%);
--chart-4: hsl(43 74% 66%);
--chart-5: hsl(27 87% 67%);
--radius: 0.3rem;
}
.dark {
--background: hsl(240 10% 3.9%);
--foreground: hsl(0 0% 98%);
--card: hsl(240 10% 3.9%);
--card-foreground: hsl(0 0% 98%);
--popover: hsl(240 10% 3.9%);
--popover-foreground: hsl(0 0% 98%);
--primary: hsl(0 0% 98%);
--primary-foreground: hsl(240 5.9% 10%);
--secondary: hsl(240 3.7% 15.9%);
--secondary-foreground: hsl(0 0% 98%);
--muted: hsl(240 3.7% 15.9%);
--muted-foreground: hsl(240 5% 64.9%);
--accent: hsl(240 3.7% 15.9%);
--accent-foreground: hsl(0 0% 98%);
--destructive: hsl(0 62.8% 30.6%);
--destructive-foreground: hsl(0 0% 98%);
--border: hsl(240 3.7% 15.9%);
--input: hsl(240 3.7% 15.9%);
--ring: hsl(240 4.9% 83.9%);
--chart-1: hsl(220 70% 50%);
--chart-2: hsl(160 60% 45%);
--chart-3: hsl(30 80% 55%);
--chart-4: hsl(280 65% 60%);
--chart-5: hsl(340 75% 55%);
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--color-card: var(--card);
--color-card-foreground: var(--card-foreground);
--color-popover: var(--popover);
--color-popover-foreground: var(--popover-foreground);
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-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);
--color-input: var(--input);
--color-ring: var(--ring);
--color-chart-1: var(--chart-1);
--color-chart-2: var(--chart-2);
--color-chart-3: var(--chart-3);
--color-chart-4: var(--chart-4);
--color-chart-5: var(--chart-5);
--radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px);
--radius-lg: var(--radius);
--radius-xl: calc(var(--radius) + 4px);
} }
@layer base { @layer base {
* { * {
@apply border-border; @apply border-border outline-ring/50;
} }
body { body {
@apply bg-background text-foreground; @apply bg-background text-foreground;
} }
+2 -1
View File
@@ -1,11 +1,12 @@
import path from "node:path"; import path from "node:path";
import tailwindcss from "@tailwindcss/vite";
import { TanStackRouterVite } from "@tanstack/router-plugin/vite"; import { TanStackRouterVite } from "@tanstack/router-plugin/vite";
import react from "@vitejs/plugin-react"; import react from "@vitejs/plugin-react";
import { defineConfig } from "vite"; import { defineConfig } from "vite";
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
plugins: [TanStackRouterVite({}), react()], plugins: [TanStackRouterVite({}), react(), tailwindcss()],
resolve: { resolve: {
alias: { alias: {
"@": path.resolve(__dirname, "./src"), "@": path.resolve(__dirname, "./src"),