diff --git a/components.json b/components.json
index f91a261..91cdd29 100644
--- a/components.json
+++ b/components.json
@@ -1,8 +1,7 @@
{
"$schema": "https://shadcn-vue.com/schema.json",
- "style": "default",
+ "style": "new-york",
"typescript": true,
- "tsConfigPath": "./tsconfig.json",
"tailwind": {
"config": "tailwind.config.js",
"css": "src/assets/index.css",
@@ -10,9 +9,12 @@
"cssVariables": true,
"prefix": ""
},
- "framework": "vite",
"aliases": {
"components": "@/components",
- "utils": "@/lib/utils"
- }
+ "composables": "@/composables",
+ "utils": "@/lib/utils",
+ "ui": "@/components/ui",
+ "lib": "@/lib"
+ },
+ "iconLibrary": "lucide"
}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 157822f..91b3701 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -29,14 +29,14 @@
"devDependencies": {
"@tailwindcss/forms": "^0.5.10",
"@tailwindcss/typography": "^0.5.16",
- "@tailwindcss/vite": "^4.0.1",
- "@types/node": "^22.12.0",
+ "@tailwindcss/vite": "^4.0.12",
+ "@types/node": "^22.13.10",
"@types/rollup-plugin-visualizer": "^4.2.3",
"@vitejs/plugin-vue": "^5.2.1",
"@vue/tsconfig": "^0.7.0",
"rollup-plugin-visualizer": "^5.12.0",
"sharp": "^0.33.2",
- "tailwindcss": "^4.0.1",
+ "tailwindcss": "^4.0.12",
"typescript": "~5.6.2",
"vite": "^6.0.5",
"vite-plugin-image-optimizer": "^1.1.7",
@@ -3044,44 +3044,44 @@
}
},
"node_modules/@tailwindcss/node": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.1.tgz",
- "integrity": "sha512-lc+ly6PKHqgCVl7eO8D2JlV96Lks5bmL6pdtM6UasyUHLU2zmrOqU6jfgln120IVnCh3VC8GG/ca24xVTtSokw==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.12.tgz",
+ "integrity": "sha512-a6J11K1Ztdln9OrGfoM75/hChYPcHYGNYimqciMrvKXRmmPaS8XZTHhdvb5a3glz4Kd4ZxE1MnuFE2c0fGGmtg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "enhanced-resolve": "^5.18.0",
+ "enhanced-resolve": "^5.18.1",
"jiti": "^2.4.2",
- "tailwindcss": "4.0.1"
+ "tailwindcss": "4.0.12"
}
},
"node_modules/@tailwindcss/oxide": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.1.tgz",
- "integrity": "sha512-3z1SpWoDeaA6K6jd92CRrGyDghOcRILEgyWVHRhaUm/tcpiazwJpU9BSG0xB7GGGnl9capojaC+zme/nKsZd/w==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.12.tgz",
+ "integrity": "sha512-DWb+myvJB9xJwelwT9GHaMc1qJj6MDXRDR0CS+T8IdkejAtu8ctJAgV4r1drQJLPeS7mNwq2UHW2GWrudTf63A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10"
},
"optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.0.1",
- "@tailwindcss/oxide-darwin-arm64": "4.0.1",
- "@tailwindcss/oxide-darwin-x64": "4.0.1",
- "@tailwindcss/oxide-freebsd-x64": "4.0.1",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.1",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.0.1",
- "@tailwindcss/oxide-linux-arm64-musl": "4.0.1",
- "@tailwindcss/oxide-linux-x64-gnu": "4.0.1",
- "@tailwindcss/oxide-linux-x64-musl": "4.0.1",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.0.1",
- "@tailwindcss/oxide-win32-x64-msvc": "4.0.1"
+ "@tailwindcss/oxide-android-arm64": "4.0.12",
+ "@tailwindcss/oxide-darwin-arm64": "4.0.12",
+ "@tailwindcss/oxide-darwin-x64": "4.0.12",
+ "@tailwindcss/oxide-freebsd-x64": "4.0.12",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.12",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.0.12",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.0.12",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.0.12",
+ "@tailwindcss/oxide-linux-x64-musl": "4.0.12",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.0.12",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.0.12"
}
},
"node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.1.tgz",
- "integrity": "sha512-eP/rI9WaAElpeiiHDqGtDqga9iDsOClXxIqdHayHsw93F24F03b60CwgGhrGF9Io/EuWIpz3TMRhPVOLhoXivw==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.12.tgz",
+ "integrity": "sha512-dAXCaemu3mHLXcA5GwGlQynX8n7tTdvn5i1zAxRvZ5iC9fWLl5bGnjZnzrQqT7ttxCvRwdVf3IHUnMVdDBO/kQ==",
"cpu": [
"arm64"
],
@@ -3096,9 +3096,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.1.tgz",
- "integrity": "sha512-jZVUo0kNd1IjxdCYwg4dwegDNsq7PoUx4LM814RmgY3gfJ63Y6GlpJXHOpd5FLv1igpeZox5LzRk2oz8MQoJwQ==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.12.tgz",
+ "integrity": "sha512-vPNI+TpJQ7sizselDXIJdYkx9Cu6JBdtmRWujw9pVIxW8uz3O2PjgGGzL/7A0sXI8XDjSyRChrUnEW9rQygmJQ==",
"cpu": [
"arm64"
],
@@ -3113,9 +3113,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.1.tgz",
- "integrity": "sha512-E31wHiIf4LB0aKRohrS4U6XfFSACCL9ifUFfPQ16FhcBIL4wU5rcBidvWvT9TQFGPkpE69n5dyXUcqiMrnF/Ig==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.12.tgz",
+ "integrity": "sha512-RL/9jM41Fdq4Efr35C5wgLx98BirnrfwuD+zgMFK6Ir68HeOSqBhW9jsEeC7Y/JcGyPd3MEoJVIU4fAb7YLg7A==",
"cpu": [
"x64"
],
@@ -3130,9 +3130,9 @@
}
},
"node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.1.tgz",
- "integrity": "sha512-8/3ZKLMYqgAsBzTeczOKWtT4geF02g9S7cntY5gvqQZ4E0ImX724cHcZJi9k6fkE6aLbvwxxHxaShFvRxblwKQ==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.12.tgz",
+ "integrity": "sha512-7WzWiax+LguJcMEimY0Q4sBLlFXu1tYxVka3+G2M9KmU/3m84J3jAIV4KZWnockbHsbb2XgrEjtlJKVwHQCoRA==",
"cpu": [
"x64"
],
@@ -3147,9 +3147,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.1.tgz",
- "integrity": "sha512-EYjbh225klQfWzy6LeIAfdjHCK+p71yLV/GjdPNW47Bfkkq05fTzIhHhCgshUvNp78EIA33iQU+ktWpW06NgHw==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.12.tgz",
+ "integrity": "sha512-X9LRC7jjE1QlfIaBbXjY0PGeQP87lz5mEfLSVs2J1yRc9PSg1tEPS9NBqY4BU9v5toZgJgzKeaNltORyTs22TQ==",
"cpu": [
"arm"
],
@@ -3164,9 +3164,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.1.tgz",
- "integrity": "sha512-PrX2SwIqWNP5cYeSyQfrhbk4ffOM338T6CrEwIAGvLPoUZiklt19yknlsBme6bReSw7TSAMy+8KFdLLi5fcWNQ==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.12.tgz",
+ "integrity": "sha512-i24IFNq2402zfDdoWKypXz0ZNS2G4NKaA82tgBlE2OhHIE+4mg2JDb5wVfyP6R+MCm5grgXvurcIcKWvo44QiQ==",
"cpu": [
"arm64"
],
@@ -3181,9 +3181,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.1.tgz",
- "integrity": "sha512-iuoFGhKDojtfloi5uj6MIk4kxEOGcsAk/kPbZItF9Dp7TnzVhxo2U/718tXhxGrg6jSL3ST3cQHIjA6yw3OeXw==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.12.tgz",
+ "integrity": "sha512-LmOdshJBfAGIBG0DdBWhI0n5LTMurnGGJCHcsm9F//ISfsHtCnnYIKgYQui5oOz1SUCkqsMGfkAzWyNKZqbGNw==",
"cpu": [
"arm64"
],
@@ -3198,9 +3198,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.1.tgz",
- "integrity": "sha512-pNUrGQYyE8RK+N9yvkPmHnlKDfFbni9A3lsi37u4RoA/6Yn+zWVoegvAQMZu3w+jqnpb2A/bYJ+LumcclUZ3yg==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.12.tgz",
+ "integrity": "sha512-OSK667qZRH30ep8RiHbZDQfqkXjnzKxdn0oRwWzgCO8CoTxV+MvIkd0BWdQbYtYuM1wrakARV/Hwp0eA/qzdbw==",
"cpu": [
"x64"
],
@@ -3215,9 +3215,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.1.tgz",
- "integrity": "sha512-xSGWaDcT6SJ75su9zWXj8GYb2jM/przXwZGH96RTS7HGDIoI1tvgpls88YajG5Sx7hXaqAWCufjw5L/dlu+lzg==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.12.tgz",
+ "integrity": "sha512-uylhWq6OWQ8krV8Jk+v0H/3AZKJW6xYMgNMyNnUbbYXWi7hIVdxRKNUB5UvrlC3RxtgsK5EAV2i1CWTRsNcAnA==",
"cpu": [
"x64"
],
@@ -3232,9 +3232,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.1.tgz",
- "integrity": "sha512-BUNL2isUZ2yWnbplPddggJpZxsqGHPZ1RJAYpu63W4znUnKCzI4m/jiy0WpyYqqOKL9jDM5q0QdsQ9mc3aw5YQ==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.12.tgz",
+ "integrity": "sha512-XDLnhMoXZEEOir1LK43/gHHwK84V1GlV8+pAncUAIN2wloeD+nNciI9WRIY/BeFTqES22DhTIGoilSO39xDb2g==",
"cpu": [
"arm64"
],
@@ -3249,9 +3249,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.1.tgz",
- "integrity": "sha512-ZtcVu+XXOddGsPlvO5nh2fnbKmwly2C07ZB1lcYCf/b8qIWF04QY9o6vy6/+6ioLRfbp3E7H/ipFio38DZX4oQ==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.12.tgz",
+ "integrity": "sha512-I/BbjCLpKDQucvtn6rFuYLst1nfFwSMYyPzkx/095RE+tuzk5+fwXuzQh7T3fIBTcbn82qH/sFka7yPGA50tLw==",
"cpu": [
"x64"
],
@@ -3282,16 +3282,16 @@
}
},
"node_modules/@tailwindcss/vite": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.1.tgz",
- "integrity": "sha512-ZkwMBA7uR+nyrafIZI8ce3PduE0dDVFVmxmInCUPTN17Jgy6RfEPXzqtL5fz658eDDxKa5xZ+gmiTt+5AMD0pw==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.12.tgz",
+ "integrity": "sha512-JM3gp601UJiryIZ9R2bSqalzcOy15RCybQ1Q+BJqDEwVyo4LkWKeqQAcrpHapWXY31OJFTuOUVBFDWMhzHm2Bg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@tailwindcss/node": "^4.0.1",
- "@tailwindcss/oxide": "^4.0.1",
+ "@tailwindcss/node": "4.0.12",
+ "@tailwindcss/oxide": "4.0.12",
"lightningcss": "^1.29.1",
- "tailwindcss": "4.0.1"
+ "tailwindcss": "4.0.12"
},
"peerDependencies": {
"vite": "^5.2.0 || ^6"
@@ -3338,9 +3338,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.12.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.12.0.tgz",
- "integrity": "sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==",
+ "version": "22.13.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz",
+ "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4514,9 +4514,9 @@
"license": "MIT"
},
"node_modules/enhanced-resolve": {
- "version": "5.18.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz",
- "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==",
+ "version": "5.18.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+ "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7444,9 +7444,9 @@
}
},
"node_modules/tailwindcss": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.1.tgz",
- "integrity": "sha512-UK5Biiit/e+r3i0O223bisoS5+y7ZT1PM8Ojn0MxRHzXN1VPZ2KY6Lo6fhu1dOfCfyUAlK7Lt6wSxowRabATBw==",
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.12.tgz",
+ "integrity": "sha512-bT0hJo91FtncsAMSsMzUkoo/iEU0Xs5xgFgVC9XmdM9bw5MhZuQFjPNl6wxAE0SiQF/YTZJa+PndGWYSDtuxAg==",
"license": "MIT"
},
"node_modules/tailwindcss-animate": {
diff --git a/package.json b/package.json
index b98c336..04068ae 100644
--- a/package.json
+++ b/package.json
@@ -31,14 +31,14 @@
"devDependencies": {
"@tailwindcss/forms": "^0.5.10",
"@tailwindcss/typography": "^0.5.16",
- "@tailwindcss/vite": "^4.0.1",
- "@types/node": "^22.12.0",
+ "@tailwindcss/vite": "^4.0.12",
+ "@types/node": "^22.13.10",
"@types/rollup-plugin-visualizer": "^4.2.3",
"@vitejs/plugin-vue": "^5.2.1",
"@vue/tsconfig": "^0.7.0",
"rollup-plugin-visualizer": "^5.12.0",
"sharp": "^0.33.2",
- "tailwindcss": "^4.0.1",
+ "tailwindcss": "^4.0.12",
"typescript": "~5.6.2",
"vite": "^6.0.5",
"vite-plugin-image-optimizer": "^1.1.7",
diff --git a/src/assets/index.css b/src/assets/index.css
index a5400ff..62e7972 100644
--- a/src/assets/index.css
+++ b/src/assets/index.css
@@ -4,104 +4,119 @@
@layer base {
:root {
/* Light theme */
- --background: rgb(231, 236, 254);
+ --background: 0 0% 100%;
--background: oklch(0.97 0.02 250);
- --foreground: rgb(75, 78, 104);
+ --foreground: 222.2 84% 4.9%;
--foreground: oklch(0.40 0.03 265);
- --card: rgb(226, 230, 242);
+ --card: 0 0% 100%;
--card: oklch(0.92 0.02 260);
- --card-foreground: rgb(75, 78, 104);
+ --card-foreground: 222.2 84% 4.9%;
--card-foreground: oklch(0.40 0.03 265);
- --popover: rgb(226, 230, 242);
+ --popover: 0 0% 100%;
--popover: oklch(0.92 0.02 260);
- --popover-foreground: rgb(75, 78, 104);
+ --popover-foreground: 222.2 84% 4.9%;
--popover-foreground: oklch(0.40 0.03 265);
- --primary: rgb(31, 102, 244);
+ --primary: 222.2 47.4% 11.2%;
--primary: oklch(0.60 0.20 260);
- --primary-foreground: rgb(231, 236, 254);
+ --primary-foreground: 210 40% 98%;
--primary-foreground: oklch(0.97 0.02 250);
- --secondary: rgb(212, 217, 228);
+ --secondary: 210 40% 96.1%;
--secondary: oklch(0.87 0.03 255);
- --secondary-foreground: rgb(75, 78, 104);
+ --secondary-foreground: 222.2 47.4% 11.2%;
--secondary-foreground: oklch(0.40 0.03 265);
- --muted: rgb(212, 217, 228);
+ --muted: 210 40% 96.1%;
--muted: oklch(0.87 0.03 255);
- --muted-foreground: rgb(115, 120, 141);
+ --muted-foreground: 215.4 16.3% 46.9%;
--muted-foreground: oklch(0.55 0.03 265);
- --accent: rgb(241, 127, 101);
+ --accent: 210 40% 96.1%;
--accent: oklch(0.70 0.15 30);
- --accent-foreground: rgb(231, 236, 254);
+ --accent-foreground: 222.2 47.4% 11.2%;
--accent-foreground: oklch(0.97 0.02 250);
- --destructive: rgb(210, 15, 57);
+ --destructive: 0 84.2% 60.2%;
--destructive: oklch(0.50 0.28 15);
- --destructive-foreground: rgb(231, 236, 254);
+ --destructive-foreground: 210 40% 98%;
--destructive-foreground: oklch(0.97 0.02 250);
- --border: rgb(197, 201, 216);
+ --border: 214.3 31.8% 91.4%;
--border: oklch(0.83 0.02 265);
- --input: rgb(197, 201, 216);
+ --input: 214.3 31.8% 91.4%;
--input: oklch(0.83 0.02 265);
- --ring: rgb(31, 102, 244);
+ --ring: 222.2 84% 4.9%;
--ring: oklch(0.60 0.20 260);
--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 {
/* Dark theme */
- --background: rgb(26, 32, 54);
+ --background: 222.2 84% 4.9%;
--background: oklch(0.25 0.05 265);
- --foreground: rgb(218, 226, 248);
+ --foreground: 210 40% 98%;
--foreground: oklch(0.90 0.03 260);
- --card: rgb(22, 27, 45);
+ --card: 222.2 84% 4.9%;
--card: oklch(0.20 0.05 265);
- --card-foreground: rgb(218, 226, 248);
+ --card-foreground: 210 40% 98%;
--card-foreground: oklch(0.90 0.03 260);
- --popover: rgb(22, 27, 45);
+ --popover: 222.2 84% 4.9%;
--popover: oklch(0.20 0.05 265);
- --popover-foreground: rgb(218, 226, 248);
+ --popover-foreground: 210 40% 98%;
--popover-foreground: oklch(0.90 0.03 260);
- --primary: rgb(127, 167, 249);
+ --primary: 210 40% 98%;
--primary: oklch(0.75 0.15 260);
- --primary-foreground: rgb(26, 32, 54);
+ --primary-foreground: 222.2 47.4% 11.2%;
--primary-foreground: oklch(0.25 0.05 265);
- --secondary: rgb(38, 46, 72);
+ --secondary: 217.2 32.6% 17.5%;
--secondary: oklch(0.30 0.06 265);
- --secondary-foreground: rgb(218, 226, 248);
+ --secondary-foreground: 210 40% 98%;
--secondary-foreground: oklch(0.90 0.03 260);
- --muted: rgb(38, 46, 72);
+ --muted: 217.2 32.6% 17.5%;
--muted: oklch(0.30 0.06 265);
- --muted-foreground: rgb(177, 186, 211);
+ --muted-foreground: 215 20.2% 65.1%;
--muted-foreground: oklch(0.78 0.06 265);
- --accent: rgb(255, 179, 164);
+ --accent: 217.2 32.6% 17.5%;
--accent: oklch(0.83 0.12 30);
- --accent-foreground: rgb(26, 32, 54);
+ --accent-foreground: 210 40% 98%;
--accent-foreground: oklch(0.25 0.05 265);
- --destructive: rgb(247, 130, 150);
+ --destructive: 0 62.8% 30.6%;
--destructive: oklch(0.75 0.18 15);
- --destructive-foreground: rgb(26, 32, 54);
+ --destructive-foreground: 210 40% 98%;
--destructive-foreground: oklch(0.25 0.05 265);
- --border: rgb(38, 46, 72);
+ --border: 217.2 32.6% 17.5%;
--border: oklch(0.30 0.06 265);
- --input: rgb(38, 46, 72);
+ --input: 217.2 32.6% 17.5%;
--input: oklch(0.30 0.06 265);
- --ring: rgb(127, 167, 249);
+ --ring: 212.7 26.8% 83.9%;
--ring: oklch(0.75 0.15 260);
+ --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%;
}
}
@@ -294,3 +309,11 @@
border-color: var(--destructive-foreground);
}
}
+@layer base {
+ * {
+ @apply border-border;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
diff --git a/src/components/ui/badge/Badge.vue b/src/components/ui/badge/Badge.vue
new file mode 100644
index 0000000..9ed8039
--- /dev/null
+++ b/src/components/ui/badge/Badge.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/src/components/ui/badge/index.ts b/src/components/ui/badge/index.ts
new file mode 100644
index 0000000..c2ba5fb
--- /dev/null
+++ b/src/components/ui/badge/index.ts
@@ -0,0 +1,25 @@
+import { cva, type VariantProps } from 'class-variance-authority'
+
+export { default as Badge } from './Badge.vue'
+
+export const badgeVariants = cva(
+ 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',
+ {
+ variants: {
+ variant: {
+ default:
+ 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',
+ secondary:
+ 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',
+ destructive:
+ 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',
+ outline: 'text-foreground',
+ },
+ },
+ defaultVariants: {
+ variant: 'default',
+ },
+ },
+)
+
+export type BadgeVariants = VariantProps
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index 2617904..4c51992 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -1,3 +1,5 @@
+import type { Updater } from '@tanstack/vue-table'
+import type { Ref } from 'vue'
import { type ClassValue, clsx } from 'clsx'
import { twMerge } from 'tailwind-merge'
@@ -5,11 +7,9 @@ export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
-export async function withTimeout(promise: Promise, timeoutMs: number = 10000): Promise {
- return Promise.race([
- promise,
- new Promise((_, reject) =>
- setTimeout(() => reject(new Error('Operation timed out')), timeoutMs)
- )
- ])
+export function valueUpdater>(updaterOrValue: T, ref: Ref) {
+ ref.value
+ = typeof updaterOrValue === 'function'
+ ? updaterOrValue(ref.value)
+ : updaterOrValue
}
diff --git a/tailwind.config.js b/tailwind.config.js
index 4ac5287..99791ef 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -2,7 +2,7 @@ const animate = require("tailwindcss-animate")
/** @type {import('tailwindcss').Config} */
module.exports = {
- darkMode: 'class',
+ darkMode: ['class', 'class'],
safelist: ["dark"],
prefix: "",
@@ -15,79 +15,95 @@ module.exports = {
],
theme: {
- container: {
- center: true,
- padding: "2rem",
- screens: {
- "2xl": "1400px",
- },
- },
- extend: {
- 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",
- },
- backgroundImage: {
- 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
- 'gradient-conic': 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
- },
- },
+ container: {
+ center: true,
+ padding: '2rem',
+ screens: {
+ '2xl': '1400px'
+ }
+ },
+ extend: {
+ 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))'
+ },
+ 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)'
+ },
+ 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'
+ },
+ backgroundImage: {
+ 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
+ 'gradient-conic': 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))'
+ }
+ }
},
plugins: [
animate,
require('@tailwindcss/forms'),
require('@tailwindcss/typography'),
- ],
+ require("tailwindcss-animate")
+],
future: {
hoverOnlyWhenSupported: true,
respectDefaultRingColorOpacity: true,
diff --git a/tsconfig.app.json b/tsconfig.app.json
index 49003fa..1af5834 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -11,9 +11,10 @@
// shadcn
"baseUrl": ".",
"paths": {
- "@/*": [
- "./src/*"
- ]
+ "@/*": ["./src/*"],
+ "@/components/*": ["./src/components/*"],
+ "@/lib/*": ["./src/lib/*"],
+ "@/composables/*": ["./src/composables/*"]
}
},
"include": [