diff --git a/app/lib/utils.ts b/app/lib/utils.ts
index d084cca..c66a9d9 100644
--- a/app/lib/utils.ts
+++ b/app/lib/utils.ts
@@ -1,4 +1,5 @@
-import { type ClassValue, clsx } from "clsx"
+import type { ClassValue } from "clsx"
+import { clsx } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
diff --git a/app/pages/my.vue b/app/pages/my.vue
new file mode 100644
index 0000000..8f62b8b
--- /dev/null
+++ b/app/pages/my.vue
@@ -0,0 +1,3 @@
+
+
+
diff --git a/components.json b/components.json
index e9a945d..98ba1d6 100644
--- a/components.json
+++ b/components.json
@@ -1,17 +1,20 @@
{
"$schema": "https://shadcn-vue.com/schema.json",
- "style": "default",
+ "style": "new-york",
"typescript": true,
- "tsConfigPath": ".nuxt/tsconfig.json",
"tailwind": {
"config": "tailwind.config.js",
- "css": "assets/main.css",
+ "css": "app/assets/main.css",
"baseColor": "slate",
- "cssVariables": true
+ "cssVariables": true,
+ "prefix": ""
},
- "framework": "nuxt",
"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/i18n/i18n.config.ts b/i18n/i18n.config.ts
index cc982cc..b09e371 100644
--- a/i18n/i18n.config.ts
+++ b/i18n/i18n.config.ts
@@ -32,6 +32,7 @@ export default defineI18nConfig(() => ({
save: "Save",
delete: "Delete",
edit: "Edit",
+ close: "Close"
},
colors: {
label: "Color",
@@ -69,13 +70,14 @@ export default defineI18nConfig(() => ({
backToHome: "Back to home",
sidebarMenu: {
profile: "Profile",
+ projects: "Projects",
appearance: "Appearance",
language: "Language",
account: "Account",
login: "Log in",
logout: "Log out",
avatarFallback: "Profile",
- about: "About application",
+ about: "About",
},
dark: "Dark",
light: "Light",
@@ -383,6 +385,7 @@ export default defineI18nConfig(() => ({
save: "Sauvegarder",
delete: "Supprimer",
edit: "Modifier",
+ close: "Fermer"
},
colors: {
label: "Couleur",
@@ -420,6 +423,7 @@ export default defineI18nConfig(() => ({
backToHome: "Retourner à l'accueil",
sidebarMenu: {
profile: "Profil",
+ projects: "Projets",
appearance: "Apparence",
language: "Langue",
account: "Compte",
diff --git a/package.json b/package.json
index cf24d8b..d81809f 100644
--- a/package.json
+++ b/package.json
@@ -36,10 +36,12 @@
"nuxt": "^4.0.3",
"pinia": "^3.0.3",
"radix-vue": "^1.9.17",
+ "reka-ui": "^2.4.1",
"shadcn-nuxt": "^2.2.0",
"sortablejs": "^1.15.6",
"tailwind-merge": "^3.3.1",
"tailwindcss-animate": "^1.0.7",
+ "tw-animate-css": "^1.3.6",
"vue": "^3.5.18",
"vue-router": "^4.5.1",
"zod": "^4.0.15"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c6d255c..61c8d27 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -77,6 +77,9 @@ importers:
radix-vue:
specifier: ^1.9.17
version: 1.9.17(vue@3.5.18(typescript@5.9.2))
+ reka-ui:
+ specifier: ^2.4.1
+ version: 2.4.1(typescript@5.9.2)(vue@3.5.18(typescript@5.9.2))
shadcn-nuxt:
specifier: ^2.2.0
version: 2.2.0(magicast@0.3.5)
@@ -89,6 +92,9 @@ importers:
tailwindcss-animate:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@4.1.11)
+ tw-animate-css:
+ specifier: ^1.3.6
+ version: 1.3.6
vue:
specifier: ^3.5.18
version: 3.5.18(typescript@5.9.2)
@@ -2715,6 +2721,9 @@ packages:
'@vueuse/core@10.11.1':
resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
+ '@vueuse/core@12.8.2':
+ resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==}
+
'@vueuse/core@13.6.0':
resolution: {integrity: sha512-DJbD5fV86muVmBgS9QQPddVX7d9hWYswzlf4bIyUD2dj8GC46R1uNClZhVAmsdVts4xb2jwp1PbpuiA50Qee1A==}
peerDependencies:
@@ -2765,6 +2774,9 @@ packages:
'@vueuse/metadata@10.11.1':
resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
+ '@vueuse/metadata@12.8.2':
+ resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==}
+
'@vueuse/metadata@13.6.0':
resolution: {integrity: sha512-rnIH7JvU7NjrpexTsl2Iwv0V0yAx9cw7+clymjKuLSXG0QMcLD0LDgdNmXic+qL0SGvgSVPEpM9IDO/wqo1vkQ==}
@@ -2777,6 +2789,9 @@ packages:
'@vueuse/shared@10.11.1':
resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
+ '@vueuse/shared@12.8.2':
+ resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==}
+
'@vueuse/shared@13.6.0':
resolution: {integrity: sha512-pDykCSoS2T3fsQrYqf9SyF0QXWHmcGPQ+qiOVjlYSzlWd9dgppB2bFSM1GgKKkt7uzn0BBMV3IbJsUfHG2+BCg==}
peerDependencies:
@@ -5944,6 +5959,11 @@ packages:
rehype-sort-attributes@5.0.1:
resolution: {integrity: sha512-Bxo+AKUIELcnnAZwJDt5zUDDRpt4uzhfz9d0PVGhcxYWsbFj5Cv35xuWxu5r1LeYNFNhgGqsr9Q2QiIOM/Qctg==}
+ reka-ui@2.4.1:
+ resolution: {integrity: sha512-NB7DrCsODN8MH02BWtgiExygfFcuuZ5/PTn6fMgjppmFHqePvNhmSn1LEuF35nel6PFbA4v+gdj0IoGN1yZ+vw==}
+ peerDependencies:
+ vue: '>= 3.2.0'
+
remark-emoji@5.0.1:
resolution: {integrity: sha512-QCqTSvcZ65Ym+P+VyBKd4JfJfh7icMl7cIOGVmPMzWkDtdD8pQ0nQG7yxGolVIiMzSx90EZ7SwNiVpYpfTxn7w==}
engines: {node: '>=18'}
@@ -6485,6 +6505,9 @@ packages:
tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+ tw-animate-css@1.3.6:
+ resolution: {integrity: sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==}
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@@ -9885,6 +9908,15 @@ snapshots:
- '@vue/composition-api'
- vue
+ '@vueuse/core@12.8.2(typescript@5.9.2)':
+ dependencies:
+ '@types/web-bluetooth': 0.0.21
+ '@vueuse/metadata': 12.8.2
+ '@vueuse/shared': 12.8.2(typescript@5.9.2)
+ vue: 3.5.18(typescript@5.9.2)
+ transitivePeerDependencies:
+ - typescript
+
'@vueuse/core@13.6.0(vue@3.5.18(typescript@5.9.2))':
dependencies:
'@types/web-bluetooth': 0.0.21
@@ -9905,6 +9937,8 @@ snapshots:
'@vueuse/metadata@10.11.1': {}
+ '@vueuse/metadata@12.8.2': {}
+
'@vueuse/metadata@13.6.0': {}
'@vueuse/nuxt@13.6.0(magicast@0.3.5)(nuxt@4.0.3(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.2.0)(@vue/compiler-sfc@3.5.18)(better-sqlite3@12.2.0)(db0@0.3.2(better-sqlite3@12.2.0))(eslint@9.32.0(jiti@2.5.1))(ioredis@5.7.0)(lightningcss@1.30.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.46.2)(sass@1.90.0)(terser@5.43.1)(typescript@5.9.2)(vite@7.1.0(@types/node@24.2.0)(jiti@2.5.1)(lightningcss@1.30.1)(sass@1.90.0)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1))(vue@3.5.18(typescript@5.9.2))':
@@ -9925,6 +9959,12 @@ snapshots:
- '@vue/composition-api'
- vue
+ '@vueuse/shared@12.8.2(typescript@5.9.2)':
+ dependencies:
+ vue: 3.5.18(typescript@5.9.2)
+ transitivePeerDependencies:
+ - typescript
+
'@vueuse/shared@13.6.0(vue@3.5.18(typescript@5.9.2))':
dependencies:
vue: 3.5.18(typescript@5.9.2)
@@ -13755,6 +13795,23 @@ snapshots:
'@types/hast': 3.0.4
unist-util-visit: 5.0.0
+ reka-ui@2.4.1(typescript@5.9.2)(vue@3.5.18(typescript@5.9.2)):
+ dependencies:
+ '@floating-ui/dom': 1.7.3
+ '@floating-ui/vue': 1.1.8(vue@3.5.18(typescript@5.9.2))
+ '@internationalized/date': 3.8.2
+ '@internationalized/number': 3.6.4
+ '@tanstack/vue-virtual': 3.13.12(vue@3.5.18(typescript@5.9.2))
+ '@vueuse/core': 12.8.2(typescript@5.9.2)
+ '@vueuse/shared': 12.8.2(typescript@5.9.2)
+ aria-hidden: 1.2.6
+ defu: 6.1.4
+ ohash: 2.0.11
+ vue: 3.5.18(typescript@5.9.2)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - typescript
+
remark-emoji@5.0.1:
dependencies:
'@types/mdast': 4.0.4
@@ -14461,6 +14518,8 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
+ tw-animate-css@1.3.6: {}
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1