diff --git a/package-lock.json b/package-lock.json
index a81d29e..079c0ab 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,17 +6,19 @@
"": {
"dependencies": {
"@inertiajs/vue3": "^2.3.7",
+ "@tanstack/vue-table": "^8.21.3",
"@vueuse/core": "^12.8.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"laravel-vite-plugin": "^3.0.0",
"lucide-vue-next": "^0.468.0",
- "reka-ui": "^2.6.1",
+ "reka-ui": "^2.9.6",
"tailwind-merge": "^3.2.0",
"tailwindcss": "^4.1.1",
"tw-animate-css": "^1.2.5",
"vue": "^3.5.13",
- "vue-input-otp": "^0.3.2"
+ "vue-input-otp": "^0.3.2",
+ "vue-sonner": "^2.0.9"
},
"devDependencies": {
"@eslint/js": "^9.39.4",
@@ -1236,6 +1238,19 @@
"vite": "^5.2.0 || ^6 || ^7 || ^8"
}
},
+ "node_modules/@tanstack/table-core": {
+ "version": "8.21.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz",
+ "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
"node_modules/@tanstack/virtual-core": {
"version": "3.13.23",
"resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.23.tgz",
@@ -1246,6 +1261,25 @@
"url": "https://github.com/sponsors/tannerlinsley"
}
},
+ "node_modules/@tanstack/vue-table": {
+ "version": "8.21.3",
+ "resolved": "https://registry.npmjs.org/@tanstack/vue-table/-/vue-table-8.21.3.tgz",
+ "integrity": "sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/table-core": "8.21.3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "vue": ">=3.2"
+ }
+ },
"node_modules/@tanstack/vue-virtual": {
"version": "3.13.23",
"resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.23.tgz",
@@ -2758,9 +2792,9 @@
}
},
"node_modules/defu": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
- "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
+ "version": "6.1.7",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
+ "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
"license": "MIT"
},
"node_modules/delayed-stream": {
@@ -5649,9 +5683,9 @@
}
},
"node_modules/reka-ui": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/reka-ui/-/reka-ui-2.9.2.tgz",
- "integrity": "sha512-/t4e6y1hcG+uDuRfpg6tbMz3uUEvRzNco6NeYTufoJeUghy5Iosxos5YL/p+ieAsid84sdMX9OrgDqpEuCJhBw==",
+ "version": "2.9.6",
+ "resolved": "https://registry.npmjs.org/reka-ui/-/reka-ui-2.9.6.tgz",
+ "integrity": "sha512-K6bL457owpvWONc7hsjFxo3HDC9s6IzhRqShW0w9JSKelPGfRbkHD558UQTn/NH1cvrXVHygKyC7fExFmRketg==",
"license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.6.13",
@@ -5662,7 +5696,7 @@
"@vueuse/core": "^14.1.0",
"@vueuse/shared": "^14.1.0",
"aria-hidden": "^1.2.4",
- "defu": "^6.1.4",
+ "defu": "^6.1.5",
"ohash": "^2.0.11"
},
"funding": {
@@ -6753,6 +6787,28 @@
"vue": "^3.2.0"
}
},
+ "node_modules/vue-sonner": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/vue-sonner/-/vue-sonner-2.0.9.tgz",
+ "integrity": "sha512-i6BokNlNDL93fpzNxN/LZSn6D6MzlO+i3qXt6iVZne3x1k7R46d5HlFB4P8tYydhgqOrRbIZEsnRd3kG7qGXyw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@nuxt/kit": "^4.0.3",
+ "@nuxt/schema": "^4.0.3",
+ "nuxt": "^4.0.3"
+ },
+ "peerDependenciesMeta": {
+ "@nuxt/kit": {
+ "optional": true
+ },
+ "@nuxt/schema": {
+ "optional": true
+ },
+ "nuxt": {
+ "optional": true
+ }
+ }
+ },
"node_modules/vue-tsc": {
"version": "2.2.12",
"resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz",
diff --git a/package.json b/package.json
index e221a50..dac3650 100644
--- a/package.json
+++ b/package.json
@@ -40,17 +40,19 @@
},
"dependencies": {
"@inertiajs/vue3": "^2.3.7",
+ "@tanstack/vue-table": "^8.21.3",
"@vueuse/core": "^12.8.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"laravel-vite-plugin": "^3.0.0",
"lucide-vue-next": "^0.468.0",
- "reka-ui": "^2.6.1",
+ "reka-ui": "^2.9.6",
"tailwind-merge": "^3.2.0",
"tailwindcss": "^4.1.1",
"tw-animate-css": "^1.2.5",
"vue": "^3.5.13",
- "vue-input-otp": "^0.3.2"
+ "vue-input-otp": "^0.3.2",
+ "vue-sonner": "^2.0.9"
},
"optionalDependencies": {
"@rollup/rollup-linux-x64-gnu": "4.9.5",
diff --git a/resources/css/app.css b/resources/css/app.css
index 6f9d1f5..4b67ee7 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -9,10 +9,13 @@
@theme inline {
--font-sans:
- Instrument Sans, ui-sans-serif, system-ui, sans-serif,
+ Inter, ui-sans-serif, system-ui, sans-serif,
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
'Noto Color Emoji';
+ --font-display:
+ Manrope, ui-sans-serif, system-ui, sans-serif;
+
--radius-lg: var(--radius);
--radius-md: calc(var(--radius) - 2px);
--radius-sm: calc(var(--radius) - 4px);
@@ -83,83 +86,83 @@
body,
html {
--font-sans:
- 'Instrument Sans', ui-sans-serif, system-ui, sans-serif,
+ 'Inter', ui-sans-serif, system-ui, sans-serif,
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
'Noto Color Emoji';
}
}
:root {
- --background: hsl(0 0% 100%);
- --foreground: hsl(0 0% 3.9%);
+ --background: hsl(120 10% 98%);
+ --foreground: hsl(120 5% 12%);
--card: hsl(0 0% 100%);
- --card-foreground: hsl(0 0% 3.9%);
+ --card-foreground: hsl(120 5% 12%);
--popover: hsl(0 0% 100%);
- --popover-foreground: hsl(0 0% 3.9%);
- --primary: hsl(0 0% 9%);
- --primary-foreground: hsl(0 0% 98%);
- --secondary: hsl(0 0% 92.1%);
- --secondary-foreground: hsl(0 0% 9%);
- --muted: hsl(0 0% 96.1%);
- --muted-foreground: hsl(0 0% 45.1%);
- --accent: hsl(0 0% 96.1%);
- --accent-foreground: hsl(0 0% 9%);
+ --popover-foreground: hsl(120 5% 12%);
+ --primary: hsl(107 80% 24%);
+ --primary-foreground: hsl(107 30% 97%);
+ --secondary: hsl(107 8% 91%);
+ --secondary-foreground: hsl(107 10% 18%);
+ --muted: hsl(107 8% 95%);
+ --muted-foreground: hsl(107 5% 42%);
+ --accent: hsl(107 10% 93%);
+ --accent-foreground: hsl(107 10% 18%);
--destructive: hsl(0 84.2% 60.2%);
--destructive-foreground: hsl(0 0% 98%);
- --border: hsl(0 0% 92.8%);
- --input: hsl(0 0% 89.8%);
- --ring: hsl(0 0% 3.9%);
- --chart-1: hsl(12 76% 61%);
+ --border: hsl(107 8% 90%);
+ --input: hsl(107 8% 87%);
+ --ring: hsl(107 80% 24%);
+ --chart-1: hsl(107 80% 30%);
--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.5rem;
- --sidebar-background: hsl(0 0% 98%);
- --sidebar-foreground: hsl(240 5.3% 26.1%);
- --sidebar-primary: hsl(0 0% 10%);
- --sidebar-primary-foreground: hsl(0 0% 98%);
- --sidebar-accent: hsl(0 0% 94%);
- --sidebar-accent-foreground: hsl(0 0% 30%);
- --sidebar-border: hsl(0 0% 91%);
- --sidebar-ring: hsl(217.2 91.2% 59.8%);
- --sidebar: hsl(0 0% 98%);
+ --radius: 0.625rem;
+ --sidebar-background: hsl(120 10% 97%);
+ --sidebar-foreground: hsl(120 5% 26%);
+ --sidebar-primary: hsl(107 80% 24%);
+ --sidebar-primary-foreground: hsl(107 30% 97%);
+ --sidebar-accent: hsl(107 10% 93%);
+ --sidebar-accent-foreground: hsl(107 10% 25%);
+ --sidebar-border: hsl(107 8% 90%);
+ --sidebar-ring: hsl(107 80% 24%);
+ --sidebar: hsl(120 10% 97%);
}
.dark {
- --background: hsl(0 0% 3.9%);
- --foreground: hsl(0 0% 98%);
- --card: hsl(0 0% 3.9%);
- --card-foreground: hsl(0 0% 98%);
- --popover: hsl(0 0% 3.9%);
- --popover-foreground: hsl(0 0% 98%);
- --primary: hsl(0 0% 98%);
- --primary-foreground: hsl(0 0% 9%);
- --secondary: hsl(0 0% 14.9%);
- --secondary-foreground: hsl(0 0% 98%);
- --muted: hsl(0 0% 16.08%);
- --muted-foreground: hsl(0 0% 63.9%);
- --accent: hsl(0 0% 14.9%);
- --accent-foreground: hsl(0 0% 98%);
+ --background: hsl(120 5% 6%);
+ --foreground: hsl(120 5% 95%);
+ --card: hsl(120 5% 8%);
+ --card-foreground: hsl(120 5% 95%);
+ --popover: hsl(120 5% 8%);
+ --popover-foreground: hsl(120 5% 95%);
+ --primary: hsl(107 70% 55%);
+ --primary-foreground: hsl(107 80% 8%);
+ --secondary: hsl(107 5% 16%);
+ --secondary-foreground: hsl(107 5% 90%);
+ --muted: hsl(107 5% 14%);
+ --muted-foreground: hsl(107 5% 60%);
+ --accent: hsl(107 8% 16%);
+ --accent-foreground: hsl(107 5% 90%);
--destructive: hsl(0 84% 60%);
--destructive-foreground: hsl(0 0% 98%);
- --border: hsl(0 0% 14.9%);
- --input: hsl(0 0% 14.9%);
- --ring: hsl(0 0% 83.1%);
- --chart-1: hsl(220 70% 50%);
+ --border: hsl(107 5% 16%);
+ --input: hsl(107 5% 16%);
+ --ring: hsl(107 70% 55%);
+ --chart-1: hsl(107 60% 45%);
--chart-2: hsl(160 60% 45%);
--chart-3: hsl(30 80% 55%);
--chart-4: hsl(280 65% 60%);
--chart-5: hsl(340 75% 55%);
- --sidebar-background: hsl(0 0% 7%);
- --sidebar-foreground: hsl(0 0% 95.9%);
- --sidebar-primary: hsl(360, 100%, 100%);
- --sidebar-primary-foreground: hsl(0 0% 100%);
- --sidebar-accent: hsl(0 0% 15.9%);
- --sidebar-accent-foreground: hsl(240 4.8% 95.9%);
- --sidebar-border: hsl(0 0% 15.9%);
- --sidebar-ring: hsl(217.2 91.2% 59.8%);
- --sidebar: hsl(240 5.9% 10%);
+ --sidebar-background: hsl(120 5% 7%);
+ --sidebar-foreground: hsl(120 5% 92%);
+ --sidebar-primary: hsl(107 70% 55%);
+ --sidebar-primary-foreground: hsl(107 80% 8%);
+ --sidebar-accent: hsl(107 8% 16%);
+ --sidebar-accent-foreground: hsl(107 5% 88%);
+ --sidebar-border: hsl(107 5% 16%);
+ --sidebar-ring: hsl(107 70% 55%);
+ --sidebar: hsl(120 5% 7%);
}
@layer base {
diff --git a/resources/js/components/AppHeader.vue b/resources/js/components/AppHeader.vue
index ca3cb1c..0e1551f 100644
--- a/resources/js/components/AppHeader.vue
+++ b/resources/js/components/AppHeader.vue
@@ -1,6 +1,6 @@
-