Index: .devcontainer/Dockerfile
===================================================================
--- .devcontainer/Dockerfile	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ .devcontainer/Dockerfile	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,27 @@
+FROM php:8.3-cli
+
+#instalira zavisnosti
+
+RUN apt-get update && apt-get install -y \
+    git \
+    curl \
+    libpng-dev \
+    libonig-dev \
+    libxml2-dev \
+    libpq-dev \
+    zip \
+    unzip
+
+#instalira php ekstenzii
+
+RUN docker-php-ext-install pdo pdo_pgsql mbstring exif pcntl bcmath
+
+#instalira node.js
+RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
+    && apt-get install -y nodejs
+
+#instalira composer
+COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
+
+#stava raboten direktorium
+WORKDIR /var/www/html
Index: .devcontainer/devcontainer.json
===================================================================
--- .devcontainer/devcontainer.json	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ .devcontainer/devcontainer.json	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,17 @@
+{
+  "name": "Pharma Export Dev Container",
+  "dockerComposeFile": "docker-compose.yml",
+  "service": "app",
+  "workspaceFolder": "/var/www/html",
+
+  "postCreateCommand": "cp .env.example .env && php artisan key:generate && php artisan migrate",
+
+  "customizations": {
+    "vscode": {
+      "extensions": [
+        "bmewburn.vscode-intelephense-client",
+        "vue.volar"
+      ]
+    }
+  }
+}
Index: .devcontainer/docker-compose.yml
===================================================================
--- .devcontainer/docker-compose.yml	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ .devcontainer/docker-compose.yml	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,26 @@
+services:
+    app:
+        build: .
+        volumes:
+            - ../:/var/www/html
+        ports:
+            - "8000:8000"
+            - "5173:5173"
+        depends_on:
+            - db
+        environment:
+            - DB_HOST=db
+            - DB_PORT=5432
+        command: bash -c "composer install && npm install && php artisan serve --host=0.0.0.0 --port=8000"
+
+    db:
+        image: postgres:16
+        environment:
+            - POSTGRES_DB=pgsql
+            - POSTGRES_USER=postgres
+            - POSTGRES_PASSWORD=secret
+        volumes:
+            - postgres_data:/var/lib/postgresql/data
+
+volumes:
+    postgres_data:
Index: .env.example
===================================================================
--- .env.example	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ .env.example	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,5 +1,5 @@
 APP_NAME=Laravel
 APP_ENV=local
-APP_KEY=$APP_KEY
+APP_KEY=
 APP_DEBUG=true
 APP_URL=http://localhost
@@ -21,14 +21,10 @@
 LOG_LEVEL=debug
 
-POSTGRES_DB=pharma-export
-POSTGRES_PASSWORD=password
-POSTGRES_USER=pharma-export
-
-DB_CONNECTION=pgsql
-DB_DATABASE=pharma-export
-DB_HOST=pharma-export-db
-DB_PASSWORD=password
-DB_PORT=5432
-DB_USERNAME=pharma-export
+DB_CONNECTION=sqlite
+# DB_HOST=127.0.0.1
+# DB_PORT=3306
+# DB_DATABASE=laravel
+# DB_USERNAME=root
+# DB_PASSWORD=
 
 SESSION_DRIVER=database
@@ -59,5 +55,5 @@
 MAIL_PASSWORD=null
 MAIL_FROM_ADDRESS="hello@example.com"
-MAIL_FROM_NAME='Pharma Export'
+MAIL_FROM_NAME="${APP_NAME}"
 
 AWS_ACCESS_KEY_ID=
@@ -67,7 +63,3 @@
 AWS_USE_PATH_STYLE_ENDPOINT=false
 
-VITE_APP_NAME='Pharma Export'
-
-INIT_USER_NAME="Default User"
-INIT_USER_EMAIL="admin@pharmaexport.com"
-INIT_USER_PASS="password"
+VITE_APP_NAME="${APP_NAME}"
Index: Dockerfile
===================================================================
--- Dockerfile	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ Dockerfile	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,25 +1,18 @@
-FROM node AS builder
+FROM php:8.2-fpm
 
-WORKDIR /app
-COPY package*.json .
-RUN npm install
+RUN apt-get update && apt-get install -y \
+    git \
+    unzip \
+    curl \
+    libpq-dev \
+    && docker-php-ext-install pdo_pgsql
+
+COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
+
+WORKDIR /var/www
+
 COPY . .
-RUN npm run build
 
-FROM php:fpm
+RUN composer install --no-dev --optimize-autoloader
 
-RUN apt update
-RUN apt install -y git unzip curl libpq-dev
-RUN docker-php-ext-install pdo_pgsql
-COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
-WORKDIR /var/www
-RUN rm -rf /var/www/html
-COPY . .
-COPY --from=builder /app/public/build ./public/build
-RUN composer install --no-dev --optimize-autoloader
-RUN composer require
-RUN chown -R www-data:www-data /var/www /var/www/storage /var/www/bootstrap/cache
-USER www-data
-
-COPY entrypoint.sh /
-ENTRYPOINT [ "/entrypoint.sh" ]
+RUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache
Index: stfile
===================================================================
--- Justfile	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-alias d := down
-alias l := logs
-alias r := restart
-alias u := up
-
-up *ARGS:
-  docker compose up --build -d {{ ARGS }}
-
-down *ARGS:
-  docker compose down {{ ARGS }}
-
-restart *ARGS:
-  docker compose down {{ ARGS }}
-  docker compose up --build -d {{ ARGS }}
-
-logs SERVICE:
-  docker compose logs {{ SERVICE }} -f
Index: README.md
===================================================================
--- README.md	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ README.md	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,7 +1,66 @@
-# PHARMA EXPORT
+<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
 
-```sh
-export APP_KEY=$(openssl rand -base64 32)
-envsubst <"./.env.example">"./.env"
-docker compose up --build -d
-```
+<p align="center">
+<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
+<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
+<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
+<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
+</p>
+
+## About Laravel
+
+Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
+
+- [Simple, fast routing engine](https://laravel.com/docs/routing).
+- [Powerful dependency injection container](https://laravel.com/docs/container).
+- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
+- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
+- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
+- [Robust background job processing](https://laravel.com/docs/queues).
+- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
+
+Laravel is accessible, powerful, and provides tools required for large, robust applications.
+
+## Learning Laravel
+
+Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
+
+You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch.
+
+If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
+
+## Laravel Sponsors
+
+We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
+
+### Premium Partners
+
+- **[Vehikl](https://vehikl.com/)**
+- **[Tighten Co.](https://tighten.co)**
+- **[WebReinvent](https://webreinvent.com/)**
+- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
+- **[64 Robots](https://64robots.com)**
+- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
+- **[Cyber-Duck](https://cyber-duck.co.uk)**
+- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
+- **[Jump24](https://jump24.co.uk)**
+- **[Redberry](https://redberry.international/laravel/)**
+- **[Active Logic](https://activelogic.com)**
+- **[byte5](https://byte5.de)**
+- **[OP.GG](https://op.gg)**
+
+## Contributing
+
+Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
+
+## Code of Conduct
+
+In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
+
+## Security Vulnerabilities
+
+If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
+
+## License
+
+The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
Index: app/Http/Controllers/Auth/AuthenticatedSessionController.php
===================================================================
--- app/Http/Controllers/Auth/AuthenticatedSessionController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/AuthenticatedSessionController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use App\Http\Requests\Auth\LoginRequest;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Route;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class AuthenticatedSessionController extends Controller
+{
+    /**
+     * Display the login view.
+     */
+    public function create(): Response
+    {
+        return Inertia::render('Auth/Login', [
+            'canResetPassword' => Route::has('password.request'),
+            'status' => session('status'),
+        ]);
+    }
+
+    /**
+     * Handle an incoming authentication request.
+     */
+    public function store(LoginRequest $request): RedirectResponse
+    {
+        $request->authenticate();
+
+        $request->session()->regenerate();
+
+        return redirect()->intended(route('dashboard', absolute: false));
+    }
+
+    /**
+     * Destroy an authenticated session.
+     */
+    public function destroy(Request $request): RedirectResponse
+    {
+        Auth::guard('web')->logout();
+
+        $request->session()->invalidate();
+
+        $request->session()->regenerateToken();
+
+        return redirect('/');
+    }
+}
Index: app/Http/Controllers/Auth/ConfirmablePasswordController.php
===================================================================
--- app/Http/Controllers/Auth/ConfirmablePasswordController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/ConfirmablePasswordController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,41 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Validation\ValidationException;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class ConfirmablePasswordController extends Controller
+{
+    /**
+     * Show the confirm password view.
+     */
+    public function show(): Response
+    {
+        return Inertia::render('Auth/ConfirmPassword');
+    }
+
+    /**
+     * Confirm the user's password.
+     */
+    public function store(Request $request): RedirectResponse
+    {
+        if (! Auth::guard('web')->validate([
+            'email' => $request->user()->email,
+            'password' => $request->password,
+        ])) {
+            throw ValidationException::withMessages([
+                'password' => __('auth.password'),
+            ]);
+        }
+
+        $request->session()->put('auth.password_confirmed_at', time());
+
+        return redirect()->intended(route('dashboard', absolute: false));
+    }
+}
Index: app/Http/Controllers/Auth/EmailVerificationNotificationController.php
===================================================================
--- app/Http/Controllers/Auth/EmailVerificationNotificationController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/EmailVerificationNotificationController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+
+class EmailVerificationNotificationController extends Controller
+{
+    /**
+     * Send a new email verification notification.
+     */
+    public function store(Request $request): RedirectResponse
+    {
+        if ($request->user()->hasVerifiedEmail()) {
+            return redirect()->intended(route('dashboard', absolute: false));
+        }
+
+        $request->user()->sendEmailVerificationNotification();
+
+        return back()->with('status', 'verification-link-sent');
+    }
+}
Index: app/Http/Controllers/Auth/EmailVerificationPromptController.php
===================================================================
--- app/Http/Controllers/Auth/EmailVerificationPromptController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/EmailVerificationPromptController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,22 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class EmailVerificationPromptController extends Controller
+{
+    /**
+     * Display the email verification prompt.
+     */
+    public function __invoke(Request $request): RedirectResponse|Response
+    {
+        return $request->user()->hasVerifiedEmail()
+                    ? redirect()->intended(route('dashboard', absolute: false))
+                    : Inertia::render('Auth/VerifyEmail', ['status' => session('status')]);
+    }
+}
Index: app/Http/Controllers/Auth/NewPasswordController.php
===================================================================
--- app/Http/Controllers/Auth/NewPasswordController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/NewPasswordController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,69 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Auth\Events\PasswordReset;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Hash;
+use Illuminate\Support\Facades\Password;
+use Illuminate\Support\Str;
+use Illuminate\Validation\Rules;
+use Illuminate\Validation\ValidationException;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class NewPasswordController extends Controller
+{
+    /**
+     * Display the password reset view.
+     */
+    public function create(Request $request): Response
+    {
+        return Inertia::render('Auth/ResetPassword', [
+            'email' => $request->email,
+            'token' => $request->route('token'),
+        ]);
+    }
+
+    /**
+     * Handle an incoming new password request.
+     *
+     * @throws \Illuminate\Validation\ValidationException
+     */
+    public function store(Request $request): RedirectResponse
+    {
+        $request->validate([
+            'token' => 'required',
+            'email' => 'required|email',
+            'password' => ['required', 'confirmed', Rules\Password::defaults()],
+        ]);
+
+        // Here we will attempt to reset the user's password. If it is successful we
+        // will update the password on an actual user model and persist it to the
+        // database. Otherwise we will parse the error and return the response.
+        $status = Password::reset(
+            $request->only('email', 'password', 'password_confirmation', 'token'),
+            function ($user) use ($request) {
+                $user->forceFill([
+                    'password' => Hash::make($request->password),
+                    'remember_token' => Str::random(60),
+                ])->save();
+
+                event(new PasswordReset($user));
+            }
+        );
+
+        // If the password was successfully reset, we will redirect the user back to
+        // the application's home authenticated view. If there is an error we can
+        // redirect them back to where they came from with their error message.
+        if ($status == Password::PASSWORD_RESET) {
+            return redirect()->route('login')->with('status', __($status));
+        }
+
+        throw ValidationException::withMessages([
+            'email' => [trans($status)],
+        ]);
+    }
+}
Index: app/Http/Controllers/Auth/PasswordController.php
===================================================================
--- app/Http/Controllers/Auth/PasswordController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/PasswordController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Hash;
+use Illuminate\Validation\Rules\Password;
+
+class PasswordController extends Controller
+{
+    /**
+     * Update the user's password.
+     */
+    public function update(Request $request): RedirectResponse
+    {
+        $validated = $request->validate([
+            'current_password' => ['required', 'current_password'],
+            'password' => ['required', Password::defaults(), 'confirmed'],
+        ]);
+
+        $request->user()->update([
+            'password' => Hash::make($validated['password']),
+        ]);
+
+        return back();
+    }
+}
Index: app/Http/Controllers/Auth/PasswordResetLinkController.php
===================================================================
--- app/Http/Controllers/Auth/PasswordResetLinkController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/PasswordResetLinkController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Password;
+use Illuminate\Validation\ValidationException;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class PasswordResetLinkController extends Controller
+{
+    /**
+     * Display the password reset link request view.
+     */
+    public function create(): Response
+    {
+        return Inertia::render('Auth/ForgotPassword', [
+            'status' => session('status'),
+        ]);
+    }
+
+    /**
+     * Handle an incoming password reset link request.
+     *
+     * @throws \Illuminate\Validation\ValidationException
+     */
+    public function store(Request $request): RedirectResponse
+    {
+        $request->validate([
+            'email' => 'required|email',
+        ]);
+
+        // We will send the password reset link to this user. Once we have attempted
+        // to send the link, we will examine the response then see the message we
+        // need to show to the user. Finally, we'll send out a proper response.
+        $status = Password::sendResetLink(
+            $request->only('email')
+        );
+
+        if ($status == Password::RESET_LINK_SENT) {
+            return back()->with('status', __($status));
+        }
+
+        throw ValidationException::withMessages([
+            'email' => [trans($status)],
+        ]);
+    }
+}
Index: app/Http/Controllers/Auth/RegisteredUserController.php
===================================================================
--- app/Http/Controllers/Auth/RegisteredUserController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/RegisteredUserController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use App\Models\User;
+use Illuminate\Auth\Events\Registered;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Hash;
+use Illuminate\Validation\Rules;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class RegisteredUserController extends Controller
+{
+    /**
+     * Display the registration view.
+     */
+    public function create(): Response
+    {
+        return Inertia::render('Auth/Register');
+    }
+
+    /**
+     * Handle an incoming registration request.
+     *
+     * @throws \Illuminate\Validation\ValidationException
+     */
+    public function store(Request $request): RedirectResponse
+    {
+        $request->validate([
+            'name' => 'required|string|max:255',
+            'email' => 'required|string|lowercase|email|max:255|unique:'.User::class,
+            'password' => ['required', 'confirmed', Rules\Password::defaults()],
+        ]);
+
+        $user = User::create([
+            'name' => $request->name,
+            'email' => $request->email,
+            'password' => Hash::make($request->password),
+        ]);
+
+        event(new Registered($user));
+
+        Auth::login($user);
+
+        return redirect(route('dashboard', absolute: false));
+    }
+}
Index: app/Http/Controllers/Auth/VerifyEmailController.php
===================================================================
--- app/Http/Controllers/Auth/VerifyEmailController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/Auth/VerifyEmailController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Http\Controllers\Auth;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Auth\Events\Verified;
+use Illuminate\Foundation\Auth\EmailVerificationRequest;
+use Illuminate\Http\RedirectResponse;
+
+class VerifyEmailController extends Controller
+{
+    /**
+     * Mark the authenticated user's email address as verified.
+     */
+    public function __invoke(EmailVerificationRequest $request): RedirectResponse
+    {
+        if ($request->user()->hasVerifiedEmail()) {
+            return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
+        }
+
+        if ($request->user()->markEmailAsVerified()) {
+            event(new Verified($request->user()));
+        }
+
+        return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
+    }
+}
Index: p/Http/Controllers/AuthController.php
===================================================================
--- app/Http/Controllers/AuthController.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,89 +1,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Validator;
-use Inertia\Inertia;
-
-class AuthController extends Controller
-{
-    /**
-     * Display a listing of the resource.
-     */
-    public function login()
-    {
-        return Inertia::render('Auth/Login');
-    }
-    public function logout(Request $request)
-    {
-        Auth::logout();
-
-        $request->session()->invalidate();
-        $request->session()->regenerateToken();
-
-        return redirect()->route('login');
-    }
-    /**
-     * Store a newly created resource in storage.
-     */
-    public function storeLogin(Request $request)
-    {
-        $validator = Validator::make($request->all(), [
-            'email' => ['required', 'string', 'email'],
-            'password' => ['required', 'string'],
-        ]);
-
-        if ($validator->fails()) {
-            return back()->withErrors($validator->errors()->toArray());
-        }
-
-        $credentials = [
-            'email' => $request->email,
-            'password' => $request->password,
-        ];
-
-        if (Auth::attempt($credentials)) {
-            $request->session()->regenerate();
-
-            return redirect()->intended('/dashboard');
-        }
-
-        return back()->withErrors([
-            'email' => 'The provided credentials do not match our records.',
-        ]);
-    }
-
-    /**
-     * Display the specified resource.
-     */
-    public function show(string $id)
-    {
-        //
-    }
-
-    /**
-     * Show the form for editing the specified resource.
-     */
-    public function edit(string $id)
-    {
-        //
-    }
-
-    /**
-     * Update the specified resource in storage.
-     */
-    public function update(Request $request, string $id)
-    {
-        //
-    }
-
-    /**
-     * Remove the specified resource from storage.
-     */
-    public function destroy(string $id)
-    {
-        //
-    }
-}
Index: p/Http/Controllers/DashboardController.php
===================================================================
--- app/Http/Controllers/DashboardController.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,194 +1,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use App\Models\Payment;
-use App\Models\Order;
-use App\Models\Client;
-use App\Models\Product;
-use App\Models\Producer;
-use App\Models\Batch;
-use Illuminate\Support\Facades\DB;
-use Inertia\Inertia;
-
-class DashboardController extends Controller
-{
-    public function index()
-    {
-        $currentMonth = now()->month;
-        $currentYear = now()->year;
-        $previousMonth = now()->subMonth()->month;
-        $previousYear = now()->subYear()->year;
-
-        // Debug: Check if we have any payments
-        $totalPayments = Payment::where('payment_status', 'paid')->count();
-        $allPayments = Payment::where('payment_status', 'paid')->get();
-        $currentRevenue = Payment::where('payment_status', 'paid')
-            ->where(function($query) use ($currentMonth, $currentYear) {
-                $query->whereYear('payment_date', $currentYear)
-                    ->whereMonth('payment_date', $currentMonth);
-            })
-            ->sum('amount');
-
-
-        $previousRevenue = Payment::whereMonth('payment_date', now()->subMonth()->month)
-            ->whereYear('payment_date', now()->subMonth()->year)
-            ->where('payment_status', 'paid')
-            ->sum('amount');
-
-        $monthlyRevenue = Payment::select(
-            DB::raw("to_char(payment_date, 'YYYY-MM') as month"),
-            DB::raw('SUM(amount) as revenue')
-        )
-            ->where('payment_status', 'paid')
-            ->groupBy('month')
-            ->orderBy('month')
-            ->get()
-            ->map(fn($row) => [
-                'month' => $row->month,
-                'revenue' => (float) $row->revenue,
-            ]);
-
-
-        // 1. Top Buyers - Calculate from orders and order_batches
-        $topBuyers = Client::select(
-            'clients.id',
-            'clients.name as company_name',
-            DB::raw('COUNT(orders.id) as total_orders'),
-            DB::raw('COALESCE(SUM(order_batches.total_price), 0) as total_spent')
-        )
-            ->leftJoin('orders', 'clients.id', '=', 'orders.buyer_id')
-            ->leftJoin('order_batches', 'orders.id', '=', 'order_batches.order_id')
-            ->groupBy('clients.id', 'clients.name')
-            ->orderBy('total_spent', 'DESC')
-            ->orderBy('total_orders', 'DESC')
-            ->limit(5)
-            ->get();
-
-        // 2. Pending Orders - Calculate from orders and order_batches
-        $pendingOrders = Client::select(
-            'clients.id',
-            'clients.name as company_name',
-            DB::raw('COUNT(orders.id) as pending_orders'),
-            DB::raw('COALESCE(SUM(order_batches.total_price), 0) as total_pending_value')
-        )
-            ->leftJoin('orders', 'clients.id', '=', 'orders.buyer_id')
-            ->leftJoin('order_batches', 'orders.id', '=', 'order_batches.order_id')
-            ->where('orders.status', 'pending')
-            ->groupBy('clients.id', 'clients.name')
-            ->orderBy('total_pending_value', 'DESC')
-            ->limit(5)
-            ->get();
-
-        // 3. Orders by Country - Calculate from orders and order_batches
-        $ordersByCountry = Client::select(
-            'clients.country',
-            DB::raw('COUNT(orders.id) as total_orders'),
-            DB::raw('COALESCE(SUM(order_batches.total_price), 0) as total_revenue')
-        )
-            ->leftJoin('orders', 'clients.id', '=', 'orders.buyer_id')
-            ->leftJoin('order_batches', 'orders.id', '=', 'order_batches.order_id')
-            ->groupBy('clients.country')
-            ->orderBy('total_revenue', 'DESC')
-            ->get();
-
-        // 4. Best Selling Products - using order_batches
-        $bestSellingProducts = Product::select(
-            'products.id',
-            'products.name as product_name',
-            'producers.name as producer_name',
-            DB::raw('COUNT(DISTINCT order_batches.order_id) as times_ordered'),
-            DB::raw('COALESCE(SUM(order_batches.total_price), 0) as total_revenue')
-        )
-            ->join('producers', 'products.producer_id', '=', 'producers.id')
-            ->leftJoin('batches', 'products.id', '=', 'batches.product_id')
-            ->leftJoin('order_batches', 'batches.id', '=', 'order_batches.batch_id')
-            ->leftJoin('orders', 'order_batches.order_id', '=', 'orders.id')
-            ->groupBy('products.id', 'products.name', 'producers.name')
-            ->orderBy('total_revenue', 'DESC')
-            ->orderBy('times_ordered', 'DESC')
-            ->limit(5)
-            ->get();
-
-        // 5. Revenue by Producer - using order_batches
-        $revenueByProducer = Producer::select(
-            'producers.id',
-            'producers.name as company_name',
-            DB::raw('COALESCE(SUM(order_batches.total_price), 0) as total_revenue')
-        )
-            ->join('products', 'producers.id', '=', 'products.producer_id')
-            ->join('batches', 'products.id', '=', 'batches.product_id')
-            ->join('order_batches', 'batches.id', '=', 'order_batches.batch_id')
-            ->groupBy('producers.id', 'producers.name')
-            ->orderBy('total_revenue', 'DESC')
-            ->limit(5)
-            ->get();
-
-        // 6. Unpaid Orders (replaced Unpaid Invoices)
-        $unpaidOrders = Order::select(
-            'orders.id as order_key',
-            'orders.date as order_date',
-            'orders.status as order_status',
-            'payments.due_date as payment_due_date',
-            'payments.payment_status',
-            'clients.id as buyer_id',
-            'clients.name as buyer_name',
-            'clients.billing_address'
-        )
-            ->join('clients', 'orders.buyer_id', '=', 'clients.id')
-            ->leftJoin('payments', 'orders.id', '=', 'payments.order_id')
-            ->where(function($query) {
-                $query->where('payments.payment_status', '!=', 'paid')
-                    ->orWhereNull('payments.payment_status');
-            })
-            ->orderBy('payments.due_date', 'DESC')
-            ->limit(5)
-            ->get();
-
-        // 7. Payment Status Overview
-        $paymentStatusOverview = Payment::select(
-            'payment_status',
-            DB::raw('COUNT(*) as count_payments'),
-            DB::raw('SUM(amount) as total_amount'),
-            DB::raw('ROUND((COUNT(*) * 100.0 / (SELECT COUNT(*) FROM payments)), 2) as percentage_of_payments')
-        )
-            ->groupBy('payment_status')
-            ->orderBy('count_payments', 'DESC')
-            ->get();
-
-        // 8. Products with Poor Performance
-        $poorPerformingProducts = Product::select(
-            'products.id',
-            'products.name as product_name',
-            'producers.name as producer_name',
-            DB::raw('COUNT(DISTINCT order_batches.order_id) as order_count')
-        )
-            ->join('producers', 'products.producer_id', '=', 'producers.id')
-            ->leftJoin('batches', 'products.id', '=', 'batches.product_id')
-            ->leftJoin('order_batches', 'batches.id', '=', 'order_batches.batch_id')
-            ->leftJoin('orders', 'order_batches.order_id', '=', 'orders.id')
-            ->where(function($query) {
-                $query->where('orders.date', '>=', now()->subMonths(6))
-                    ->orWhereNull('orders.date');
-            })
-            ->groupBy('products.id', 'products.name', 'producers.name')
-            ->having(DB::raw('COUNT(DISTINCT order_batches.order_id)'), '<', 5)
-            ->orderBy('order_count', 'ASC')
-            ->limit(5)
-            ->get();
-
-        return Inertia::render('Dashboard', [
-            'currentRevenue' => (float) $currentRevenue,
-            'previousRevenue' => (float) $previousRevenue,
-            'monthlyRevenue' => $monthlyRevenue,
-            'topBuyers' => $topBuyers,
-            'pendingOrders' => $pendingOrders,
-            'ordersByCountry' => $ordersByCountry,
-            'bestSellingProducts' => $bestSellingProducts,
-            'revenueByProducer' => $revenueByProducer,
-            'unpaidOrders' => $unpaidOrders, // Changed from unpaidInvoices
-            'paymentStatusOverview' => $paymentStatusOverview,
-            'poorPerformingProducts' => $poorPerformingProducts,
-        ]);
-    }
-}
Index: p/Http/Controllers/GenericModelController.php
===================================================================
--- app/Http/Controllers/GenericModelController.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,317 +1,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use Illuminate\Http\Request;
-use Inertia\Inertia;
-use Illuminate\Support\Str;
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
-
-class GenericModelController extends Controller
-{
-    //helpers
-
-    protected function normalizeForeignKeys(array $data, $modelInstance): array
-    {
-        $fillable = $modelInstance->getFillable();
-
-        foreach ($fillable as $field) {
-            if (Str::endsWith($field, '_id') && isset($data[$field]) && is_array($data[$field])) {
-                // if frontend sent object instead of ID, extract it
-                $data[$field] = $data[$field]['id'] ?? null;
-            }
-        }
-
-        return $data;
-    }
-
-    public function index(Request $request, string $model)
-    {
-        // Remove the orders redirect - orders are now handled by OrderController directly
-        // if ($model === 'orders') {
-        //     return app(OrderController::class)->index($request);
-        // }
-
-        $modelClass = $this->getModelClass($model);
-        if (!$modelClass) {
-            abort(404, 'Model not found.');
-        }
-        $query = $modelClass::query();
-        $modelInstance = new $modelClass();
-        $fillable = $modelInstance->getFillable();
-
-        $relationships = $this->getRelationships($modelInstance);
-        if (!empty($relationships)) {
-            $query->with($relationships);
-        }
-
-        if ($request->has('search') && $request->search) {
-            $query->where(function ($q) use ($request, $fillable) {
-                foreach ($fillable as $field) {
-                    $q->orWhere($field, 'like', '%' . $request->search . '%');
-                }
-            });
-        }
-
-        $sortBy = $request->get('sort_by', 'created_at');
-        $sortDirection = $request->get('sort_direction', 'desc');
-        $query->orderBy($sortBy, $sortDirection);
-
-        $items = $query->paginate(
-            perPage: $request->get('per_page', 10),
-            page: $request->get('page', 1)
-        )->withQueryString();
-
-        $relatedOptions = $this->getRelatedOptions($modelInstance);
-
-        return Inertia::render('GenericModelPage', [
-            'model' => Str::singular(Str::studly($model)),
-            'items' => $items,
-            'filters' => [
-                'search' => $request->search,
-                'sort_by' => $sortBy,
-                'sort_direction' => $sortDirection,
-                'per_page' => $request->get('per_page', 10),
-                'open_id' => $request->get('open_id')
-            ],
-            'fkMap' => $this->getForeignKeyMap($modelInstance),
-            'relatedOptions' => $relatedOptions,
-        ]);
-    }
-
-    public function store(Request $request, string $model)
-    {
-        \Log::info('STORE - raw request payload', $request->all());
-        \Log::info('STORE - model param: ' . $model);
-
-        $modelClass = $this->getModelClass($model);
-        if (!$modelClass) {
-            abort(404, 'Model not found.');
-        }
-
-        $modelInstance = new $modelClass();
-
-        // -- TEMP: bypass validation for debugging --
-        // $validated = $request->validate($modelClass::getValidationRules());
-        $data = $request->all();
-
-        // If you have normalizeForeignKeys helper, use it. Otherwise inline simple normalization:
-        if (method_exists($this, 'normalizeForeignKeys')) {
-            $data = $this->normalizeForeignKeys($data, $modelInstance);
-        } else {
-            // simple inline normalization for objects like { producer: {id: 'uuid', name: 'X'} } -> producer_id
-            $fillable = $modelInstance->getFillable();
-            foreach ($fillable as $field) {
-                if (Str::endsWith($field, '_id') && isset($data[$field]) && is_array($data[$field])) {
-                    $data[$field] = $data[$field]['id'] ?? null;
-                }
-            }
-        }
-
-        \Log::info('STORE - normalized payload', $data);
-
-        try {
-            $created = $modelClass::create($data);
-            \Log::info('STORE - created record', ['id' => $created->id ?? null, 'model' => $model]);
-
-            return redirect()->route('generic.index', ['model' => $model])
-                ->with('success', Str::singular($model) . ' created successfully.');
-        } catch (\Throwable $e) {
-            \Log::error('STORE - DB error: ' . $e->getMessage(), ['exception' => $e]);
-
-            return redirect()->back()
-                ->withErrors(['error' => 'Failed to create ' . $model . ': ' . $e->getMessage()])
-                ->withInput();
-        }
-    }
-
-    public function update(Request $request, string $model, string $id)
-    {
-        \Log::info('UPDATE - raw request payload', $request->all());
-        \Log::info('UPDATE - model param: ' . $model . ' id: ' . $id);
-
-        $modelClass = $this->getModelClass($model);
-        if (!$modelClass) {
-            abort(404, 'Model not found.');
-        }
-
-        $item = $modelClass::findOrFail($id);
-
-        // -- TEMP: bypass validation for debugging --
-        // $validated = $request->validate($modelClass::getValidationRules($item->id));
-        $data = $request->all();
-
-        if (method_exists($this, 'normalizeForeignKeys')) {
-            $data = $this->normalizeForeignKeys($data, $item);
-        } else {
-            $fillable = $item->getFillable();
-            foreach ($fillable as $field) {
-                if (Str::endsWith($field, '_id') && isset($data[$field]) && is_array($data[$field])) {
-                    $data[$field] = $data[$field]['id'] ?? null;
-                }
-            }
-        }
-
-        \Log::info('UPDATE - normalized payload', $data);
-
-        try {
-            $item->update($data);
-            \Log::info('UPDATE - updated record', ['id' => $item->id]);
-
-            return redirect()->route('generic.index', ['model' => $model])
-                ->with('success', Str::singular($model) . ' updated successfully.');
-        } catch (\Throwable $e) {
-            \Log::error('UPDATE - DB error: ' . $e->getMessage(), ['exception' => $e]);
-
-            return redirect()->back()
-                ->withErrors(['error' => 'Failed to update ' . $model . ': ' . $e->getMessage()])
-                ->withInput();
-        }
-    }
-
-    public function destroy(string $model, string $id)
-    {
-        $modelClass = $this->getModelClass($model);
-        if (!$modelClass) {
-            abort(404, 'Model not found.');
-        }
-
-        $item = $modelClass::findOrFail($id);
-        $item->delete();
-
-        return redirect()->route('generic.index', ['model' => $model])
-            ->with('success', Str::singular($model) . ' deleted successfully.');
-    }
-
-    /**
-     * Helper to resolve the model class.
-     */
-    protected function getModelClass(string $model)
-    {
-        $modelClass = 'App\\Models\\' . Str::studly(Str::singular($model));
-        if (class_exists($modelClass)) {
-            return $modelClass;
-        }
-        return null;
-    }
-
-    /**
-     * Get relationships for eager loading based on foreign keys
-     */
-    protected function getRelationships($modelInstance): array
-    {
-        $relationships = [];
-        $fillable = $modelInstance->getFillable();
-
-        foreach ($fillable as $field) {
-            if (Str::endsWith($field, '_id')) {
-                $relationName = Str::beforeLast($field, '_id');
-
-                // Check if the relationship method exists
-                if (method_exists($modelInstance, $relationName)) {
-                    try {
-                        $relation = $modelInstance->$relationName();
-                        if ($relation instanceof BelongsTo) {
-                            $relationships[] = $relationName;
-                        }
-                    } catch (\Exception $e) {
-                        // Skip if the relationship doesn't exist or has issues
-                        continue;
-                    }
-                }
-            }
-        }
-
-        return $relationships;
-    }
-
-    /**
-     * Generate foreign key mapping for the frontend
-     */
-    protected function getForeignKeyMap($modelInstance): array
-    {
-        $fkMap = [];
-        $fillable = $modelInstance->getFillable();
-
-        foreach ($fillable as $field) {
-            if (Str::endsWith($field, '_id')) {
-                $relationName = Str::beforeLast($field, '_id');
-
-                // Map to plural table name (following Laravel conventions)
-                $tableName = Str::plural($relationName);
-                $fkMap[$field] = $tableName;
-            }
-        }
-
-        return $fkMap;
-    }
-
-    /**
-     * Get related options for foreign key fields with better field name detection
-     */
-    protected function getRelatedOptions($modelInstance): array
-    {
-        $options = [];
-        $fillable = $modelInstance->getFillable();
-
-        foreach ($fillable as $field) {
-            if (Str::endsWith($field, '_id')) {
-                $relationName = Str::beforeLast($field, '_id');
-
-                if (method_exists($modelInstance, $relationName)) {
-                    try {
-                        $relation = $modelInstance->$relationName();
-                        if ($relation instanceof BelongsTo) {
-                            $relatedModel = $relation->getRelated();
-
-                            // Get the first record to check available fields
-                            $sampleRecord = $relatedModel->first();
-                            $nameField = 'name';
-
-                            // Determine the best field to use for display
-                            if ($sampleRecord) {
-                                $fillableFields = $sampleRecord->getFillable();
-
-                                // Look for common display fields
-                                if (in_array('name', $fillableFields)) {
-                                    $nameField = 'name';
-                                } elseif (in_array('title', $fillableFields)) {
-                                    $nameField = 'title';
-                                } elseif (in_array('method', $fillableFields)) {
-                                    $nameField = 'method'; // For Payment model
-                                } elseif (in_array('code', $fillableFields)) {
-                                    $nameField = 'code';
-                                } else {
-                                    // Fallback to ID if no suitable field found
-                                    $nameField = 'id';
-                                }
-                            }
-
-                            $relatedItems = $relatedModel->all();
-
-                            $options[$field] = $relatedItems->map(function ($item) use ($nameField) {
-                                $displayValue = $item->{$nameField};
-
-                                // If using ID as display field, format it nicely
-                                if ($nameField === 'id') {
-                                    $displayValue = "#{$item->id}";
-                                }
-
-                                return [
-                                    'id' => $item->id,
-                                    'name' => $displayValue,
-                                ];
-                            })->values();
-                        }
-                    } catch (\Exception $e) {
-                        // Log the error and continue with other fields
-                        \Log::error("Failed to load related options for {$field}: " . $e->getMessage());
-                        continue;
-                    }
-                }
-            }
-        }
-
-        return $options;
-    }
-}
Index: app/Http/Controllers/HomeController.php
===================================================================
--- app/Http/Controllers/HomeController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/HomeController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,65 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use Inertia\Inertia;
+
+class HomeController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     */
+    public function index()
+    {
+        return Inertia::render('Home/Index');
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     */
+    public function show(string $id)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     */
+    public function edit(string $id)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     */
+    public function update(Request $request, string $id)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     */
+    public function destroy(string $id)
+    {
+        //
+    }
+}
Index: p/Http/Controllers/OrderController.php
===================================================================
--- app/Http/Controllers/OrderController.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,386 +1,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use App\Models\Order;
-use App\Models\Payment;
-use App\Models\Client;
-use App\Models\Transport;
-use App\Models\Batch;
-use Barryvdh\DomPDF\Facade\Pdf;
-use Illuminate\Http\Request;
-use Illuminate\Support\Facades\DB;
-use Inertia\Inertia;
-
-class OrderController extends Controller
-{
-    /**
-     * Display a listing of orders - This is called from GenericModelController
-     */
-    public function index(Request $request)
-    {
-        $model = 'Order';
-
-        $query = Order::with([
-            'buyer',
-            'receiver',
-            'transport',
-            'payment',
-            'batches' => function($query) {
-                $query->with('product');
-            }
-        ]);
-
-        if ($request->has('search') && $request->search) {
-            $search = $request->search;
-            $query->where(function($q) use ($search) {
-                $q->where('id', 'like', "%{$search}%")
-                    ->orWhere('status', 'like', "%{$search}%")
-                    ->orWhereHas('buyer', function($q) use ($search) {
-                        $q->where('name', 'like', "%{$search}%");
-                    })
-                    ->orWhereHas('receiver', function($q) use ($search) {
-                        $q->where('name', 'like', "%{$search}%");
-                    });
-            });
-        }
-
-        $sortBy = $request->get('sort_by', 'date');
-        $sortDirection = $request->get('sort_direction', 'desc');
-        $query->orderBy($sortBy, $sortDirection);
-
-        $perPage = $request->get('per_page', 10);
-        $items = $query->paginate($perPage);
-
-        $fkMap = [
-            'buyer_id' => 'clients',
-            'receiver_id' => 'clients',
-            'transport_id' => 'transports',
-        ];
-
-        $relatedOptions = [
-            'buyer_id' => Client::select('id', 'name')->get()->toArray(),
-            'receiver_id' => Client::select('id', 'name')->get()->toArray(),
-            'transport_id' => Transport::select('id', 'name')->get()->toArray(),
-        ];
-
-        // Get available batches for the create form
-        $availableBatches = Batch::with('product')->get()->map(function($batch) {
-            return [
-                'id' => $batch->id,
-                'batch_code' => $batch->batch_code,
-                'product_name' => $batch->product->name ?? 'N/A',
-                'units_per_batch' => $batch->units_per_batch,
-                'net_weight' => $batch->net_weight,
-            ];
-        });
-
-        return Inertia::render('OrderPage', [
-            'model' => $model,
-            'items' => $items,
-            'filters' => [
-                'search' => $request->search,
-                'sort_by' => $sortBy,
-                'sort_direction' => $sortDirection,
-                'per_page' => $perPage,
-                'open_id' => $request->open_id,
-            ],
-            'fkMap' => $fkMap,
-            'relatedOptions' => $relatedOptions,
-            'availableBatches' => $availableBatches,
-        ]);
-    }
-
-    /**
-     * Store a newly created order
-     */
-    public function store(Request $request)
-    {
-        $validated = $request->validate(Order::getValidationRules());
-
-        try {
-            DB::beginTransaction();
-
-            $order = Order::create($validated);
-
-            // Add batches if provided
-            if ($request->has('batches') && is_array($request->batches)) {
-                foreach ($request->batches as $batchData) {
-                    $order->batches()->attach($batchData['batch_id'], [
-                        'quantity' => $batchData['quantity'],
-                        'price_per_unit' => $batchData['price_per_unit'],
-                        'total_price' => $batchData['quantity'] * $batchData['price_per_unit']
-                    ]);
-                }
-            }
-
-            // Create payment if requested
-            if ($request->boolean('create_payment')) {
-                $totalAmount = 0;
-                if ($request->has('batches') && is_array($request->batches)) {
-                    foreach ($request->batches as $batchData) {
-                        $totalAmount += $batchData['quantity'] * $batchData['price_per_unit'];
-                    }
-                }
-
-                Payment::create([
-                    'order_id' => $order->id,
-                    'amount' => $totalAmount,
-                    'currency' => $request->get('payment_currency', 'USD'),
-                    'due_date' => $request->get('payment_due_date', now()->addDays(30)),
-                    'exchange_rate' => $request->get('payment_exchange_rate', 1.0),
-                    'payment_date' => null,
-                    'payment_method' => $request->get('payment_method', 'bank_transfer'),
-                    'payment_status' => 'pending'
-                ]);
-            }
-
-            DB::commit();
-
-            return redirect()->route('generic.index', ['model' => 'orders'])
-                ->with('success', 'Order created successfully.');
-
-        } catch (\Exception $e) {
-            DB::rollBack();
-            return back()->with('error', 'Failed to create order: ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Update an existing order
-     */
-    public function update(Request $request, Order $order)
-    {
-        $validated = $request->validate(Order::getValidationRules($order->id));
-
-        try {
-            DB::beginTransaction();
-
-            $order->update($validated);
-
-            // Update batches if provided
-            if ($request->has('batches')) {
-                $order->batches()->detach();
-                foreach ($request->batches as $batchData) {
-                    $order->batches()->attach($batchData['batch_id'], [
-                        'quantity' => $batchData['quantity'],
-                        'price_per_unit' => $batchData['price_per_unit'],
-                        'total_price' => $batchData['quantity'] * $batchData['price_per_unit']
-                    ]);
-                }
-            }
-
-            DB::commit();
-
-            return redirect()->route('generic.index', ['model' => 'orders'])
-                ->with('success', 'Order updated successfully.');
-
-        } catch (\Exception $e) {
-            DB::rollBack();
-            return back()->with('error', 'Failed to update order: ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Delete an order
-     */
-    public function destroy(Order $order)
-    {
-        try {
-            DB::beginTransaction();
-
-            $order->batches()->detach();
-            $order->delete();
-
-            DB::commit();
-
-            return redirect()->route('generic.index', ['model' => 'orders'])
-                ->with('success', 'Order deleted successfully.');
-
-        } catch (\Exception $e) {
-            DB::rollBack();
-            return back()->with('error', 'Failed to delete order: ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Generate and download invoice PDF for an order
-     */
-    public function generateInvoice(Order $order)
-    {
-        try {
-            // Load all necessary relationships
-            $order->load([
-                'buyer',
-                'receiver',
-                'transport',
-                'payment',
-                'batches.product'
-            ]);
-
-            // Calculate totals
-            $subtotal = $order->batches->sum(function($batch) {
-                return $batch->pivot->quantity * $batch->pivot->price_per_unit;
-            });
-
-            $taxRate = 18; // 18% tax - adjust as needed
-            $taxAmount = $subtotal * ($taxRate / 100);
-            $totalAmount = $subtotal + $taxAmount;
-
-            // Generate invoice number
-            $invoiceNumber = 'INV-' . date('Y') . '-' . str_pad($order->id, 6, '0', STR_PAD_LEFT);
-
-            // Prepare data for PDF
-            $data = [
-                'order' => $order,
-                'invoiceNumber' => $invoiceNumber,
-                'invoiceDate' => now()->format('Y-m-d'),
-                'dueDate' => now()->addDays(30)->format('Y-m-d'),
-                'subtotal' => number_format($subtotal, 2),
-                'taxRate' => $taxRate,
-                'taxAmount' => number_format($taxAmount, 2),
-                'totalAmount' => number_format($totalAmount, 2),
-                'currency' => $order->payment->currency ?? 'USD',
-            ];
-
-            // Generate PDF with proper headers for download
-            $pdf = Pdf::loadView('pdfs.invoice', $data)
-                ->setPaper('a4', 'portrait')
-                ->setOption('margin-top', 10)
-                ->setOption('margin-bottom', 10)
-                ->setOption('margin-left', 10)
-                ->setOption('margin-right', 10);
-
-            // Use download method with proper filename
-            return $pdf->download("invoice-{$invoiceNumber}.pdf");
-
-        } catch (\Exception $e) {
-            // If there's an error, redirect back with error message
-            return redirect()->back()->with('error', 'Failed to generate invoice: ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Generate and download packing list PDF for an order
-     */
-    public function generatePackingList(Order $order)
-    {
-        try {
-            // Load all necessary relationships
-            $order->load([
-                'buyer',
-                'receiver',
-                'transport',
-                'batches.product'
-            ]);
-
-            // Calculate total weight and units
-            $totalNetWeight = $order->batches->sum('net_weight');
-            $totalGrossWeight = $order->batches->sum('gross_weight');
-            $totalUnits = $order->batches->sum(function($batch) {
-                return $batch->pivot->quantity;
-            });
-            $totalPackages = $order->batches->count();
-
-            // Generate packing list number
-            $packingListNumber = 'PL-' . date('Y') . '-' . str_pad($order->id, 6, '0', STR_PAD_LEFT);
-
-            // Prepare data for PDF
-            $data = [
-                'order' => $order,
-                'packingListNumber' => $packingListNumber,
-                'packingDate' => now()->format('Y-m-d'),
-                'totalNetWeight' => number_format($totalNetWeight, 2),
-                'totalGrossWeight' => number_format($totalGrossWeight, 2),
-                'totalUnits' => $totalUnits,
-                'totalPackages' => $totalPackages,
-            ];
-
-            // Generate PDF
-            $pdf = Pdf::loadView('pdfs.packing-list', $data)
-                ->setPaper('a4', 'portrait')
-                ->setOption('margin-top', 10)
-                ->setOption('margin-bottom', 10)
-                ->setOption('margin-left', 10)
-                ->setOption('margin-right', 10);
-
-            // Download PDF
-            return $pdf->download("packing-list-{$packingListNumber}.pdf");
-
-        } catch (\Exception $e) {
-            return redirect()->back()->with('error', 'Failed to generate packing list: ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Preview invoice in browser (optional)
-     */
-    public function previewInvoice(Order $order)
-    {
-        try {
-            $order->load(['buyer', 'receiver', 'transport', 'payment', 'batches.product']);
-
-            $subtotal = $order->batches->sum(function($batch) {
-                return $batch->pivot->quantity * $batch->pivot->price_per_unit;
-            });
-
-            $taxRate = 18;
-            $taxAmount = $subtotal * ($taxRate / 100);
-            $totalAmount = $subtotal + $taxAmount;
-
-            $invoiceNumber = 'INV-' . date('Y') . '-' . str_pad($order->id, 6, '0', STR_PAD_LEFT);
-
-            $data = [
-                'order' => $order,
-                'invoiceNumber' => $invoiceNumber,
-                'invoiceDate' => now()->format('Y-m-d'),
-                'dueDate' => now()->addDays(30)->format('Y-m-d'),
-                'subtotal' => number_format($subtotal, 2),
-                'taxRate' => $taxRate,
-                'taxAmount' => number_format($taxAmount, 2),
-                'totalAmount' => number_format($totalAmount, 2),
-                'currency' => $order->payment->currency ?? 'USD',
-            ];
-
-            $pdf = Pdf::loadView('pdfs.invoice', $data);
-            return $pdf->stream("invoice-{$invoiceNumber}.pdf");
-
-        } catch (\Exception $e) {
-            return redirect()->back()->with('error', 'Failed to preview invoice: ' . $e->getMessage());
-        }
-    }
-
-    /**
-     * Preview packing list in browser (optional)
-     */
-    public function previewPackingList(Order $order)
-    {
-        try {
-            $order->load(['buyer', 'receiver', 'transport', 'batches.product']);
-
-            $totalNetWeight = $order->batches->sum('net_weight');
-            $totalGrossWeight = $order->batches->sum('gross_weight');
-            $totalUnits = $order->batches->sum(function($batch) {
-                return $batch->pivot->quantity;
-            });
-
-            $packingListNumber = 'PL-' . date('Y') . '-' . str_pad($order->id, 6, '0', STR_PAD_LEFT);
-
-            $data = [
-                'order' => $order,
-                'packingListNumber' => $packingListNumber,
-                'packingDate' => now()->format('Y-m-d'),
-                'totalNetWeight' => number_format($totalNetWeight, 2),
-                'totalGrossWeight' => number_format($totalGrossWeight, 2),
-                'totalUnits' => $totalUnits,
-                'totalPackages' => $order->batches->count(),
-            ];
-
-            $pdf = Pdf::loadView('pdfs.packing-list', $data);
-            return $pdf->stream("packing-list-{$packingListNumber}.pdf");
-
-        } catch (\Exception $e) {
-            return redirect()->back()->with('error', 'Failed to preview packing list: ' . $e->getMessage());
-        }
-    }
-}
Index: app/Http/Controllers/ProfileController.php
===================================================================
--- app/Http/Controllers/ProfileController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Http/Controllers/ProfileController.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Requests\ProfileUpdateRequest;
+use Illuminate\Contracts\Auth\MustVerifyEmail;
+use Illuminate\Http\RedirectResponse;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Redirect;
+use Inertia\Inertia;
+use Inertia\Response;
+
+class ProfileController extends Controller
+{
+    /**
+     * Display the user's profile form.
+     */
+    public function edit(Request $request): Response
+    {
+        return Inertia::render('Profile/Edit', [
+            'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
+            'status' => session('status'),
+        ]);
+    }
+
+    /**
+     * Update the user's profile information.
+     */
+    public function update(ProfileUpdateRequest $request): RedirectResponse
+    {
+        $request->user()->fill($request->validated());
+
+        if ($request->user()->isDirty('email')) {
+            $request->user()->email_verified_at = null;
+        }
+
+        $request->user()->save();
+
+        return Redirect::route('profile.edit');
+    }
+
+    /**
+     * Delete the user's account.
+     */
+    public function destroy(Request $request): RedirectResponse
+    {
+        $request->validate([
+            'password' => ['required', 'current_password'],
+        ]);
+
+        $user = $request->user();
+
+        Auth::logout();
+
+        $user->delete();
+
+        $request->session()->invalidate();
+        $request->session()->regenerateToken();
+
+        return Redirect::to('/');
+    }
+}
Index: p/Http/Middleware/AdminMiddleware.php
===================================================================
--- app/Http/Middleware/AdminMiddleware.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<?php
-
-namespace App\Http\Middleware;
-
-use Closure;
-use Illuminate\Http\Request;
-use Symfony\Component\HttpFoundation\Response;
-
-class AdminMiddleware
-{
-    public function handle(Request $request, Closure $next): Response
-    {
-        if (!auth()->check() || !auth()->user()->is_admin) {
-            abort(403, 'Unauthorized - Admins only');
-        }
-        return $next($request);
-    }
-}
Index: app/Http/Middleware/HandleInertiaRequests.php
===================================================================
--- app/Http/Middleware/HandleInertiaRequests.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ app/Http/Middleware/HandleInertiaRequests.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -33,12 +33,5 @@
             ...parent::share($request),
             'auth' => [
-                'user' => $request->user()
-                ? [
-                    'id' => $request->user()->id,
-                        'name' => $request->user()->name,
-                        'email' => $request->user()->email,
-                        'is_admin' => $request->user()->is_admin,
-                    ]
-                    : null,
+                'user' => $request->user(),
             ],
         ];
Index: p/Models/Batch.php
===================================================================
--- app/Models/Batch.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,71 +1,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Concerns\HasUuids;
-use Illuminate\Database\Eloquent\Factories\HasFactory;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
-use Illuminate\Database\Eloquent\Relations\BelongsToMany;
-use Illuminate\Validation\Rule;
-
-class Batch extends Model
-{
-    use HasFactory, HasUuids;
-
-    protected $primaryKey = 'id';
-    public $incrementing = false;
-    protected $keyType = 'string';
-
-    protected $fillable = [
-        'product_id',
-        'batch_code',
-        'production_date',
-        'expiration_date',
-        'net_weight',
-        'gross_weight',
-        'units_per_batch'
-    ];
-
-//    public static function getValidationRules($id = null): array
-//    {
-//        return [
-//            'product_id' => 'required|string|exists:products,id',
-//            'batch_code' => 'required|string|max:255|unique:batches,batch_code,' . $id,
-//            'production_date' => 'required|date|before_or_equal:today',
-//            'expiration_date' => 'required|date|after:production_date',
-//            'net_weight' => 'required|numeric|min:0|max:999999.99',
-//            'gross_weight' => 'required|numeric|min:0|max:999999.99|gte:net_weight',
-//            'units_per_batch' => 'required|integer|min:1|max:1000000',
-//        ];
-//    }
-    public static function getValidationRules($id = null): array
-    {
-        return [
-            'product_id' => 'required|string|exists:products,id',
-            'batch_code' => [
-                'required',
-                'string',
-                'max:255',
-                Rule::unique('batches')->ignore($id)
-            ],
-            'production_date' => 'required|date|before_or_equal:today',
-            'expiration_date' => 'required|date|after:production_date',
-            'net_weight' => 'required|numeric|min:0|max:999999.99',
-            'gross_weight' => 'required|numeric|min:0|max:999999.99|gte:net_weight',
-            'units_per_batch' => 'required|integer|min:1|max:1000000',
-        ];
-    }
-
-    public function product(): BelongsTo
-    {
-        return $this->belongsTo(Product::class);
-    }
-
-    public function orders(): BelongsToMany
-    {
-        return $this->belongsToMany(Order::class, 'order_batches')
-            ->withPivot('quantity', 'price_per_unit', 'total_price')
-            ->withTimestamps();
-    }
-}
Index: app/Models/Buyer.php
===================================================================
--- app/Models/Buyer.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Models/Buyer.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Concerns\HasUuids;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+
+class Buyer extends Model
+{
+    use HasFactory, HasUuids;
+    protected $primaryKey = 'id';
+    public $incrementing = false;
+    protected $keyType = 'string';
+    protected $fillable = [
+        'company_name',
+        'billing_address',
+        'country',
+        'registration_number',
+        'tax_id'
+    ];
+
+    public function orders(): HasMany {
+        return $this->hasMany(Order::class, 'buyer_id');
+    }
+}
Index: p/Models/Client.php
===================================================================
--- app/Models/Client.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,70 +1,0 @@
-<?php
-
-namespace App\Models;
-
-use Illuminate\Database\Eloquent\Concerns\HasUuids;
-use Illuminate\Database\Eloquent\Factories\HasFactory;
-use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\HasMany;
-use Illuminate\Validation\Rule;
-
-class Client extends Model
-{
-    use HasFactory, HasUuids;
-
-    protected $primaryKey = 'id';
-    public $incrementing = false;
-    protected $keyType = 'string';
-
-    protected $fillable = [
-        'name',
-        'country',
-        'registration_number',
-        'tax_code',
-        'contact_person',
-        'phone_number',
-        'billing_address',
-        'shipping_address',
-    ];
-
-    public static function getValidationRules($id = null): array
-    {
-        return [
-            'name' => [
-                'required',
-                'string',
-                'max:255',
-                Rule::unique('clients')->ignore($id),
-            ],
-            'country' => 'required|string|max:255',
-            'registration_number' => [
-                'nullable',
-                'string',
-                'max:255',
-                Rule::unique('clients')->ignore($id),
-            ],
-            'tax_code' => [
-                'nullable',
-                'string',
-                'max:255',
-                Rule::unique('clients')->ignore($id),
-            ],
-            'contact_person' => 'nullable|string|max:255',
-            'phone_number' => 'nullable|string|max:255|regex:/^[\+]?[0-9\s\-\(\)]+$/',
-            'billing_address' => 'nullable|string|max:1000',
-            'shipping_address' => 'nullable|string|max:1000',
-        ];
-    }
-
-    // Orders where this company is the buyer
-    public function buyerOrders(): HasMany
-    {
-        return $this->hasMany(Order::class, 'buyer_id');
-    }
-
-    // Orders where this company is the receiver
-    public function receiverOrders(): HasMany
-    {
-        return $this->hasMany(Order::class, 'receiver_id');
-    }
-}
Index: app/Models/Invoice.php
===================================================================
--- app/Models/Invoice.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Models/Invoice.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,31 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Concerns\HasUuids;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+
+class Invoice extends Model
+{
+    use HasFactory, HasUuids;
+
+    protected $primaryKey = 'id';
+    public $incrementing = false;
+    protected $keyType = 'string';
+
+    protected $table = 'invoices';
+
+    protected $fillable = [
+        'invoice_date',
+        'status',
+        'total_amount',
+        'order_id'
+    ];
+
+    public function order(): BelongsTo
+    {
+        return $this->belongsTo(Order::class, 'order_id');
+    }
+}
Index: app/Models/Order.php
===================================================================
--- app/Models/Order.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ app/Models/Order.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,64 +1,39 @@
 <?php
+
 namespace App\Models;
 
 use Illuminate\Database\Eloquent\Concerns\HasUuids;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
 use Illuminate\Database\Eloquent\Relations\BelongsToMany;
+use Illuminate\Database\Eloquent\Relations\HasMany;
 use Illuminate\Database\Eloquent\Relations\HasOne;
 
 class Order extends Model
 {
-    use HasUuids;
-
+    use HasFactory, HasUuids;
     protected $primaryKey = 'id';
     public $incrementing = false;
     protected $keyType = 'string';
-
     protected $fillable = [
         'date',
         'status',
-        'estimated_delivery_date',
-        'buyer_id',
-        'receiver_id',
-        'transport_id',
-        // Remove payment_id from here
+        'estimated_delivery_date'
     ];
 
-    protected $attributes = [
-        'status' => 'pending',
-    ];
-
-    protected $casts = [
-        'date' => 'date',
-        'estimated_delivery_date' => 'date',
-    ];
-
-    public static function getValidationRules($id = null): array
+    public function products(): BelongsToMany
     {
-        return [
-            'date' => 'required|date|before_or_equal:today',
-            'status' => 'required|string|in:pending,confirmed,processing,shipped,delivered,cancelled',
-            'estimated_delivery_date' => 'required|date|after_or_equal:date',
-            'buyer_id' => 'required|string|exists:clients,id',
-            'receiver_id' => 'required|string|exists:clients,id',
-            'transport_id' => 'nullable|string|exists:transports,id',
-        ];
+        return $this->belongsToMany(Product::class, 'order_products', 'order_id', 'product_id');
     }
 
     public function buyer(): BelongsTo
     {
-        return $this->belongsTo(Client::class, 'buyer_id');
+        return $this->belongsTo(Buyer::class, 'buyer_id');
     }
 
     public function receiver(): BelongsTo
     {
-        return $this->belongsTo(Client::class, 'receiver_id');
-    }
-
-    // Simple one-to-one relationship
-    public function payment(): HasOne
-    {
-        return $this->hasOne(Payment::class, 'order_id');
+        return $this->belongsTo(Receiver::class, 'receiver_id');
     }
 
@@ -68,14 +43,12 @@
     }
 
-    public function batches(): BelongsToMany
+    public function payments(): HasMany
     {
-        return $this->belongsToMany(Batch::class, 'order_batches')
-            ->withPivot('quantity', 'price_per_unit', 'total_price')
-            ->withTimestamps();
+        return $this->hasMany(Payment::class, 'order_id');
     }
 
-    public function getTotalAmountAttribute(): float
+    public function invoice(): HasOne
     {
-        return $this->batches->sum('pivot.total_price') ?? 0;
+        return $this->hasOne(Invoice::class, 'order_id');
     }
 }
Index: app/Models/Payment.php
===================================================================
--- app/Models/Payment.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ app/Models/Payment.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -4,4 +4,5 @@
 
 use Illuminate\Database\Eloquent\Concerns\HasUuids;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
@@ -9,11 +10,9 @@
 class Payment extends Model
 {
-    use HasUuids;
-
+    use HasFactory, HasUuids;
     protected $primaryKey = 'id';
     public $incrementing = false;
     protected $keyType = 'string';
     protected $fillable = [
-        'order_id', // This is the only foreign key we need
         'amount',
         'currency',
@@ -24,21 +23,5 @@
         'payment_status'
     ];
-
-    public static function getValidationRules($id = null): array
-    {
-        return [
-            'order_id' => 'required|string|exists:orders,id',
-            'amount' => 'required|numeric|min:0|max:9999999.99',
-            'currency' => 'required|string|size:3|in:USD,EUR,MKD,GBP,JPY,CNY,RUB',
-            'due_date' => 'required|date|after_or_equal:today',
-            'exchange_rate' => 'required|numeric|min:0.0001|max:9999.9999',
-            'payment_date' => 'nullable|date|before_or_equal:today',
-            'payment_method' => 'required|string|in:bank_transfer,credit_card,cash,check,wire_transfer',
-            'payment_status' => 'required|string|in:pending,paid,failed,refunded,cancelled',
-        ];
-    }
-
-    public function order(): BelongsTo
-    {
+    public function order(): BelongsTo {
         return $this->belongsTo(Order::class, 'order_id');
     }
Index: app/Models/Producer.php
===================================================================
--- app/Models/Producer.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ app/Models/Producer.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -6,7 +6,5 @@
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
-use Illuminate\Database\Eloquent\Relations\BelongsToMany;
 use Illuminate\Database\Eloquent\Relations\HasMany;
-use Illuminate\Validation\Rule;
 
 class Producer extends Model
@@ -25,45 +23,7 @@
     ];
 
-//    public static function getValidationRules($id = null): array
-//    {
-//        return [
-//            'name' => 'required|string|max:255|unique:producers,name,' . $id,
-//            'address' => 'required|string|max:500',
-//            'country' => 'required|string|max:255',
-//            'phone_number' => 'nullable|string|max:255|regex:/^[\+]?[0-9\s\-\(\)]+$/',
-//            'email' => 'nullable|email|max:255|unique:producers,email,' . $id,
-//        ];
-//    }
-    public static function getValidationRules($id = null): array
-    {
-        return [
-            'name' => [
-                'required',
-                'string',
-                'max:255',
-                Rule::unique('producers')->ignore($id)
-            ],
-            'address' => 'required|string|max:500',
-            'country' => 'required|string|max:255',
-            'phone_number' => 'nullable|string|max:255|regex:/^[\+]?[0-9\s\-\(\)]+$/',
-            'email' => [
-                'nullable',
-                'email',
-                'max:255',
-                Rule::unique('producers')->ignore($id)
-            ],
-        ];
-    }
-
     public function products(): HasMany
     {
         return $this->hasMany(Product::class, 'producer_id');
     }
-
-    public function orders(): BelongsToMany
-    {
-        return $this->belongsToMany(Order::class, 'order_products')
-            ->withPivot('quantity', 'price')
-            ->withTimestamps();
-    }
 }
Index: app/Models/Product.php
===================================================================
--- app/Models/Product.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ app/Models/Product.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -7,5 +7,5 @@
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
-use Illuminate\Database\Eloquent\Relations\HasMany;
+use Illuminate\Database\Eloquent\Relations\BelongsToMany;
 
 class Product extends Model
@@ -25,20 +25,4 @@
     ];
 
-    public static function getValidationRules($id = null): array
-    {
-        return [
-            'name' => 'required|string|max:255',
-            'description' => 'required|string|max:1000',
-            'hs_code' => 'nullable|string|max:20|regex:/^[0-9.]+$/',
-            'price' => 'required|numeric|min:0|max:999999.99',
-            'producer_id' => 'required|string|exists:producers,id',
-            'unit_of_measure' => 'required|string|max:50|in:vial, ampule, bottle, pack, scatula, carton'
-        ];
-    }
-
-    protected $casts = [
-        'price' => 'float',
-    ];
-
     public function producer(): BelongsTo
     {
@@ -46,7 +30,7 @@
     }
 
-    public function batches(): HasMany
+    public function orders(): BelongsToMany
     {
-        return $this->hasMany(Batch::class);
+        return $this->belongsToMany(Order::class, 'order_products', 'product_id', 'order_id');
     }
 }
Index: app/Models/Receiver.php
===================================================================
--- app/Models/Receiver.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ app/Models/Receiver.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Models;
+
+use Illuminate\Database\Eloquent\Concerns\HasUuids;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasMany;
+
+class Receiver extends Model
+{
+    use HasFactory, HasUuids;
+    protected $primaryKey = 'id';
+    public $incrementing = false;
+    protected $keyType = 'string';
+    protected $fillable = [
+        'company_name',
+        'contact_person',
+        'country',
+        'phone_number',
+        'shipping_address'
+    ];
+
+    public function orders(): HasMany {
+        return $this->hasMany(Order::class, 'receiver_id');
+    }
+}
Index: app/Models/Transport.php
===================================================================
--- app/Models/Transport.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ app/Models/Transport.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -15,5 +15,5 @@
     protected $keyType = 'string';
     protected $fillable = [
-        'name',
+        'carrier_name',
         'departure_point',
         'arrival_point',
@@ -24,16 +24,4 @@
     ];
 
-    public static function getValidationRules($id = null): array
-    {
-        return [
-            'name' => 'required|string|max:255',
-            'departure_point' => 'required|string|max:255',
-            'arrival_point' => 'required|string|max:255',
-            'estimated_departure_date' => 'required|date|after_or_equal:today',
-            'estimated_arrival_date' => 'required|date|after:estimated_departure_date',
-            'incoterm' => 'required|string|in:EXW,FCA,CPT,CIP,DAP,DPU,DDP,FAS,FOB,CFR,CIF',
-            'insurance_conditions' => 'nullable|string|max:1000',
-        ];
-    }
     public function order(): HasMany {
         return $this->hasMany(Order::class, 'transport_id');
Index: app/Models/User.php
===================================================================
--- app/Models/User.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ app/Models/User.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -4,51 +4,23 @@
 
 // use Illuminate\Contracts\Auth\MustVerifyEmail;
-use Illuminate\Database\Eloquent\Concerns\HasUuids;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Foundation\Auth\User as Authenticatable;
 use Illuminate\Notifications\Notifiable;
-use Illuminate\Validation\Rule;
 
 class User extends Authenticatable
 {
-    use HasFactory, HasUuids, Notifiable;
+    /** @use HasFactory<\Database\Factories\UserFactory> */
+    use HasFactory, Notifiable;
 
-    public $incrementing = false;
-    protected $keyType = 'string';
+    /**
+     * The attributes that are mass assignable.
+     *
+     * @var list<string>
+     */
     protected $fillable = [
-        'id',
         'name',
         'email',
         'password',
-        'is_admin',
     ];
-
-//    public static function getValidationRules($id = null): array
-//    {
-//        $passwordRule = $id ? 'nullable' : 'required';
-//
-//        return [
-//            'name' => 'required|string|max:255',
-//            'email' => 'required|email|max:255|unique:users,email,' . $id,
-//            'password' => $passwordRule . '|string|min:8|confirmed',
-//            'is_admin' => 'required|boolean',
-//        ];
-//    }
-    public static function getValidationRules($id = null): array
-    {
-        $passwordRule = $id ? 'nullable' : 'required';
-
-        return [
-            'name' => 'required|string|max:255',
-            'email' => [
-                'required',
-                'email',
-                'max:255',
-                Rule::unique('users')->ignore($id)
-            ],
-            'password' => $passwordRule . '|string|min:8|confirmed',
-            'is_admin' => 'required|boolean',
-        ];
-    }
 
     /**
@@ -70,8 +42,6 @@
     {
         return [
-            'id' => 'string',
             'email_verified_at' => 'datetime',
             'password' => 'hashed',
-            'is_admin' => 'boolean'
         ];
     }
Index: bootstrap/app.php
===================================================================
--- bootstrap/app.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ bootstrap/app.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -21,8 +21,4 @@
             HandleInertiaRequests::class,
         ]);
-
-        $middleware->alias([
-            'admin' => \App\Http\Middleware\AdminMiddleware::class,
-        ]);
     })
     ->withExceptions(function (Exceptions $exceptions) {
Index: bun.lock
===================================================================
--- bun.lock	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ bun.lock	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -7,29 +7,16 @@
         "@inertiajs/vue3": "^2.0.5",
         "@tailwindcss/cli": "^4.0.15",
-        "@tanstack/vue-table": "^8.21.3",
-        "@types/lodash-es": "^4.17.12",
-        "@vueuse/core": "^13.9.0",
         "bunx": "^0.1.0",
         "class-variance-authority": "^0.7.1",
-        "clsx": "^2.1.1",
-        "lib-utils": "^0.0.4",
-        "lib-utils-ts": "^0.0.0-test",
-        "lodash-es": "^4.17.21",
-        "lucide-vue-next": "^0.536.0",
-        "reka-ui": "^2.5.0",
+        "reka-ui": "^2.3.2",
         "shadcn-vue": "^2.2.0",
-        "tailwind-merge": "^3.3.1",
         "tailwindcss-animate": "^1.0.7",
         "vue-loader": "^17.4.2",
-        "vue-sonner": "^2.0.2",
       },
       "devDependencies": {
-        "@iconify-json/radix-icons": "^1.2.2",
-        "@iconify/vue": "^5.0.0",
         "@rushstack/eslint-patch": "^1.8.0",
         "@tailwindcss/forms": "^0.5.3",
         "@tailwindcss/postcss": "^4.1.11",
         "@tailwindcss/vite": "^4.1.11",
-        "@types/lodash": "^4.17.20",
         "@types/node": "^24.0.15",
         "@vitejs/plugin-vue": "^6.0.0",
@@ -188,10 +175,4 @@
     "@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@2.0.3", "", {}, "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA=="],
 
-    "@iconify-json/radix-icons": ["@iconify-json/radix-icons@1.2.2", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-+PPmKWDP7pfJMcEc9Ty1zyo/zzq+9rfKW4EGb2HSZcPu1VUhothDLFzWvBqQNoFIOYCJ2nm0Vmf8kVyYhq9G0Q=="],
-
-    "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],
-
-    "@iconify/vue": ["@iconify/vue@5.0.0", "", { "dependencies": { "@iconify/types": "^2.0.0" }, "peerDependencies": { "vue": ">=3" } }, "sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg=="],
-
     "@inertiajs/core": ["@inertiajs/core@2.0.8", "", { "dependencies": { "axios": "^1.8.2", "es-toolkit": "^1.34.1", "qs": "^6.9.0" } }, "sha512-YE+b5FktbSSaWJt4CjCHy7z3t+IV97G/8kD33mkj2Fqqf+Jfsypd/jsOuxrQGSMDpIyAGR6EDoaiuss6+JuIPA=="],
 
@@ -342,10 +323,6 @@
     "@tailwindcss/vite": ["@tailwindcss/vite@4.1.11", "", { "dependencies": { "@tailwindcss/node": "4.1.11", "@tailwindcss/oxide": "4.1.11", "tailwindcss": "4.1.11" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw=="],
 
-    "@tanstack/table-core": ["@tanstack/table-core@8.21.3", "", {}, "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg=="],
-
     "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.12", "", {}, "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA=="],
 
-    "@tanstack/vue-table": ["@tanstack/vue-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "vue": ">=3.2" } }, "sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw=="],
-
     "@tanstack/vue-virtual": ["@tanstack/vue-virtual@3.13.12", "", { "dependencies": { "@tanstack/virtual-core": "3.13.12" }, "peerDependencies": { "vue": "^2.7.0 || ^3.0.0" } }, "sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww=="],
 
@@ -360,8 +337,4 @@
     "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
 
-    "@types/lodash": ["@types/lodash@4.17.20", "", {}, "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA=="],
-
-    "@types/lodash-es": ["@types/lodash-es@4.17.12", "", { "dependencies": { "@types/lodash": "*" } }, "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ=="],
-
     "@types/node": ["@types/node@24.0.15", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA=="],
 
@@ -426,9 +399,9 @@
     "@vuedx/template-ast-types": ["@vuedx/template-ast-types@0.7.1", "", { "dependencies": { "@vue/compiler-core": "^3.0.0" } }, "sha512-Mqugk/F0lFN2u9bhimH6G1kSu2hhLi2WoqgCVxrMvgxm2kDc30DtdvVGRq+UgEmKVP61OudcMtZqkUoGQeFBUQ=="],
 
-    "@vueuse/core": ["@vueuse/core@13.9.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "13.9.0", "@vueuse/shared": "13.9.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA=="],
-
-    "@vueuse/metadata": ["@vueuse/metadata@13.9.0", "", {}, "sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg=="],
-
-    "@vueuse/shared": ["@vueuse/shared@13.9.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g=="],
+    "@vueuse/core": ["@vueuse/core@12.8.2", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "12.8.2", "@vueuse/shared": "12.8.2", "vue": "^3.5.13" } }, "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ=="],
+
+    "@vueuse/metadata": ["@vueuse/metadata@12.8.2", "", {}, "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A=="],
+
+    "@vueuse/shared": ["@vueuse/shared@12.8.2", "", { "dependencies": { "vue": "^3.5.13" } }, "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w=="],
 
     "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="],
@@ -484,6 +457,4 @@
     "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
 
-    "arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="],
-
     "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
 
@@ -572,6 +543,4 @@
     "cosmiconfig": ["cosmiconfig@9.0.0", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg=="],
 
-    "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="],
-
     "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
 
@@ -832,8 +801,4 @@
     "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
 
-    "lib-utils": ["lib-utils@0.0.4", "", {}, "sha512-6QsAED4EN3mhY6+TTPptRzIzXjP8jHEXwyBqK4fld18p+y+3pIur3kEbzqLbfNUaHxTyEfVlEBbPBLR24xrrWg=="],
-
-    "lib-utils-ts": ["lib-utils-ts@0.0.0-test", "", { "dependencies": { "@types/node": "^14.6.1", "ts-node": "^9.0.0" } }, "sha512-mki7auaK5i1wKrARKwEJxTM6it3Hm+nS6NoFOLuTN2b/h+t1nNpPNZ0ZOAKdqnJs6J57sTaP7nJJHDedafflkw=="],
-
     "lightningcss": ["lightningcss@1.29.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.2", "lightningcss-darwin-x64": "1.29.2", "lightningcss-freebsd-x64": "1.29.2", "lightningcss-linux-arm-gnueabihf": "1.29.2", "lightningcss-linux-arm64-gnu": "1.29.2", "lightningcss-linux-arm64-musl": "1.29.2", "lightningcss-linux-x64-gnu": "1.29.2", "lightningcss-linux-x64-musl": "1.29.2", "lightningcss-win32-arm64-msvc": "1.29.2", "lightningcss-win32-x64-msvc": "1.29.2" } }, "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA=="],
 
@@ -878,10 +843,6 @@
     "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
 
-    "lucide-vue-next": ["lucide-vue-next@0.536.0", "", { "peerDependencies": { "vue": ">=3.0.1" } }, "sha512-ypauLrs4PymzxBKvEiuyo1HqOqjPdBdAtATCSPs4hLgqEA0JAEINWfQbGoLEkaEixT7gsTeSK5TAvOhAcaHfCA=="],
-
     "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="],
 
-    "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="],
-
     "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
 
@@ -1020,5 +981,5 @@
     "recast-x": ["recast-x@1.0.5", "", { "dependencies": { "ast-types": "npm:ast-types-x@1.18.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-CkfWKhQiYsMQYaWUkHdERXUxT2jJLBoa5y7zFv3dUAE7Ly5oU/0hsqrENyEfrCL03pDsQYbnoz17Cbagx/c2OA=="],
 
-    "reka-ui": ["reka-ui@2.5.0", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^12.5.0", "@vueuse/shared": "^12.5.0", "aria-hidden": "^1.2.4", "defu": "^6.1.4", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.2.0" } }, "sha512-81aMAmJeVCy2k0E6x7n1kypDY6aM1ldLis5+zcdV1/JtoAlSDck5OBsyLRJU9CfgbrQp1ImnRnBSmC4fZ2fkZQ=="],
+    "reka-ui": ["reka-ui@2.3.2", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^12.5.0", "@vueuse/shared": "^12.5.0", "aria-hidden": "^1.2.4", "defu": "^6.1.4", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.2.0" } }, "sha512-lCysSCILH2uqShEnt93/qzlXnB7ySvK7scR0Q5C+a2iXwFVzHhvZQsMaSnbQYueoCihx6yyUZTYECepnmKrbRA=="],
 
     "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
@@ -1108,6 +1069,4 @@
     "table": ["table@6.9.0", "", { "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1" } }, "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A=="],
 
-    "tailwind-merge": ["tailwind-merge@3.3.1", "", {}, "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g=="],
-
     "tailwindcss": ["tailwindcss@4.1.11", "", {}, "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA=="],
 
@@ -1138,6 +1097,4 @@
     "ts-morph": ["ts-morph@26.0.0", "", { "dependencies": { "@ts-morph/common": "~0.27.0", "code-block-writer": "^13.0.3" } }, "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug=="],
 
-    "ts-node": ["ts-node@9.1.1", "", { "dependencies": { "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.17", "yn": "3.1.1" }, "peerDependencies": { "typescript": ">=2.7" }, "bin": { "ts-node": "dist/bin.js", "ts-script": "dist/bin-script-deprecated.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js" } }, "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg=="],
-
     "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
 
@@ -1178,6 +1135,4 @@
     "vue-metamorph": ["vue-metamorph@3.3.3", "", { "dependencies": { "@babel/parser": "8.0.0-alpha.12", "ast-types-x": "1.18.0", "chalk": "^5.3.0", "cli-progress": "^3.12.0", "commander": "^13.1.0", "deep-diff": "^1.0.2", "fs-extra": "^11.2.0", "glob": "^11.0.0", "lodash-es": "^4.17.21", "magic-string": "^0.30.10", "micromatch": "^4.0.8", "node-html-parser": "^7.0.1", "postcss": "^8.4.38", "postcss-less": "^6.0.0", "postcss-sass": "^0.5.0", "postcss-scss": "^4.0.9", "postcss-styl": "^0.12.3", "recast-x": "1.0.5", "table": "^6.8.2", "vue-eslint-parser": "^10.1.0" }, "bin": { "vue-metamorph": "scripts/scaffold.js" } }, "sha512-NPeDg2/ZL4lDJsC/PjEfFq+Ln3Rr7cX86AQo4bI5V6ziUTZOMY93HyIwKHW37BrIf4YB97llrGtvM+eMhwr1jw=="],
 
-    "vue-sonner": ["vue-sonner@2.0.2", "", {}, "sha512-cN6onnN6aBOZ56YWN8CMj6t4zqbz/XlenE+jx5z+mgduMMelFo6B6G+e2Q6hhxU9YFiV16MXG2MBPluZabyElQ=="],
-
     "vue-tsc": ["vue-tsc@2.2.12", "", { "dependencies": { "@volar/typescript": "2.4.15", "@vue/language-core": "2.2.12" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "./bin/vue-tsc.js" } }, "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw=="],
 
@@ -1210,6 +1165,4 @@
     "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="],
 
-    "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="],
-
     "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
 
@@ -1276,4 +1229,8 @@
     "@vuedx/template-ast-types/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
 
+    "@vueuse/core/vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
+
+    "@vueuse/shared/vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
+
     "ajv-formats/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
 
@@ -1286,6 +1243,4 @@
     "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
 
-    "lib-utils-ts/@types/node": ["@types/node@14.18.63", "", {}, "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ=="],
-
     "log-symbols/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="],
 
@@ -1308,14 +1263,8 @@
     "recast-x/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
 
-    "reka-ui/@vueuse/core": ["@vueuse/core@12.8.2", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "12.8.2", "@vueuse/shared": "12.8.2", "vue": "^3.5.13" } }, "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ=="],
-
-    "reka-ui/@vueuse/shared": ["@vueuse/shared@12.8.2", "", { "dependencies": { "vue": "^3.5.13" } }, "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w=="],
-
     "schema-utils/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="],
 
     "shadcn-vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ=="],
 
-    "shadcn-vue/reka-ui": ["reka-ui@2.3.2", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^12.5.0", "@vueuse/shared": "^12.5.0", "aria-hidden": "^1.2.4", "defu": "^6.1.4", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.2.0" } }, "sha512-lCysSCILH2uqShEnt93/qzlXnB7ySvK7scR0Q5C+a2iXwFVzHhvZQsMaSnbQYueoCihx6yyUZTYECepnmKrbRA=="],
-
     "shadcn-vue/tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="],
 
@@ -1328,6 +1277,4 @@
     "terser-webpack-plugin/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.29", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ=="],
 
-    "ts-node/diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="],
-
     "vite-plugin-full-reload/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
 
@@ -1420,4 +1367,24 @@
     "@vuedx/template-ast-types/@vue/compiler-core/@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
 
+    "@vueuse/core/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="],
+
+    "@vueuse/core/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ=="],
+
+    "@vueuse/core/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="],
+
+    "@vueuse/core/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.13", "", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="],
+
+    "@vueuse/core/vue/@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
+
+    "@vueuse/shared/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="],
+
+    "@vueuse/shared/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ=="],
+
+    "@vueuse/shared/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="],
+
+    "@vueuse/shared/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.13", "", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="],
+
+    "@vueuse/shared/vue/@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
+
     "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
 
@@ -1428,10 +1395,4 @@
     "ora/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="],
 
-    "reka-ui/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@12.8.2", "", {}, "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A=="],
-
-    "reka-ui/@vueuse/core/vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
-
-    "reka-ui/@vueuse/shared/vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
-
     "schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
 
@@ -1446,8 +1407,4 @@
     "shadcn-vue/@vue/compiler-sfc/@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
 
-    "shadcn-vue/reka-ui/@vueuse/core": ["@vueuse/core@12.8.2", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "12.8.2", "@vueuse/shared": "12.8.2", "vue": "^3.5.13" } }, "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared": ["@vueuse/shared@12.8.2", "", { "dependencies": { "vue": "^3.5.13" } }, "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w=="],
-
     "table/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
 
@@ -1470,32 +1427,34 @@
     "@vuedx/template-ast-types/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
 
-    "reka-ui/@vueuse/core/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.13", "", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.13", "", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
+    "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
+
+    "@vueuse/core/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
+
+    "@vueuse/core/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
+
+    "@vueuse/core/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
+
+    "@vueuse/core/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
+
+    "@vueuse/core/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="],
+
+    "@vueuse/core/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
+
+    "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
+
+    "@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
+
+    "@vueuse/shared/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
+
+    "@vueuse/shared/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
+
+    "@vueuse/shared/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
+
+    "@vueuse/shared/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="],
+
+    "@vueuse/shared/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
 
     "shadcn-vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
 
-    "shadcn-vue/reka-ui/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@12.8.2", "", {}, "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
-
     "@unovue/detypes/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
 
@@ -1510,31 +1469,11 @@
     "@vuedx/template-ast-types/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
 
-    "reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
+    "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
+
+    "@vueuse/core/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
+
+    "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
+
+    "@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
 
     "shadcn-vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
@@ -1542,20 +1481,4 @@
     "shadcn-vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
 
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.13", "", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.13", "", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
-
     "@unovue/detypes/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
 
@@ -1566,63 +1489,23 @@
     "@vue/language-core/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
 
-    "reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.27.0", "", { "dependencies": { "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" } }, "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
-
-    "reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
-
-    "reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
-
-    "shadcn-vue/reka-ui/@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
-
-    "shadcn-vue/reka-ui/@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
+    "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
+
+    "@vueuse/core/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
+
+    "@vueuse/core/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
+
+    "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.27.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg=="],
+
+    "@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
+
+    "@vueuse/shared/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
+
+    "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
+
+    "@vueuse/core/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
+
+    "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
+
+    "@vueuse/shared/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
   }
 }
Index: composer.json
===================================================================
--- composer.json	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ composer.json	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -8,10 +8,8 @@
     "require": {
         "php": "^8.2",
-        "barryvdh/laravel-dompdf": "^3.1",
         "inertiajs/inertia-laravel": "^2.0",
         "laravel/framework": "^12.0",
         "laravel/sanctum": "^4.0",
         "laravel/tinker": "^2.10.1",
-        "symfony/polyfill-iconv": "^1.33",
         "tightenco/ziggy": "^2.0"
     },
Index: config/session.php
===================================================================
--- config/session.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ config/session.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -33,7 +33,7 @@
     */
 
-    'lifetime' => 10,
-
-    'expire_on_close' => true,
+    'lifetime' => (int) env('SESSION_LIFETIME', 120),
+
+    'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
 
     /*
Index: tabase/factories/BatchFactory.php
===================================================================
--- database/factories/BatchFactory.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,31 +1,0 @@
-<?php
-
-namespace Database\Factories;
-
-use App\Models\Batch;
-use App\Models\Product;
-use Illuminate\Database\Eloquent\Factories\Factory;
-
-class BatchFactory extends Factory
-{
-    protected $model = Batch::class;
-
-    public function definition(): array
-    {
-        $product = Product::query()->exists()
-            ? Product::query()->inRandomOrder()->first()
-            : Product::factory()->create();
-
-        $createdAt = $this->faker->dateTimeBetween('-6 months', 'now');
-
-        return [
-            'product_id' => $product->id,
-            'batch_code' => strtoupper($this->faker->bothify('BATCH-#####')),
-            'production_date' => $createdAt,
-            'expiration_date' => $this->faker->dateTimeBetween($createdAt, '+1 year'),
-            'gross_weight' => $this->faker->randomFloat(2, 100, 1000),
-            'net_weight' => $this->faker->randomFloat(2, 80, 950),
-            'units_per_batch' => 100000,
-        ];
-    }
-}
Index: database/factories/BuyerFactory.php
===================================================================
--- database/factories/BuyerFactory.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ database/factories/BuyerFactory.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,24 @@
+<?php
+
+namespace Database\Factories;
+
+use App\Models\Buyer;
+use Illuminate\Database\Eloquent\Factories\Factory;
+
+/**
+ * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Buyer>
+ */
+class BuyerFactory extends Factory
+{
+    protected $model = Buyer::class;
+    public function definition(): array
+    {
+        return [
+            'company_name' => $this->faker->company(),
+            'billing_address' => $this->faker->address(),
+            'country' => $this->faker->country(),
+            'registration_number' => $this->faker->regexify('[A-Z]{2}[0-9]{8}'),
+            'tax_id' => $this->faker->regexify('TAX[0-9]{10}')
+        ];
+    }
+}
Index: tabase/factories/ClientFactory.php
===================================================================
--- database/factories/ClientFactory.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<?php
-
-namespace Database\Factories;
-
-use App\Models\Client;
-use Illuminate\Database\Eloquent\Factories\Factory;
-
-/**
- * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Client>
- */
-class ClientFactory extends Factory
-{
-    protected $model = Client::class;
-
-    public function definition(): array
-    {
-        return [
-            'name' => $this->faker->company(),
-            'country' => $this->faker->country(),
-            'registration_number' => $this->faker->regexify('[A-Z]{2}[0-9]{8}'),
-            'tax_code' => $this->faker->regexify('TAX[0-9]{10}'),
-            'contact_person' => $this->faker->name(),
-            'phone_number' => $this->faker->phoneNumber(),
-            'billing_address' => $this->faker->address(),
-            'shipping_address' => $this->faker->address(),
-        ];
-    }
-}
Index: database/factories/ProductFactory.php
===================================================================
--- database/factories/ProductFactory.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ database/factories/ProductFactory.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -29,5 +29,5 @@
             'description' => $this->faker->paragraph(),
             'hs_code' => $this->faker->regexify('[0-9]{4}\.[0-9]{2}\.[0-9]{2}'),
-            'price' => $this->faker->randomFloat(2, 10, 5000),
+            'price' => $this->faker->random(2, 10, 5000),
             'producer_id' => $producer->id,
             'unit_of_measure' => $this->faker->randomElement($units),
Index: database/factories/ReceiverFactory.php
===================================================================
--- database/factories/ReceiverFactory.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ database/factories/ReceiverFactory.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,24 @@
+<?php
+
+namespace Database\Factories;
+
+use App\Models\Receiver;
+use Illuminate\Database\Eloquent\Factories\Factory;
+
+/**
+ * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Receiver>
+ */
+class ReceiverFactory extends Factory
+{
+    protected $model = Receiver::class;
+    public function definition(): array
+    {
+        return [
+            'company_name' => $this->faker->company() . ' Distributors',
+            'contact_person' => $this->faker->name(),
+            'country' => $this->faker->country(),
+            'phone_number' => $this->faker->phoneNumber(),
+            'shipping_address' => $this->faker->address(),
+        ];
+    }
+}
Index: tabase/factories/TransportFactory.php
===================================================================
--- database/factories/TransportFactory.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,38 +1,0 @@
-<?php
-
-namespace Database\Factories;
-
-use App\Models\Transport;
-use Illuminate\Database\Eloquent\Factories\Factory;
-
-/**
- * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Transport>
- */
-class TransportFactory extends Factory
-{
-    protected $model = Transport::class;
-
-    public function definition(): array
-    {
-        $departureDate = $this->faker->dateTimeBetween('now', '+7 days');
-        $arrivalDate = $this->faker->dateTimeBetween($departureDate, '+30 days');
-
-        return [
-            'name' => $this->faker->randomElement([
-                'DHL Express', 'FedEx', 'UPS', 'Maersk', 'COSCO', 'MSC',
-                'Emirates SkyCargo', 'Lufthansa Cargo', 'Air France KLM Cargo'
-            ]),
-            'departure_point' => $this->faker->city() . ', ' . $this->faker->country(),
-            'arrival_point' => $this->faker->city() . ', ' . $this->faker->country(),
-            'estimated_departure_date' => $departureDate,
-            'estimated_arrival_date' => $arrivalDate,
-            'incoterm' => $this->faker->randomElement([
-                'EXW', 'FCA', 'CPT', 'CIP', 'DAP', 'DPU', 'DDP', 'FAS', 'FOB', 'CFR', 'CIF'
-            ]),
-            'insurance_conditions' => $this->faker->randomElement([
-                'Full coverage', 'Partial coverage', 'Basic coverage', 'No coverage',
-                'Marine insurance', 'Cargo insurance', 'Transit insurance'
-            ]),
-        ];
-    }
-}
Index: database/migrations/0001_01_01_000000_create_users_table.php
===================================================================
--- database/migrations/0001_01_01_000000_create_users_table.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ database/migrations/0001_01_01_000000_create_users_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -13,10 +13,9 @@
     {
         Schema::create('users', function (Blueprint $table) {
-            $table->uuid('id')->primary();
+            $table->id();
             $table->string('name');
             $table->string('email')->unique();
             $table->timestamp('email_verified_at')->nullable();
             $table->string('password');
-            $table->boolean('is_admin')->default(false);
             $table->rememberToken();
             $table->timestamps();
@@ -31,11 +30,9 @@
         Schema::create('sessions', function (Blueprint $table) {
             $table->string('id')->primary();
-            $table->uuid('user_id')->nullable()->index();
+            $table->foreignId('user_id')->nullable()->index();
             $table->string('ip_address', 45)->nullable();
             $table->text('user_agent')->nullable();
             $table->longText('payload');
             $table->integer('last_activity')->index();
-
-            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
         });
     }
Index: database/migrations/2025_03_13_184433_create_buyers_table.php
===================================================================
--- database/migrations/2025_03_13_184433_create_buyers_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ database/migrations/2025_03_13_184433_create_buyers_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('buyers', function (Blueprint $table) {
+            $table->uuid('id')->primary();
+
+            $table->string('company_name');
+            $table->string('billing_address');
+            $table->string('country');
+            $table->string('registration_number');
+            $table->string('tax_id');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('buyers');
+    }
+};
Index: database/migrations/2025_03_13_192448_create_receivers_table.php
===================================================================
--- database/migrations/2025_03_13_192448_create_receivers_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ database/migrations/2025_03_13_192448_create_receivers_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('receivers', function (Blueprint $table) {
+            $table->uuid('id')->primary();
+            $table->string('company_name');
+            $table->string('contact_person');
+            $table->string('country');
+            $table->string('phone_number');
+            $table->string('shipping_address');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('receivers');
+    }
+};
Index: database/migrations/2025_03_17_154849_create_transports_table.php
===================================================================
--- database/migrations/2025_03_17_154849_create_transports_table.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ database/migrations/2025_03_17_154849_create_transports_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -14,5 +14,5 @@
         Schema::create('transports', function (Blueprint $table) {
             $table->uuid('id')->primary();
-            $table->string('name');
+            $table->string('carrier_name');
             $table->string('departure_point');
             $table->string('arrival_point');
Index: database/migrations/2025_03_17_161120_create_payments_table.php
===================================================================
--- database/migrations/2025_03_17_161120_create_payments_table.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ database/migrations/2025_03_17_161120_create_payments_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -20,14 +20,14 @@
             $table->date('due_date');
             $table->decimal('exchange_rate');
-            $table->date('payment_date')->nullable();
+            $table->date('payment_date');
             $table->string('payment_method');
             $table->string('payment_status');
             $table->timestamps();
 
-            $table->foreign('order_id')
-                ->references('id')
-                ->on('orders')
-                ->onDelete('cascade')
-                ->onUpdate('cascade');
+//            $table->foreign('order_id')
+//                ->references('id')
+//                ->on('orders')
+//                ->onDelete('cascade')
+//                ->onUpdate('cascade');
         });
     }
Index: database/migrations/2025_03_17_175711_create_invoices_table.php
===================================================================
--- database/migrations/2025_03_17_175711_create_invoices_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ database/migrations/2025_03_17_175711_create_invoices_table.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    public function up(): void
+    {
+        Schema::create('invoices', function (Blueprint $table) {
+            $table->uuid('id')->primary();
+            $table->uuid('order_id');
+            $table->date('invoice_date');
+            $table->string('status');
+            $table->decimal('total_amount', 10, 2);
+            $table->timestamps();
+
+            // Foreign key constraint
+//            $table->foreign('order_id')
+//                ->references('id')
+//                ->on('orders')
+//                ->onDelete('cascade')
+//                ->onUpdate('cascade');
+        });
+    }
+
+    public function down(): void
+    {
+        Schema::dropIfExists('invoices');
+    }
+};
Index: tabase/migrations/2025_08_08_131914_create_clients_table.php
===================================================================
--- database/migrations/2025_08_08_131914_create_clients_table.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration {
-    public function up(): void
-    {
-        Schema::create('clients', function (Blueprint $table) {
-            $table->uuid('id')->primary();
-            $table->string('name');
-            $table->string('country')->nullable();
-            $table->string('registration_number')->nullable()->index();
-            $table->string('tax_code')->nullable()->index();
-            $table->string('contact_person')->nullable();
-            $table->string('phone_number')->nullable();
-            $table->text('billing_address')->nullable();
-            $table->text('shipping_address')->nullable();
-            $table->timestamps();
-        });
-    }
-
-    public function down(): void
-    {
-        Schema::dropIfExists('clients');
-    }
-};
Index: tabase/migrations/2025_08_14_120500_create_batches_table.php
===================================================================
--- database/migrations/2025_08_14_120500_create_batches_table.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,36 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration
-{
-    /**
-     * Run the migrations.
-     */
-    public function up(): void
-    {
-        Schema::create('batches', function (Blueprint $table) {
-            $table->uuid('id')->primary();
-            $table->uuid('product_id');
-            $table->string('batch_code')->unique();
-            $table->date('production_date');
-            $table->date('expiration_date');
-            $table->decimal('net_weight', 10, 2);
-            $table->decimal('gross_weight', 10, 2);
-            $table->integer('units_per_batch')->default(100000);
-            $table->timestamps();
-
-            $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
-        });
-    }
-
-    /**
-     * Reverse the migrations.
-     */
-    public function down(): void
-    {
-        Schema::dropIfExists('batches');
-    }
-};
Index: tabase/migrations/2025_08_14_120623_create_order_batches_table.php
===================================================================
--- database/migrations/2025_08_14_120623_create_order_batches_table.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-return new class extends Migration {
-    public function up(): void
-    {
-        Schema::create('order_batches', function (Blueprint $table) {
-            $table->uuid('id')->primary();
-            $table->uuid('order_id');
-            $table->uuid('batch_id');
-            $table->integer('quantity');
-            $table->decimal('price_per_unit', 10, 2);
-            $table->decimal('total_price', 10, 2);
-            $table->timestamps();
-
-            $table->foreign('order_id')->references('id')->on('orders')->onDelete('cascade');
-            $table->foreign('batch_id')->references('id')->on('batches')->onDelete('cascade');
-        });
-    }
-
-    public function down(): void
-    {
-        Schema::dropIfExists('order_batches');
-    }
-};
Index: tabase/migrations/2025_09_30_194708_add_indexes_to_tables.php
===================================================================
--- database/migrations/2025_09_30_194708_add_indexes_to_tables.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,53 +1,0 @@
-<?php
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Support\Facades\Schema;
-
-class AddIndexesToTables extends Migration
-{
-    public function up(): void
-    {
-        Schema::table('users', function (Blueprint $table) {
-            $table->index('email', 'idx_users_email');
-        });
-
-        Schema::table('clients', function (Blueprint $table) {
-            $table->index(['name', 'country'], 'idx_clients_name_country');
-        });
-
-        Schema::table('batches', function (Blueprint $table) {
-            $table->index('batch_code', 'idx_batches_batch_code');
-        });
-
-        Schema::table('orders', function (Blueprint $table) {
-            $table->index('status', 'idx_orders_status');
-        });
-
-        Schema::table('payments', function (Blueprint $table) {
-            $table->index('payment_status', 'idx_payments_payment_status');
-        });
-    }
-
-    public function down(): void
-    {
-        Schema::table('users', function (Blueprint $table) {
-            $table->dropIndex('idx_users_email');
-        });
-
-        Schema::table('clients', function (Blueprint $table) {
-            $table->dropIndex('idx_clients_name_country');
-        });
-
-        Schema::table('batches', function (Blueprint $table) {
-            $table->dropIndex('idx_batches_batch_code');
-        });
-
-        Schema::table('orders', function (Blueprint $table) {
-            $table->dropIndex('idx_orders_status');
-        });
-
-        Schema::table('payments', function (Blueprint $table) {
-            $table->dropIndex('idx_payments_payment_status');
-        });
-    }
-}
Index: tabase/seeders/BatchSeeder.php
===================================================================
--- database/seeders/BatchSeeder.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,44 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\Batch;
-use App\Models\Product;
-use Carbon\Carbon;
-use Illuminate\Database\Console\Seeds\WithoutModelEvents;
-use Illuminate\Database\Seeder;
-use Illuminate\Support\Str;
-
-class BatchSeeder extends Seeder
-{
-    /**
-     * Run the database seeds.
-     */
-    public function run(): void
-    {
-        $products = Product::all();
-        $counter = 1;
-
-        foreach ($products as $product) {
-            $batchCounter = rand(2,4);
-
-            for ($i = 0; $i < $batchCounter; $i++) {
-                $productionDate = Carbon::now()->subDays(rand(30, 100));
-                $expirationDate = $productionDate->copy()->addYears(2);
-
-                Batch::create([
-                    'id' => Str::uuid(),
-                    'product_id' => $product->id,
-                    'batch_code' => 'BATCH-' . str_pad($counter, 6, '0', STR_PAD_LEFT),
-                    'production_date' => $productionDate,
-                    'expiration_date' => $expirationDate,
-                    'net_weight' => rand(500, 5000) / 100,
-                    'gross_weight' => rand(600, 6000) / 100,
-                    'units_per_batch' => rand (10000, 100000),
-                ]);
-
-                $counter++;
-            }
-        }
-    }
-}
Index: tabase/seeders/ClientSeeder.php
===================================================================
--- database/seeders/ClientSeeder.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use Illuminate\Database\Seeder;
-use App\Models\Client;
-use Illuminate\Support\Str;
-
-class ClientSeeder extends Seeder
-{
-    public function run(): void
-    {
-        Client::factory()->count(20)->create();
-    }
-}
Index: database/seeders/DatabaseSeeder.php
===================================================================
--- database/seeders/DatabaseSeeder.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ database/seeders/DatabaseSeeder.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -3,21 +3,20 @@
 namespace Database\Seeders;
 
-use App\Models\Order;
-use App\Models\Payment;
+use App\Models\User;
+// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 use Illuminate\Database\Seeder;
-use Faker\Factory;
 
 class DatabaseSeeder extends Seeder
 {
+    /**
+     * Seed the application's database.
+     */
     public function run(): void
     {
-        $this->call([
-            UserSeeder::class,
-            ClientSeeder::class,
-            ProducerAndProductSeeder::class,
-            BatchSeeder::class,
-            TransportSeeder::class,
-            OrderSeeder::class,
-            PaymentSeeder::class,
+        // User::factory(10)->create();
+
+        User::factory()->create([
+            'name' => 'Test User',
+            'email' => 'test@example.com',
         ]);
     }
Index: tabase/seeders/OrderSeeder.php
===================================================================
--- database/seeders/OrderSeeder.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,72 +1,0 @@
-<?php
-namespace Database\Seeders;
-
-use App\Models\Order;
-use App\Models\Client;
-use App\Models\Batch;
-use App\Models\Transport;
-use Illuminate\Database\Seeder;
-use Illuminate\Support\Facades\DB;
-use Carbon\Carbon;
-use Illuminate\Support\Str;
-
-class OrderSeeder extends Seeder
-{
-    private $statuses = ['pending', 'confirmed', 'processing', 'shipped', 'delivered', 'cancelled'];
-
-    public function run(): void
-    {
-        $clients = Client::all();
-        $transports = Transport::all();
-        $batches = Batch::all();
-
-        if ($transports->isEmpty()) {
-            throw new \Exception("No transports found. Make sure TransportSeeder runs first.");
-        }
-
-        for ($i = 0; $i < 50; $i++) {
-            $orderDate = Carbon::now()->subDays(rand(1, 365));
-            $estimatedDelivery = $orderDate->copy()->addDays(rand(7, 30));
-            $status = $this->statuses[array_rand($this->statuses)];
-
-            $orderId = (string) Str::uuid();
-
-            // Create order using DB facade to avoid any model issues
-            DB::table('orders')->insert([
-                'id' => $orderId,
-                'date' => $orderDate->format('Y-m-d'),
-                'status' => $status,
-                'estimated_delivery_date' => $estimatedDelivery->format('Y-m-d'),
-                'buyer_id' => $clients->random()->id,
-                'receiver_id' => $clients->random()->id,
-                'transport_id' => $transports->random()->id,
-                'created_at' => now(),
-                'updated_at' => now(),
-            ]);
-
-            // Attach 1-5 batches to each order
-            $orderBatches = $batches->random(rand(1, 5));
-
-            foreach ($orderBatches as $batch) {
-                $quantity = rand(10, 100);
-                $pricePerUnit = $batch->product->price * (rand(80, 120) / 100);
-                $totalPrice = $quantity * $pricePerUnit;
-
-                // Cap the total price to prevent overflow - use lower limits
-                $cappedTotalPrice = min($totalPrice, 50000.00); // Lower cap for individual batch totals
-                $cappedPricePerUnit = min($pricePerUnit, 1000.00); // Lower cap for unit price
-
-                DB::table('order_batches')->insert([
-                    'id' => (string) Str::uuid(),
-                    'order_id' => $orderId,
-                    'batch_id' => $batch->id,
-                    'quantity' => $quantity,
-                    'price_per_unit' => (float) sprintf('%.2f', $cappedPricePerUnit),
-                    'total_price' => (float) sprintf('%.2f', $cappedTotalPrice),
-                    'created_at' => now(),
-                    'updated_at' => now(),
-                ]);
-            }
-        }
-    }
-}
Index: tabase/seeders/PaymentSeeder.php
===================================================================
--- database/seeders/PaymentSeeder.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,66 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\Payment;
-use App\Models\Order;
-use Illuminate\Database\Seeder;
-use Carbon\Carbon;
-use Illuminate\Support\Str;
-
-class PaymentSeeder extends Seeder
-{
-    private $currencies = [
-        'USD' => 1.00,    // Base currency
-        'EUR' => 0.85,
-        'MKD' => 55.50,
-        'GBP' => 0.73,
-        'JPY' => 110.25,
-        'CNY' => 6.45,    // Added Chinese Yuan
-        'RUB' => 75.80,   // Added Russian Ruble
-    ];
-
-    private $methods = ['bank_transfer', 'credit_card', 'cash', 'check', 'wire_transfer'];
-    private $statuses = ['pending', 'paid', 'failed', 'refunded', 'cancelled'];
-
-    public function run(): void
-    {
-        $orders = Order::all();
-
-        foreach ($orders as $order) {
-            $dueDate = Carbon::parse($order->date)->addDays(30);
-
-            // Select a random currency and get its fixed exchange rate
-            $currency = array_rand($this->currencies);
-            $exchangeRate = $this->currencies[$currency];
-
-            // Cap the amount to fit within decimal(10,2) which max is 9999999.99
-            $amount = min($order->total_amount, 9999999.99);
-
-            // Determine status
-            $status = $this->statuses[array_rand($this->statuses)];
-
-            // Set payment_date based on status
-            if ($status === 'paid') {
-                // For paid, set a random date between order date and due date
-                $daysAfterOrder = rand(1, 30);
-                $paymentDate = Carbon::parse($order->date)->addDays($daysAfterOrder);
-            } else {
-                // For non-paid, set to the due date
-                $paymentDate = $dueDate;
-            }
-
-            Payment::create([
-                'id' => (string) Str::uuid(),
-                'order_id' => $order->id,
-                'amount' => $amount,
-                'currency' => $currency,
-                'due_date' => $dueDate->format('Y-m-d'),
-                'exchange_rate' => $exchangeRate,
-                'payment_date' => $paymentDate->format('Y-m-d'),
-                'payment_method' => $this->methods[array_rand($this->methods)],
-                'payment_status' => $status,
-            ]);
-        }
-    }
-}
Index: tabase/seeders/ProducerAndProductSeeder.php
===================================================================
--- database/seeders/ProducerAndProductSeeder.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,29 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use App\Models\Producer;
-use App\Models\Product;
-use Illuminate\Database\Seeder;
-
-class ProducerAndProductSeeder extends Seeder
-{
-    public function run(): void
-    {
-        // Ensure there’s exactly one producer
-        $producer = Producer::first() ?? Producer::create([
-            'name' => 'Pharma Export',
-            'address' => '11a Street, Industrial Zone',
-            'country' => 'Macedonia',
-            'phone_number' => '+389 70 000 000',
-            'email' => 'contact@pharmaexport.com',
-        ]);
-
-        Product::factory()
-            ->count(15)
-            ->state([
-                'producer_id' => $producer->id
-            ])
-            ->create();
-    }
-}
Index: tabase/seeders/TransportSeeder.php
===================================================================
--- database/seeders/TransportSeeder.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,14 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use Illuminate\Database\Seeder;
-use App\Models\Transport;
-
-class TransportSeeder extends Seeder
-{
-    public function run(): void
-    {
-        Transport::factory()->count(10)->create();
-    }
-}
Index: tabase/seeders/UserSeeder.php
===================================================================
--- database/seeders/UserSeeder.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,33 +1,0 @@
-<?php
-
-namespace Database\Seeders;
-
-use Illuminate\Database\Seeder;
-use App\Models\User;
-use Illuminate\Support\Facades\Hash;
-use Carbon\Carbon;
-
-class UserSeeder extends Seeder
-{
-    public function run(): void
-    {
-        User::create([
-            'name' => env('INIT_USER_NAME', 'Default User'),
-            'email' => env('INIT_USER_EMAIL', 'admin@pharma.com'),
-            'email_verified_at' => Carbon::now(),
-            'password' => Hash::make(env('INIT_USER_PASS', 'password')),
-            'is_admin' => true,
-            'remember_token' => true,
-        ]);
-
-        User::create([
-            'name' => 'Regular User',
-            'email' => 'user@pharma.com',
-            'email_verified_at' => Carbon::now(),
-            'password' => Hash::make('password'),
-            'is_admin' => false,
-            'remember_token' => 10,
-        ]);
-
-    }
-}
Index: docker-compose.yml
===================================================================
--- docker-compose.yml	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ docker-compose.yml	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,29 +1,54 @@
-name: pharma-export
+version: '3.8'
 
 services:
-#  pharma-export:
-#    build:
-#      context: .
-#      dockerfile: Dockerfile
-#    hostname: pharma-export
-#    container_name: pharma-export
-#    env_file: .env
-#    restart: always
-#    ports:
-#      - 80:80
-#    depends_on:
-#      - pharma-export-db
+  app:
+    build:
+      context: .
+      dockerfile: Dockerfile
+    container_name: pharma_export
+    restart: unless-stopped
+    working_dir: /var/www
+    volumes:
+      - .:/var/www
+    ports:
+      - "8000:8000"
+    depends_on:
+      - db
+    environment:
+      APP_ENV: local
+      APP_DEBUG: "true"
+      APP_KEY: ${APP_KEY}
+      DB_CONNECTION: pgsql
+      DB_HOST: db
+      DB_PORT: 5432
+      DB_DATABASE: pharma_export
+      DB_USERNAME: postgres
+      DB_PASSWORD: secret
 
-  pharma-export-db:
-    image: postgres:alpine
-    hostname: pharma-export-db
-    container_name: pharma-export-db
-    env_file: .env
-    restart: always
+  db:
+    image: postgres:16
+    container_name: pharma_export_db
+    restart: unless-stopped
+    volumes:
+      - pgdata:/var/lib/postgresql/data
+    environment:
+      POSTGRES_DB: pharma_export
+      POSTGRES_USER: postgres
+      POSTGRES_PASSWORD: secret
     ports:
-      - 5432:5432
+      - "5432:5432"
+
+  node:
+    image: node:20
+    container_name: pharma_export_node
+    restart: unless-stopped
+    working_dir: /var/www
     volumes:
-      - pharma-export-db:/var/lib/postgresql/data
+      - .:/var/www
+    command: ["sh", "-c", "npm install && npm run dev"]
+    ports:
+      - "5173:5173"
 
 volumes:
-  pharma-export-db:
+  pgdata:
+
Index: trypoint.sh
===================================================================
--- entrypoint.sh	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,9 +1,0 @@
-#!/bin/sh
-
-set -e
-
-mkdir -p ./storage/framework/cache
-mkdir -p ./storage/framework/sessions
-mkdir -p ./storage/framework/views
-php artisan migrate:fresh --seed
-php artisan serve --host=0.0.0.0 --port=80
Index: package.json
===================================================================
--- package.json	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ package.json	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -8,11 +8,8 @@
     },
     "devDependencies": {
-        "@iconify-json/radix-icons": "^1.2.2",
-        "@iconify/vue": "^5.0.0",
         "@rushstack/eslint-patch": "^1.8.0",
         "@tailwindcss/forms": "^0.5.3",
         "@tailwindcss/postcss": "^4.1.11",
         "@tailwindcss/vite": "^4.1.11",
-        "@types/lodash": "^4.17.20",
         "@types/node": "^24.0.15",
         "@vitejs/plugin-vue": "^6.0.0",
@@ -40,26 +37,14 @@
         "@inertiajs/vue3": "^2.0.5",
         "@tailwindcss/cli": "^4.0.15",
-        "@tanstack/vue-table": "^8.21.3",
-        "@types/lodash-es": "^4.17.12",
-        "@unovis/ts": "^1.6.1",
-        "@unovis/vue": "^1.6.1",
-        "@vueuse/core": "^13.9.0",
         "bunx": "^0.1.0",
-        "chart.js": "^4.5.0",
         "class-variance-authority": "^0.7.1",
         "clsx": "^2.1.1",
-        "date-fns": "^4.1.0",
         "lib-utils": "^0.0.4",
         "lib-utils-ts": "^0.0.0-test",
-        "lodash-es": "^4.17.21",
-        "lucide-vue-next": "^0.536.0",
-        "recharts": "^3.2.1",
-        "reka-ui": "^2.5.1",
+        "reka-ui": "^2.3.2",
         "shadcn-vue": "^2.2.0",
         "tailwind-merge": "^3.3.1",
         "tailwindcss-animate": "^1.0.7",
-        "vue-chartjs": "^5.3.2",
-        "vue-loader": "^17.4.2",
-        "vue-sonner": "^2.0.2"
+        "vue-loader": "^17.4.2"
     }
 }
Index: resources/css/app.css
===================================================================
--- resources/css/app.css	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ resources/css/app.css	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -8,72 +8,63 @@
 @source '../**/*.ts';
 
-
-
 @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 5.9% 10%;
-        --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%;
-    }
+  :root {
+    --background: 0 0% 100%;
+    --foreground: 0 0% 3.9%;
+    --card: 0 0% 100%;
+    --card-foreground: 0 0% 3.9%;
+    --popover: 0 0% 100%;
+    --popover-foreground: 0 0% 3.9%;
+    --primary: 0 0% 9%;
+    --primary-foreground: 0 0% 98%;
+    --secondary: 0 0% 96.1%;
+    --secondary-foreground: 0 0% 9%;
+    --muted: 0 0% 96.1%;
+    --muted-foreground: 0 0% 45.1%;
+    --accent: 0 0% 96.1%;
+    --accent-foreground: 0 0% 9%;
+    --destructive: 0 84.2% 60.2%;
+    --destructive-foreground: 0 0% 98%;
+    --border: 0 0% 89.8%;
+    --input: 0 0% 89.8%;
+    --ring: 0 0% 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: 0 0% 3.9%;
+    --foreground: 0 0% 98%;
+    --card: 0 0% 3.9%;
+    --card-foreground: 0 0% 98%;
+    --popover: 0 0% 3.9%;
+    --popover-foreground: 0 0% 98%;
+    --primary: 0 0% 98%;
+    --primary-foreground: 0 0% 9%;
+    --secondary: 0 0% 14.9%;
+    --secondary-foreground: 0 0% 98%;
+    --muted: 0 0% 14.9%;
+    --muted-foreground: 0 0% 63.9%;
+    --accent: 0 0% 14.9%;
+    --accent-foreground: 0 0% 98%;
+    --destructive: 0 62.8% 30.6%;
+    --destructive-foreground: 0 0% 98%;
+    --border: 0 0% 14.9%;
+    --input: 0 0% 14.9%;
+    --ring: 0 0% 83.1%;
+    --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 overflow-x-hidden;
+    @apply border-border;
   }
   body {
Index: resources/js/Components/ApplicationLogo.vue
===================================================================
--- resources/js/Components/ApplicationLogo.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/ApplicationLogo.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,7 @@
+<template>
+    <svg viewBox="0 0 316 316" xmlns="http://www.w3.org/2000/svg">
+        <path
+            d="M305.8 81.125C305.77 80.995 305.69 80.885 305.65 80.755C305.56 80.525 305.49 80.285 305.37 80.075C305.29 79.935 305.17 79.815 305.07 79.685C304.94 79.515 304.83 79.325 304.68 79.175C304.55 79.045 304.39 78.955 304.25 78.845C304.09 78.715 303.95 78.575 303.77 78.475L251.32 48.275C249.97 47.495 248.31 47.495 246.96 48.275L194.51 78.475C194.33 78.575 194.19 78.725 194.03 78.845C193.89 78.955 193.73 79.045 193.6 79.175C193.45 79.325 193.34 79.515 193.21 79.685C193.11 79.815 192.99 79.935 192.91 80.075C192.79 80.285 192.71 80.525 192.63 80.755C192.58 80.875 192.51 80.995 192.48 81.125C192.38 81.495 192.33 81.875 192.33 82.265V139.625L148.62 164.795V52.575C148.62 52.185 148.57 51.805 148.47 51.435C148.44 51.305 148.36 51.195 148.32 51.065C148.23 50.835 148.16 50.595 148.04 50.385C147.96 50.245 147.84 50.125 147.74 49.995C147.61 49.825 147.5 49.635 147.35 49.485C147.22 49.355 147.06 49.265 146.92 49.155C146.76 49.025 146.62 48.885 146.44 48.785L93.99 18.585C92.64 17.805 90.98 17.805 89.63 18.585L37.18 48.785C37 48.885 36.86 49.035 36.7 49.155C36.56 49.265 36.4 49.355 36.27 49.485C36.12 49.635 36.01 49.825 35.88 49.995C35.78 50.125 35.66 50.245 35.58 50.385C35.46 50.595 35.38 50.835 35.3 51.065C35.25 51.185 35.18 51.305 35.15 51.435C35.05 51.805 35 52.185 35 52.575V232.235C35 233.795 35.84 235.245 37.19 236.025L142.1 296.425C142.33 296.555 142.58 296.635 142.82 296.725C142.93 296.765 143.04 296.835 143.16 296.865C143.53 296.965 143.9 297.015 144.28 297.015C144.66 297.015 145.03 296.965 145.4 296.865C145.5 296.835 145.59 296.775 145.69 296.745C145.95 296.655 146.21 296.565 146.45 296.435L251.36 236.035C252.72 235.255 253.55 233.815 253.55 232.245V174.885L303.81 145.945C305.17 145.165 306 143.725 306 142.155V82.265C305.95 81.875 305.89 81.495 305.8 81.125ZM144.2 227.205L100.57 202.515L146.39 176.135L196.66 147.195L240.33 172.335L208.29 190.625L144.2 227.205ZM244.75 114.995V164.795L226.39 154.225L201.03 139.625V89.825L219.39 100.395L244.75 114.995ZM249.12 57.105L292.81 82.265L249.12 107.425L205.43 82.265L249.12 57.105ZM114.49 184.425L96.13 194.995V85.305L121.49 70.705L139.85 60.135V169.815L114.49 184.425ZM91.76 27.425L135.45 52.585L91.76 77.745L48.07 52.585L91.76 27.425ZM43.67 60.135L62.03 70.705L87.39 85.305V202.545V202.555V202.565C87.39 202.735 87.44 202.895 87.46 203.055C87.49 203.265 87.49 203.485 87.55 203.695V203.705C87.6 203.875 87.69 204.035 87.76 204.195C87.84 204.375 87.89 204.575 87.99 204.745C87.99 204.745 87.99 204.755 88 204.755C88.09 204.905 88.22 205.035 88.33 205.175C88.45 205.335 88.55 205.495 88.69 205.635L88.7 205.645C88.82 205.765 88.98 205.855 89.12 205.965C89.28 206.085 89.42 206.225 89.59 206.325C89.6 206.325 89.6 206.325 89.61 206.335C89.62 206.335 89.62 206.345 89.63 206.345L139.87 234.775V285.065L43.67 229.705V60.135ZM244.75 229.705L148.58 285.075V234.775L219.8 194.115L244.75 179.875V229.705ZM297.2 139.625L253.49 164.795V114.995L278.85 100.395L297.21 89.825V139.625H297.2Z"
+        />
+    </svg>
+</template>
Index: resources/js/Components/Checkbox.vue
===================================================================
--- resources/js/Components/Checkbox.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/Checkbox.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,29 @@
+<script setup lang="ts">
+import { computed } from 'vue';
+
+const emit = defineEmits(['update:checked']);
+
+const props = defineProps<{
+    checked: boolean;
+    value?: any;
+}>();
+
+const proxyChecked = computed({
+    get() {
+        return props.checked;
+    },
+
+    set(val) {
+        emit('update:checked', val);
+    },
+});
+</script>
+
+<template>
+    <input
+        type="checkbox"
+        :value="value"
+        v-model="proxyChecked"
+        class="rounded border-gray-300 text-indigo-600 shadow-sm focus:ring-indigo-500 dark:border-gray-700 dark:bg-gray-900 dark:focus:ring-indigo-600 dark:focus:ring-offset-gray-800"
+    />
+</template>
Index: resources/js/Components/DangerButton.vue
===================================================================
--- resources/js/Components/DangerButton.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/DangerButton.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,7 @@
+<template>
+    <button
+        class="inline-flex items-center rounded-md border border-transparent bg-red-600 px-4 py-2 text-xs font-semibold uppercase tracking-widest text-white transition duration-150 ease-in-out hover:bg-red-500 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 active:bg-red-700 dark:focus:ring-offset-gray-800"
+    >
+        <slot />
+    </button>
+</template>
Index: resources/js/Components/Dropdown.vue
===================================================================
--- resources/js/Components/Dropdown.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/Dropdown.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,82 @@
+<script setup lang="ts">
+import { computed, onMounted, onUnmounted, ref } from 'vue';
+
+const props = withDefaults(
+    defineProps<{
+        align?: 'left' | 'right';
+        width?: '48';
+        contentClasses?: string;
+    }>(),
+    {
+        align: 'right',
+        width: '48',
+        contentClasses: 'py-1 bg-white dark:bg-gray-700',
+    },
+);
+
+const closeOnEscape = (e: KeyboardEvent) => {
+    if (open.value && e.key === 'Escape') {
+        open.value = false;
+    }
+};
+
+onMounted(() => document.addEventListener('keydown', closeOnEscape));
+onUnmounted(() => document.removeEventListener('keydown', closeOnEscape));
+
+const widthClass = computed(() => {
+    return {
+        48: 'w-48',
+    }[props.width.toString()];
+});
+
+const alignmentClasses = computed(() => {
+    if (props.align === 'left') {
+        return 'ltr:origin-top-left rtl:origin-top-right start-0';
+    } else if (props.align === 'right') {
+        return 'ltr:origin-top-right rtl:origin-top-left end-0';
+    } else {
+        return 'origin-top';
+    }
+});
+
+const open = ref(false);
+</script>
+
+<template>
+    <div class="relative">
+        <div @click="open = !open">
+            <slot name="trigger" />
+        </div>
+
+        <!-- Full Screen Dropdown Overlay -->
+        <div
+            v-show="open"
+            class="fixed inset-0 z-40"
+            @click="open = false"
+        ></div>
+
+        <Transition
+            enter-active-class="transition ease-out duration-200"
+            enter-from-class="opacity-0 scale-95"
+            enter-to-class="opacity-100 scale-100"
+            leave-active-class="transition ease-in duration-75"
+            leave-from-class="opacity-100 scale-100"
+            leave-to-class="opacity-0 scale-95"
+        >
+            <div
+                v-show="open"
+                class="absolute z-50 mt-2 rounded-md shadow-lg"
+                :class="[widthClass, alignmentClasses]"
+                style="display: none"
+                @click="open = false"
+            >
+                <div
+                    class="rounded-md ring-1 ring-black ring-opacity-5"
+                    :class="contentClasses"
+                >
+                    <slot name="content" />
+                </div>
+            </div>
+        </Transition>
+    </div>
+</template>
Index: resources/js/Components/DropdownLink.vue
===================================================================
--- resources/js/Components/DropdownLink.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/DropdownLink.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,16 @@
+<script setup lang="ts">
+import { Link } from '@inertiajs/vue3';
+
+defineProps<{
+    href: string;
+}>();
+</script>
+
+<template>
+    <Link
+        :href="href"
+        class="block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 transition duration-150 ease-in-out hover:bg-gray-100 focus:bg-gray-100 focus:outline-none dark:text-gray-300 dark:hover:bg-gray-800 dark:focus:bg-gray-800"
+    >
+        <slot />
+    </Link>
+</template>
Index: resources/js/Components/InputError.vue
===================================================================
--- resources/js/Components/InputError.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/InputError.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,13 @@
+<script setup lang="ts">
+defineProps<{
+    message?: string;
+}>();
+</script>
+
+<template>
+    <div v-show="message">
+        <p class="text-sm text-red-600 dark:text-red-400">
+            {{ message }}
+        </p>
+    </div>
+</template>
Index: resources/js/Components/InputLabel.vue
===================================================================
--- resources/js/Components/InputLabel.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/InputLabel.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,12 @@
+<script setup lang="ts">
+defineProps<{
+    value?: string;
+}>();
+</script>
+
+<template>
+    <label class="block text-sm font-medium text-gray-700 dark:text-gray-300">
+        <span v-if="value">{{ value }}</span>
+        <span v-else><slot /></span>
+    </label>
+</template>
Index: resources/js/Components/Modal.vue
===================================================================
--- resources/js/Components/Modal.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/Modal.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,121 @@
+<script setup lang="ts">
+import { computed, onMounted, onUnmounted, ref, watch } from 'vue';
+
+const props = withDefaults(
+    defineProps<{
+        show?: boolean;
+        maxWidth?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
+        closeable?: boolean;
+    }>(),
+    {
+        show: false,
+        maxWidth: '2xl',
+        closeable: true,
+    },
+);
+
+const emit = defineEmits(['close']);
+const dialog = ref();
+const showSlot = ref(props.show);
+
+watch(
+    () => props.show,
+    () => {
+        if (props.show) {
+            document.body.style.overflow = 'hidden';
+            showSlot.value = true;
+
+            dialog.value?.showModal();
+        } else {
+            document.body.style.overflow = '';
+
+            setTimeout(() => {
+                dialog.value?.close();
+                showSlot.value = false;
+            }, 200);
+        }
+    },
+);
+
+const close = () => {
+    if (props.closeable) {
+        emit('close');
+    }
+};
+
+const closeOnEscape = (e: KeyboardEvent) => {
+    if (e.key === 'Escape') {
+        e.preventDefault();
+
+        if (props.show) {
+            close();
+        }
+    }
+};
+
+onMounted(() => document.addEventListener('keydown', closeOnEscape));
+
+onUnmounted(() => {
+    document.removeEventListener('keydown', closeOnEscape);
+
+    document.body.style.overflow = '';
+});
+
+const maxWidthClass = computed(() => {
+    return {
+        sm: 'sm:max-w-sm',
+        md: 'sm:max-w-md',
+        lg: 'sm:max-w-lg',
+        xl: 'sm:max-w-xl',
+        '2xl': 'sm:max-w-2xl',
+    }[props.maxWidth];
+});
+</script>
+
+<template>
+    <dialog
+        class="z-50 m-0 min-h-full min-w-full overflow-y-auto bg-transparent backdrop:bg-transparent"
+        ref="dialog"
+    >
+        <div
+            class="fixed inset-0 z-50 overflow-y-auto px-4 py-6 sm:px-0"
+            scroll-region
+        >
+            <Transition
+                enter-active-class="ease-out duration-300"
+                enter-from-class="opacity-0"
+                enter-to-class="opacity-100"
+                leave-active-class="ease-in duration-200"
+                leave-from-class="opacity-100"
+                leave-to-class="opacity-0"
+            >
+                <div
+                    v-show="show"
+                    class="fixed inset-0 transform transition-all"
+                    @click="close"
+                >
+                    <div
+                        class="absolute inset-0 bg-gray-500 opacity-75 dark:bg-gray-900"
+                    />
+                </div>
+            </Transition>
+
+            <Transition
+                enter-active-class="ease-out duration-300"
+                enter-from-class="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
+                enter-to-class="opacity-100 translate-y-0 sm:scale-100"
+                leave-active-class="ease-in duration-200"
+                leave-from-class="opacity-100 translate-y-0 sm:scale-100"
+                leave-to-class="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
+            >
+                <div
+                    v-show="show"
+                    class="mb-6 transform overflow-hidden rounded-lg bg-white shadow-xl transition-all sm:mx-auto sm:w-full dark:bg-gray-800"
+                    :class="maxWidthClass"
+                >
+                    <slot v-if="showSlot" />
+                </div>
+            </Transition>
+        </div>
+    </dialog>
+</template>
Index: resources/js/Components/NavLink.vue
===================================================================
--- resources/js/Components/NavLink.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/NavLink.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,21 @@
+<script setup lang="ts">
+import { computed } from 'vue';
+import { Link } from '@inertiajs/vue3';
+
+const props = defineProps<{
+    href: string;
+    active?: boolean;
+}>();
+
+const classes = computed(() =>
+    props.active
+        ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 dark:border-indigo-600 text-sm font-medium leading-5 text-gray-900 dark:text-gray-100 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out'
+        : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-700 focus:outline-none focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 dark:focus:border-gray-700 transition duration-150 ease-in-out',
+);
+</script>
+
+<template>
+    <Link :href="href" :class="classes">
+        <slot />
+    </Link>
+</template>
Index: resources/js/Components/PrimaryButton.vue
===================================================================
--- resources/js/Components/PrimaryButton.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/PrimaryButton.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,7 @@
+<template>
+    <button
+        class="inline-flex items-center rounded-md border border-transparent bg-gray-800 px-4 py-2 text-xs font-semibold uppercase tracking-widest text-white transition duration-150 ease-in-out hover:bg-gray-700 focus:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 active:bg-gray-900 dark:bg-gray-200 dark:text-gray-800 dark:hover:bg-white dark:focus:bg-white dark:focus:ring-offset-gray-800 dark:active:bg-gray-300"
+    >
+        <slot />
+    </button>
+</template>
Index: resources/js/Components/ResponsiveNavLink.vue
===================================================================
--- resources/js/Components/ResponsiveNavLink.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/ResponsiveNavLink.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,21 @@
+<script setup lang="ts">
+import { computed } from 'vue';
+import { Link } from '@inertiajs/vue3';
+
+const props = defineProps<{
+    href: string;
+    active?: boolean;
+}>();
+
+const classes = computed(() =>
+    props.active
+        ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 dark:border-indigo-600 text-start text-base font-medium text-indigo-700 dark:text-indigo-300 bg-indigo-50 dark:bg-indigo-900/50 focus:outline-none focus:text-indigo-800 dark:focus:text-indigo-200 focus:bg-indigo-100 dark:focus:bg-indigo-900 focus:border-indigo-700 dark:focus:border-indigo-300 transition duration-150 ease-in-out'
+        : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 hover:border-gray-300 dark:hover:border-gray-600 focus:outline-none focus:text-gray-800 dark:focus:text-gray-200 focus:bg-gray-50 dark:focus:bg-gray-700 focus:border-gray-300 dark:focus:border-gray-600 transition duration-150 ease-in-out',
+);
+</script>
+
+<template>
+    <Link :href="href" :class="classes">
+        <slot />
+    </Link>
+</template>
Index: resources/js/Components/SecondaryButton.vue
===================================================================
--- resources/js/Components/SecondaryButton.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/SecondaryButton.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,19 @@
+<script setup lang="ts">
+withDefaults(
+    defineProps<{
+        type?: 'button' | 'submit' | 'reset';
+    }>(),
+    {
+        type: 'button',
+    },
+);
+</script>
+
+<template>
+    <button
+        :type="type"
+        class="inline-flex items-center rounded-md border border-gray-300 bg-white px-4 py-2 text-xs font-semibold uppercase tracking-widest text-gray-700 shadow-sm transition duration-150 ease-in-out hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 disabled:opacity-25 dark:border-gray-500 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 dark:focus:ring-offset-gray-800"
+    >
+        <slot />
+    </button>
+</template>
Index: resources/js/Components/TextInput.vue
===================================================================
--- resources/js/Components/TextInput.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Components/TextInput.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,23 @@
+<script setup lang="ts">
+import { onMounted, ref } from 'vue';
+
+const model = defineModel<string>({ required: true });
+
+const input = ref<HTMLInputElement | null>(null);
+
+onMounted(() => {
+    if (input.value?.hasAttribute('autofocus')) {
+        input.value?.focus();
+    }
+});
+
+defineExpose({ focus: () => input.value?.focus() });
+</script>
+
+<template>
+    <input
+        class="rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 dark:focus:border-indigo-600 dark:focus:ring-indigo-600"
+        v-model="model"
+        ref="input"
+    />
+</template>
Index: sources/js/Layout/App.vue
===================================================================
--- resources/js/Layout/App.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,321 +1,0 @@
-<script setup lang="ts">
-import {
-    Bell,
-    CircleUser,
-    DollarSignIcon,
-    Home,
-    LineChart,
-    Menu,
-    Package,
-    Package2,
-    Pill,
-    PillBottle,
-    Search,
-    ShoppingCart,
-    Truck,
-    Users,
-} from 'lucide-vue-next';
-import { computed } from 'vue';
-import { route } from 'ziggy-js';
-import type { FunctionalComponent, HTMLAttributes, VNodeProps } from 'vue';
-
-import useTheme from '@/composables/useTheme';
-import { Badge } from '@/components/ui/badge';
-import { Button } from '@/components/ui/button';
-import {
-    Card,
-    CardContent,
-    CardDescription,
-    CardHeader,
-    CardTitle,
-} from '@/components/ui/card';
-import {
-    DropdownMenu,
-    DropdownMenuContent,
-    DropdownMenuItem,
-    DropdownMenuLabel,
-    DropdownMenuSeparator,
-    DropdownMenuTrigger,
-} from '@/components/ui/dropdown-menu';
-import { Input } from '@/components/ui/input';
-import { Toaster } from '@/components/ui/sonner';
-import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet';
-import { Link, useForm, router, usePage } from '@inertiajs/vue3';
-import { Icon } from '@iconify/vue';
-
-// Define a consistent interface for navigation items
-interface NavItem {
-    name: string;
-    href: string;
-    icon: FunctionalComponent<HTMLAttributes & VNodeProps>;
-    current: boolean;
-    routeName: string; // Add routeName to the interface
-    model?: string;
-}
-
-// Form and Logout logic
-const form = useForm({});
-const logout = () => {
-    router.post(route('logout'), {}, { preserveScroll: true });
-};
-const { setTheme } = useTheme();
-const page = usePage();
-const isAdmin = computed(() => page.props.auth?.user?.is_admin);
-
-// Refactored navigation items as a computed property
-const navigationItems = computed<NavItem[]>(() => [
-    {
-        name: 'Dashboard',
-        href: route('dashboard'),
-        icon: Home,
-        current: route().current('dashboard'),
-        routeName: 'Dashboard',
-    },
-    {
-        name: 'Products',
-        href: route('generic.index', { model: 'products' }),
-        icon: Pill,
-        current: route().current('generic.index', { model: 'products' }),
-        routeName: 'GenericModelPage',
-        model: 'product',
-    },
-    {
-        name: 'Batches',
-        href: route('generic.index', { model: 'batches' }),
-        icon: PillBottle,
-        current: route().current('generic.index', { model: 'batches' }),
-        routeName: 'GenericModelPage',
-        model: 'batches',
-    },
-    {
-        name: 'Clients',
-        href: route('generic.index', { model: 'clients' }),
-        icon: Users,
-        current: route().current('generic.index', { model: 'clients' }),
-        routeName: 'GenericModelPage',
-        model: 'client',
-    },
-    {
-        name: 'Orders',
-        href: route('generic.index', { model: 'orders' }),
-        icon: Package,
-        current: route().current('generic.index', { model: 'orders' }),
-        routeName: 'GenericModelPage',
-        model: 'order',
-    },
-    {
-        name: 'Transports',
-        href: route('generic.index', { model: 'transports' }),
-        icon: Truck,
-        current: route().current('generic.index', { model: 'transports' }),
-        routeName: 'GenericModelPage',
-        model: 'transport',
-    },
-    {
-        name: 'Payments',
-        href: route('generic.index', { model: 'payments' }),
-        icon: DollarSignIcon,
-        current: route().current('generic.index', { model: 'payments' }),
-        routeName: 'GenericModelPage',
-        model: 'payments',
-    },
-]);
-
-// const sidebarItems = computed(() => {
-//    let items = [...navigationItems];
-//
-//    if (isAdmin.value) {
-//        items.push({
-//            name: 'Users',
-//            href: route('generic.index', { model: 'users' }),
-//
-//        })
-//    }
-//    return items;
-// });
-
-// Helper to determine active link classes and remove duplication
-const getLinkClasses = (item: NavItem): string => {
-    const baseClasses =
-        'flex items-center gap-3 rounded-lg px-3 py-2 transition-all hover:text-primary';
-
-    // Check if both the route name and the 'model' parameter match
-    const isActive =
-        item.routeName === page.component &&
-        item.model === route().params.model;
-
-    return isActive
-        ? `${baseClasses} bg-muted text-primary`
-        : `${baseClasses} text-muted-foreground`;
-};
-</script>
-
-<template>
-    <Toaster />
-    <div
-        class="grid min-h-screen w-full md:grid-cols-[220px_1fr] lg:grid-cols-[280px_1fr]"
-    >
-        <div class="bg-muted/40 hidden border-r md:block">
-            <div class="flex h-full max-h-screen flex-col gap-2">
-                <div
-                    class="flex h-14 items-center border-b px-4 lg:h-[60px] lg:px-6"
-                >
-                    <a href="/" class="flex items-center gap-2 font-semibold">
-                        <Package2 class="h-6 w-6" />
-                        <span class="">Pharma Export</span>
-                    </a>
-                    <Button
-                        variant="outline"
-                        size="icon"
-                        class="ml-auto h-8 w-8"
-                    >
-                        <Bell class="h-4 w-4" />
-                        <span class="sr-only">Toggle notifications</span>
-                    </Button>
-                </div>
-                <div class="flex-1">
-                    <nav
-                        class="grid items-start px-2 text-sm font-medium lg:px-4"
-                    >
-                        <Link
-                            v-for="item in navigationItems"
-                            :key="item.name"
-                            :href="item.href"
-                            :class="getLinkClasses(item)"
-                        >
-                            <component :is="item.icon" class="h-4 w-4" />
-                            {{ item.name }}
-                        </Link>
-                    </nav>
-                </div>
-            </div>
-        </div>
-        <div class="flex flex-col">
-            <header
-                class="bg-muted/40 flex h-14 items-center gap-4 border-b px-4 lg:h-[60px] lg:px-6"
-            >
-                <Sheet>
-                    <SheetTrigger as-child>
-                        <Button
-                            variant="outline"
-                            size="icon"
-                            class="shrink-0 md:hidden"
-                        >
-                            <Menu class="h-5 w-5" />
-                            <span class="sr-only">Toggle navigation menu</span>
-                        </Button>
-                    </SheetTrigger>
-                    <SheetContent side="left" class="flex flex-col">
-                        <nav class="grid gap-2 text-lg font-medium">
-                            <a
-                                href="#"
-                                class="flex items-center gap-2 text-lg font-semibold"
-                            >
-                                <Package2 class="h-6 w-6" />
-                                <span class="sr-only">Acme Inc</span>
-                            </a>
-                            <Link
-                                v-for="item in navigationItems"
-                                :key="item.name"
-                                :href="item.href"
-                                :class="getLinkClasses(item)"
-                                class="text-muted-foreground hover:text-foreground mx-[-0.65rem] flex items-center gap-4 rounded-xl px-3 py-2"
-                            >
-                                <component :is="item.icon" class="h-5 w-5" />
-                                {{ item.name }}
-                            </Link>
-                        </nav>
-                        <div class="mt-auto">
-                            <Card>
-                                <CardHeader>
-                                    <CardTitle>Upgrade to Pro</CardTitle>
-                                    <CardDescription>
-                                        Unlock all features and get unlimited
-                                        access to our support team.
-                                    </CardDescription>
-                                </CardHeader>
-                                <CardContent>
-                                    <Button size="sm" class="w-full">
-                                        Upgrade
-                                    </Button>
-                                </CardContent>
-                            </Card>
-                        </div>
-                    </SheetContent>
-                </Sheet>
-                <div class="w-full flex-1">
-                    <form>
-                        <div class="relative">
-<!--                            <Search-->
-<!--                                class="text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"-->
-<!--                            />-->
-<!--                            <Input-->
-<!--                                type="search"-->
-<!--                                placeholder="Search products..."-->
-<!--                                class="bg-background w-full appearance-none pl-8 shadow-none md:w-2/3 lg:w-1/3"-->
-<!--                            />-->
-                        </div>
-                    </form>
-                </div>
-                <DropdownMenu>
-                    <DropdownMenuTrigger as-child>
-                        <Button variant="outline">
-                            <Icon
-                                icon="radix-icons:moon"
-                                class="h-[1.2rem] w-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"
-                            />
-                            <Icon
-                                icon="radix-icons:sun"
-                                class="absolute h-[1.2rem] w-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0"
-                            />
-                            <span class="sr-only">Toggle theme</span>
-                        </Button>
-                    </DropdownMenuTrigger>
-                    <DropdownMenuContent align="end">
-                        <DropdownMenuItem @click="setTheme('light')">
-                            Light
-                        </DropdownMenuItem>
-                        <DropdownMenuItem @click="setTheme('dark')">
-                            Dark
-                        </DropdownMenuItem>
-                        <DropdownMenuItem @click="setTheme('system')">
-                            System
-                        </DropdownMenuItem>
-                    </DropdownMenuContent>
-                </DropdownMenu>
-                <DropdownMenu>
-                    <DropdownMenuTrigger as-child>
-                        <Button
-                            variant="secondary"
-                            size="icon"
-                            class="rounded-full"
-                        >
-                            <CircleUser class="h-5 w-5" />
-                            <span class="sr-only">Toggle user menu</span>
-                        </Button>
-                    </DropdownMenuTrigger>
-                    <DropdownMenuContent align="end">
-                        <DropdownMenuLabel>My Account</DropdownMenuLabel>
-                        <DropdownMenuSeparator />
-                        <DropdownMenuItem>Settings</DropdownMenuItem>
-                        <DropdownMenuItem>Support</DropdownMenuItem>
-                        <DropdownMenuSeparator />
-                        <DropdownMenuItem @click="logout"
-                            >Logout</DropdownMenuItem
-                        >
-                    </DropdownMenuContent>
-                </DropdownMenu>
-            </header>
-            <main class="flex flex-1 flex-col gap-4 p-4 lg:gap-6 lg:p-6">
-                <div class="flex items-center">
-                    <h1 class="text-lg font-semibold md:text-2xl">
-                        <slot name="title"></slot>
-                    </h1>
-                </div>
-                <div class="">
-                    <slot />
-                </div>
-            </main>
-        </div>
-    </div>
-</template>
Index: resources/js/Layouts/AuthenticatedLayout.vue
===================================================================
--- resources/js/Layouts/AuthenticatedLayout.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Layouts/AuthenticatedLayout.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,198 @@
+<script setup lang="ts">
+import { ref } from 'vue';
+import ApplicationLogo from '@/Components/ApplicationLogo.vue';
+import Dropdown from '@/Components/Dropdown.vue';
+import DropdownLink from '@/Components/DropdownLink.vue';
+import NavLink from '@/Components/NavLink.vue';
+import ResponsiveNavLink from '@/Components/ResponsiveNavLink.vue';
+import { Link } from '@inertiajs/vue3';
+
+const showingNavigationDropdown = ref(false);
+</script>
+
+<template>
+    <div>
+        <div class="min-h-screen bg-gray-100 dark:bg-gray-900">
+            <nav
+                class="border-b border-gray-100 bg-white dark:border-gray-700 dark:bg-gray-800"
+            >
+                <!-- Primary Navigation Menu -->
+                <div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
+                    <div class="flex h-16 justify-between">
+                        <div class="flex">
+                            <!-- Logo -->
+                            <div class="flex shrink-0 items-center">
+                                <Link :href="route('dashboard')">
+                                    <ApplicationLogo
+                                        class="block h-9 w-auto fill-current text-gray-800 dark:text-gray-200"
+                                    />
+                                </Link>
+                            </div>
+
+                            <!-- Navigation Links -->
+                            <div
+                                class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex"
+                            >
+                                <NavLink
+                                    :href="route('dashboard')"
+                                    :active="route().current('dashboard')"
+                                >
+                                    Dashboard
+                                </NavLink>
+                            </div>
+                        </div>
+
+                        <div class="hidden sm:ms-6 sm:flex sm:items-center">
+                            <!-- Settings Dropdown -->
+                            <div class="relative ms-3">
+                                <Dropdown align="right" width="48">
+                                    <template #trigger>
+                                        <span class="inline-flex rounded-md">
+                                            <button
+                                                type="button"
+                                                class="inline-flex items-center rounded-md border border-transparent bg-white px-3 py-2 text-sm font-medium leading-4 text-gray-500 transition duration-150 ease-in-out hover:text-gray-700 focus:outline-none dark:bg-gray-800 dark:text-gray-400 dark:hover:text-gray-300"
+                                            >
+                                                {{ $page.props.auth.user.name }}
+
+                                                <svg
+                                                    class="-me-0.5 ms-2 h-4 w-4"
+                                                    xmlns="http://www.w3.org/2000/svg"
+                                                    viewBox="0 0 20 20"
+                                                    fill="currentColor"
+                                                >
+                                                    <path
+                                                        fill-rule="evenodd"
+                                                        d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
+                                                        clip-rule="evenodd"
+                                                    />
+                                                </svg>
+                                            </button>
+                                        </span>
+                                    </template>
+
+                                    <template #content>
+                                        <DropdownLink
+                                            :href="route('profile.edit')"
+                                        >
+                                            Profile
+                                        </DropdownLink>
+                                        <DropdownLink
+                                            :href="route('logout')"
+                                            method="post"
+                                            as="button"
+                                        >
+                                            Log Out
+                                        </DropdownLink>
+                                    </template>
+                                </Dropdown>
+                            </div>
+                        </div>
+
+                        <!-- Hamburger -->
+                        <div class="-me-2 flex items-center sm:hidden">
+                            <button
+                                @click="
+                                    showingNavigationDropdown =
+                                        !showingNavigationDropdown
+                                "
+                                class="inline-flex items-center justify-center rounded-md p-2 text-gray-400 transition duration-150 ease-in-out hover:bg-gray-100 hover:text-gray-500 focus:bg-gray-100 focus:text-gray-500 focus:outline-none dark:text-gray-500 dark:hover:bg-gray-900 dark:hover:text-gray-400 dark:focus:bg-gray-900 dark:focus:text-gray-400"
+                            >
+                                <svg
+                                    class="h-6 w-6"
+                                    stroke="currentColor"
+                                    fill="none"
+                                    viewBox="0 0 24 24"
+                                >
+                                    <path
+                                        :class="{
+                                            hidden: showingNavigationDropdown,
+                                            'inline-flex':
+                                                !showingNavigationDropdown,
+                                        }"
+                                        stroke-linecap="round"
+                                        stroke-linejoin="round"
+                                        stroke-width="2"
+                                        d="M4 6h16M4 12h16M4 18h16"
+                                    />
+                                    <path
+                                        :class="{
+                                            hidden: !showingNavigationDropdown,
+                                            'inline-flex':
+                                                showingNavigationDropdown,
+                                        }"
+                                        stroke-linecap="round"
+                                        stroke-linejoin="round"
+                                        stroke-width="2"
+                                        d="M6 18L18 6M6 6l12 12"
+                                    />
+                                </svg>
+                            </button>
+                        </div>
+                    </div>
+                </div>
+
+                <!-- Responsive Navigation Menu -->
+                <div
+                    :class="{
+                        block: showingNavigationDropdown,
+                        hidden: !showingNavigationDropdown,
+                    }"
+                    class="sm:hidden"
+                >
+                    <div class="space-y-1 pb-3 pt-2">
+                        <ResponsiveNavLink
+                            :href="route('dashboard')"
+                            :active="route().current('dashboard')"
+                        >
+                            Dashboard
+                        </ResponsiveNavLink>
+                    </div>
+
+                    <!-- Responsive Settings Options -->
+                    <div
+                        class="border-t border-gray-200 pb-1 pt-4 dark:border-gray-600"
+                    >
+                        <div class="px-4">
+                            <div
+                                class="text-base font-medium text-gray-800 dark:text-gray-200"
+                            >
+                                {{ $page.props.auth.user.name }}
+                            </div>
+                            <div class="text-sm font-medium text-gray-500">
+                                {{ $page.props.auth.user.email }}
+                            </div>
+                        </div>
+
+                        <div class="mt-3 space-y-1">
+                            <ResponsiveNavLink :href="route('profile.edit')">
+                                Profile
+                            </ResponsiveNavLink>
+                            <ResponsiveNavLink
+                                :href="route('logout')"
+                                method="post"
+                                as="button"
+                            >
+                                Log Out
+                            </ResponsiveNavLink>
+                        </div>
+                    </div>
+                </div>
+            </nav>
+
+            <!-- Page Heading -->
+            <header
+                class="bg-white shadow dark:bg-gray-800"
+                v-if="$slots.header"
+            >
+                <div class="mx-auto max-w-7xl px-4 py-6 sm:px-6 lg:px-8">
+                    <slot name="header" />
+                </div>
+            </header>
+
+            <!-- Page Content -->
+            <main>
+                <slot />
+            </main>
+        </div>
+    </div>
+</template>
Index: resources/js/Layouts/GuestLayout.vue
===================================================================
--- resources/js/Layouts/GuestLayout.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Layouts/GuestLayout.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,22 @@
+<script setup lang="ts">
+import ApplicationLogo from '@/Components/ApplicationLogo.vue';
+import { Link } from '@inertiajs/vue3';
+</script>
+
+<template>
+    <div
+        class="flex min-h-screen flex-col items-center bg-gray-100 pt-6 sm:justify-center sm:pt-0 dark:bg-gray-900"
+    >
+        <div>
+            <Link href="/">
+                <ApplicationLogo class="h-20 w-20 fill-current text-gray-500" />
+            </Link>
+        </div>
+
+        <div
+            class="mt-6 w-full overflow-hidden bg-white px-6 py-4 shadow-md sm:max-w-md sm:rounded-lg dark:bg-gray-800"
+        >
+            <slot />
+        </div>
+    </div>
+</template>
Index: resources/js/Pages/Auth/ConfirmPassword.vue
===================================================================
--- resources/js/Pages/Auth/ConfirmPassword.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Auth/ConfirmPassword.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,57 @@
+<script setup lang="ts">
+import GuestLayout from '@/Layouts/GuestLayout.vue';
+import InputError from '@/Components/InputError.vue';
+import InputLabel from '@/Components/InputLabel.vue';
+import PrimaryButton from '@/Components/PrimaryButton.vue';
+import TextInput from '@/Components/TextInput.vue';
+import { Head, useForm } from '@inertiajs/vue3';
+
+const form = useForm({
+    password: '',
+});
+
+const submit = () => {
+    form.post(route('password.confirm'), {
+        onFinish: () => {
+            form.reset();
+        },
+    });
+};
+</script>
+
+<template>
+    <GuestLayout>
+        <Head title="Confirm Password" />
+
+        <div class="mb-4 text-sm text-gray-600 dark:text-gray-400">
+            This is a secure area of the application. Please confirm your
+            password before continuing.
+        </div>
+
+        <form @submit.prevent="submit">
+            <div>
+                <InputLabel for="password" value="Password" />
+                <TextInput
+                    id="password"
+                    type="password"
+                    class="mt-1 block w-full"
+                    v-model="form.password"
+                    required
+                    autocomplete="current-password"
+                    autofocus
+                />
+                <InputError class="mt-2" :message="form.errors.password" />
+            </div>
+
+            <div class="mt-4 flex justify-end">
+                <PrimaryButton
+                    class="ms-4"
+                    :class="{ 'opacity-25': form.processing }"
+                    :disabled="form.processing"
+                >
+                    Confirm
+                </PrimaryButton>
+            </div>
+        </form>
+    </GuestLayout>
+</template>
Index: resources/js/Pages/Auth/ForgotPassword.vue
===================================================================
--- resources/js/Pages/Auth/ForgotPassword.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Auth/ForgotPassword.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,66 @@
+<script setup lang="ts">
+import GuestLayout from '@/Layouts/GuestLayout.vue';
+import InputError from '@/Components/InputError.vue';
+import InputLabel from '@/Components/InputLabel.vue';
+import PrimaryButton from '@/Components/PrimaryButton.vue';
+import TextInput from '@/Components/TextInput.vue';
+import { Head, useForm } from '@inertiajs/vue3';
+
+defineProps<{
+    status?: string;
+}>();
+
+const form = useForm({
+    email: '',
+});
+
+const submit = () => {
+    form.post(route('password.email'));
+};
+</script>
+
+<template>
+    <GuestLayout>
+        <Head title="Forgot Password" />
+
+        <div class="mb-4 text-sm text-gray-600 dark:text-gray-400">
+            Forgot your password? No problem. Just let us know your email
+            address and we will email you a password reset link that will allow
+            you to choose a new one.
+        </div>
+
+        <div
+            v-if="status"
+            class="mb-4 text-sm font-medium text-green-600 dark:text-green-400"
+        >
+            {{ status }}
+        </div>
+
+        <form @submit.prevent="submit">
+            <div>
+                <InputLabel for="email" value="Email" />
+
+                <TextInput
+                    id="email"
+                    type="email"
+                    class="mt-1 block w-full"
+                    v-model="form.email"
+                    required
+                    autofocus
+                    autocomplete="username"
+                />
+
+                <InputError class="mt-2" :message="form.errors.email" />
+            </div>
+
+            <div class="mt-4 flex items-center justify-end">
+                <PrimaryButton
+                    :class="{ 'opacity-25': form.processing }"
+                    :disabled="form.processing"
+                >
+                    Email Password Reset Link
+                </PrimaryButton>
+            </div>
+        </form>
+    </GuestLayout>
+</template>
Index: resources/js/Pages/Auth/Login.vue
===================================================================
--- resources/js/Pages/Auth/Login.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ resources/js/Pages/Auth/Login.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,78 +1,98 @@
 <script setup lang="ts">
-import {Button} from "@/components/ui/button"
-import {Card, CardContent, CardDescription, CardHeader, CardTitle} from "@/components/ui/card"
-import {Input} from "@/components/ui/input"
-import {Label} from "@/components/ui/label"
-import {useForm} from "@inertiajs/vue3";
-import {computed} from "vue";
-import {route} from 'ziggy-js'
+import Checkbox from '@/Components/Checkbox.vue';
+import GuestLayout from '@/Layouts/GuestLayout.vue';
+import InputError from '@/Components/InputError.vue';
+import InputLabel from '@/Components/InputLabel.vue';
+import PrimaryButton from '@/Components/PrimaryButton.vue';
+import TextInput from '@/Components/TextInput.vue';
+import { Head, Link, useForm } from '@inertiajs/vue3';
+
+defineProps<{
+    canResetPassword?: boolean;
+    status?: string;
+}>();
 
 const form = useForm({
     email: '',
     password: '',
+    remember: false,
 });
 
 const submit = () => {
-    form.post(route('storeLogin'), {
-        preserveScroll: true,
-        onSuccess: () => form.reset('password'),
+    form.post(route('login'), {
+        onFinish: () => {
+            form.reset('password');
+        },
     });
 };
-
-const errors = computed(() => ({
-    email: form.errors.email,
-    password: form.errors.password,
-}));
 </script>
 
 <template>
-    <div class="h-screen flex items-center justify-center">
-        <Card class="w-100">
-            <CardHeader>
-                <CardTitle class="text-2xl">
-                    Login
-                </CardTitle>
-                <CardDescription>
-                    Enter your email below to login to your account
-                </CardDescription>
-            </CardHeader>
-            <CardContent>
-                <div class="grid gap-4">
-                    <form @submit.prevent="submit">
-                        <div class="grid gap-2">
-                            <Label for="email">Email</Label>
-                            <Input
-                                id="email"
-                                type="email"
-                                v-model="form.email"
-                                :class="{'is-invalid':errors.email}"
-                                placeholder="m@example.com"
-                                required
-                            />
-                            <span v-if="errors.email" class="text-red-600 text-sm">{{ errors.email }}</span>
-                        </div>
-                        <div class="grid gap-2">
-                            <div class="flex items-center">
-                                <Label for="password">Password</Label>
-                                <a href="#" class="ml-auto inline-block text-sm underline">
-                                    Forgot your password?
-                                </a>
-                            </div>
-                            <Input
-                                id="password"
-                                type="password"
-                                v-model="form.password"
-                                :class="{'border-red-600':errors.password}"
-                                required
-                            />
-                        </div>
-                        <Button type="submit" class="w-full" :disabled="form.processing">
-                            <span v-if="form.processing">Logging in...</span>
-                            <span v-else>Login</span>
-                        </Button>
-                    </form>
-                </div>
-            </CardContent>
-        </Card>
-    </div>
+    <GuestLayout>
+        <Head title="Log in" />
+
+        <div v-if="status" class="mb-4 text-sm font-medium text-green-600">
+            {{ status }}
+        </div>
+
+        <form @submit.prevent="submit">
+            <div>
+                <InputLabel for="email" value="Email" />
+
+                <TextInput
+                    id="email"
+                    type="email"
+                    class="mt-1 block w-full"
+                    v-model="form.email"
+                    required
+                    autofocus
+                    autocomplete="username"
+                />
+
+                <InputError class="mt-2" :message="form.errors.email" />
+            </div>
+
+            <div class="mt-4">
+                <InputLabel for="password" value="Password" />
+
+                <TextInput
+                    id="password"
+                    type="password"
+                    class="mt-1 block w-full"
+                    v-model="form.password"
+                    required
+                    autocomplete="current-password"
+                />
+
+                <InputError class="mt-2" :message="form.errors.password" />
+            </div>
+
+            <div class="mt-4 block">
+                <label class="flex items-center">
+                    <Checkbox name="remember" v-model:checked="form.remember" />
+                    <span class="ms-2 text-sm text-gray-600 dark:text-gray-400"
+                        >Remember me</span
+                    >
+                </label>
+            </div>
+
+            <div class="mt-4 flex items-center justify-end">
+                <Link
+                    v-if="canResetPassword"
+                    :href="route('password.request')"
+                    class="rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:text-gray-400 dark:hover:text-gray-100 dark:focus:ring-offset-gray-800"
+                >
+                    Forgot your password?
+                </Link>
+
+                <PrimaryButton
+                    class="ms-4"
+                    :class="{ 'opacity-25': form.processing }"
+                    :disabled="form.processing"
+                >
+                    Log in
+                </PrimaryButton>
+            </div>
+        </form>
+    </GuestLayout>
 </template>
Index: resources/js/Pages/Auth/Register.vue
===================================================================
--- resources/js/Pages/Auth/Register.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Auth/Register.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,115 @@
+<script setup lang="ts">
+import GuestLayout from '@/Layouts/GuestLayout.vue';
+import InputError from '@/Components/InputError.vue';
+import InputLabel from '@/Components/InputLabel.vue';
+import PrimaryButton from '@/Components/PrimaryButton.vue';
+import TextInput from '@/Components/TextInput.vue';
+import { Head, Link, useForm } from '@inertiajs/vue3';
+
+const form = useForm({
+    name: '',
+    email: '',
+    password: '',
+    password_confirmation: '',
+});
+
+const submit = () => {
+    form.post(route('register'), {
+        onFinish: () => {
+            form.reset('password', 'password_confirmation');
+        },
+    });
+};
+</script>
+
+<template>
+    <GuestLayout>
+        <Head title="Register" />
+
+        <form @submit.prevent="submit">
+            <div>
+                <InputLabel for="name" value="Name" />
+
+                <TextInput
+                    id="name"
+                    type="text"
+                    class="mt-1 block w-full"
+                    v-model="form.name"
+                    required
+                    autofocus
+                    autocomplete="name"
+                />
+
+                <InputError class="mt-2" :message="form.errors.name" />
+            </div>
+
+            <div class="mt-4">
+                <InputLabel for="email" value="Email" />
+
+                <TextInput
+                    id="email"
+                    type="email"
+                    class="mt-1 block w-full"
+                    v-model="form.email"
+                    required
+                    autocomplete="username"
+                />
+
+                <InputError class="mt-2" :message="form.errors.email" />
+            </div>
+
+            <div class="mt-4">
+                <InputLabel for="password" value="Password" />
+
+                <TextInput
+                    id="password"
+                    type="password"
+                    class="mt-1 block w-full"
+                    v-model="form.password"
+                    required
+                    autocomplete="new-password"
+                />
+
+                <InputError class="mt-2" :message="form.errors.password" />
+            </div>
+
+            <div class="mt-4">
+                <InputLabel
+                    for="password_confirmation"
+                    value="Confirm Password"
+                />
+
+                <TextInput
+                    id="password_confirmation"
+                    type="password"
+                    class="mt-1 block w-full"
+                    v-model="form.password_confirmation"
+                    required
+                    autocomplete="new-password"
+                />
+
+                <InputError
+                    class="mt-2"
+                    :message="form.errors.password_confirmation"
+                />
+            </div>
+
+            <div class="mt-4 flex items-center justify-end">
+                <Link
+                    :href="route('login')"
+                    class="rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:text-gray-400 dark:hover:text-gray-100 dark:focus:ring-offset-gray-800"
+                >
+                    Already registered?
+                </Link>
+
+                <PrimaryButton
+                    class="ms-4"
+                    :class="{ 'opacity-25': form.processing }"
+                    :disabled="form.processing"
+                >
+                    Register
+                </PrimaryButton>
+            </div>
+        </form>
+    </GuestLayout>
+</template>
Index: resources/js/Pages/Auth/ResetPassword.vue
===================================================================
--- resources/js/Pages/Auth/ResetPassword.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Auth/ResetPassword.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,97 @@
+<script setup lang="ts">
+import GuestLayout from '@/Layouts/GuestLayout.vue';
+import InputError from '@/Components/InputError.vue';
+import InputLabel from '@/Components/InputLabel.vue';
+import PrimaryButton from '@/Components/PrimaryButton.vue';
+import TextInput from '@/Components/TextInput.vue';
+import { Head, useForm } from '@inertiajs/vue3';
+
+const props = defineProps<{
+    email: string;
+    token: string;
+}>();
+
+const form = useForm({
+    token: props.token,
+    email: props.email,
+    password: '',
+    password_confirmation: '',
+});
+
+const submit = () => {
+    form.post(route('password.store'), {
+        onFinish: () => {
+            form.reset('password', 'password_confirmation');
+        },
+    });
+};
+</script>
+
+<template>
+    <GuestLayout>
+        <Head title="Reset Password" />
+
+        <form @submit.prevent="submit">
+            <div>
+                <InputLabel for="email" value="Email" />
+
+                <TextInput
+                    id="email"
+                    type="email"
+                    class="mt-1 block w-full"
+                    v-model="form.email"
+                    required
+                    autofocus
+                    autocomplete="username"
+                />
+
+                <InputError class="mt-2" :message="form.errors.email" />
+            </div>
+
+            <div class="mt-4">
+                <InputLabel for="password" value="Password" />
+
+                <TextInput
+                    id="password"
+                    type="password"
+                    class="mt-1 block w-full"
+                    v-model="form.password"
+                    required
+                    autocomplete="new-password"
+                />
+
+                <InputError class="mt-2" :message="form.errors.password" />
+            </div>
+
+            <div class="mt-4">
+                <InputLabel
+                    for="password_confirmation"
+                    value="Confirm Password"
+                />
+
+                <TextInput
+                    id="password_confirmation"
+                    type="password"
+                    class="mt-1 block w-full"
+                    v-model="form.password_confirmation"
+                    required
+                    autocomplete="new-password"
+                />
+
+                <InputError
+                    class="mt-2"
+                    :message="form.errors.password_confirmation"
+                />
+            </div>
+
+            <div class="mt-4 flex items-center justify-end">
+                <PrimaryButton
+                    :class="{ 'opacity-25': form.processing }"
+                    :disabled="form.processing"
+                >
+                    Reset Password
+                </PrimaryButton>
+            </div>
+        </form>
+    </GuestLayout>
+</template>
Index: resources/js/Pages/Auth/VerifyEmail.vue
===================================================================
--- resources/js/Pages/Auth/VerifyEmail.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Auth/VerifyEmail.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,59 @@
+<script setup lang="ts">
+import { computed } from 'vue';
+import GuestLayout from '@/Layouts/GuestLayout.vue';
+import PrimaryButton from '@/Components/PrimaryButton.vue';
+import { Head, Link, useForm } from '@inertiajs/vue3';
+
+const props = defineProps<{
+    status?: string;
+}>();
+
+const form = useForm({});
+
+const submit = () => {
+    form.post(route('verification.send'));
+};
+
+const verificationLinkSent = computed(
+    () => props.status === 'verification-link-sent',
+);
+</script>
+
+<template>
+    <GuestLayout>
+        <Head title="Email Verification" />
+
+        <div class="mb-4 text-sm text-gray-600 dark:text-gray-400">
+            Thanks for signing up! Before getting started, could you verify your
+            email address by clicking on the link we just emailed to you? If you
+            didn't receive the email, we will gladly send you another.
+        </div>
+
+        <div
+            class="mb-4 text-sm font-medium text-green-600 dark:text-green-400"
+            v-if="verificationLinkSent"
+        >
+            A new verification link has been sent to the email address you
+            provided during registration.
+        </div>
+
+        <form @submit.prevent="submit">
+            <div class="mt-4 flex items-center justify-between">
+                <PrimaryButton
+                    :class="{ 'opacity-25': form.processing }"
+                    :disabled="form.processing"
+                >
+                    Resend Verification Email
+                </PrimaryButton>
+
+                <Link
+                    :href="route('logout')"
+                    method="post"
+                    as="button"
+                    class="rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:text-gray-400 dark:hover:text-gray-100 dark:focus:ring-offset-gray-800"
+                    >Log Out</Link
+                >
+            </div>
+        </form>
+    </GuestLayout>
+</template>
Index: resources/js/Pages/Dashboard.vue
===================================================================
--- resources/js/Pages/Dashboard.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ resources/js/Pages/Dashboard.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,439 +1,31 @@
 <script setup lang="ts">
-import App from '@/Layout/App.vue';
-import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
-import LineChart from '@/components/ui/chart/LineChart.vue';
+import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout.vue';
 import { Head } from '@inertiajs/vue3';
-import { computed } from 'vue';
 
-/* ---------- types ---------- */
-interface MonthlyRevenue {
-    month: string;
-    revenue: number;
-}
-
-interface TopBuyer {
-    id: string;
-    company_name: string;
-    total_orders: number;
-    total_spent: number;
-}
-
-interface PendingOrder {
-    id: string;
-    company_name: string;
-    pending_orders: number;
-    total_pending_value: number;
-}
-
-interface OrderByCountry {
-    country: string;
-    total_orders: number;
-    total_revenue: number;
-}
-
-interface BestSellingProduct {
-    id: string;
-    product_name: string;
-    producer_name: string;
-    times_ordered: number;
-    total_revenue: number;
-}
-
-interface RevenueByProducer {
-    id: string;
-    company_name: string;
-    total_revenue: number;
-}
-
-interface UnpaidOrder {
-    order_key: string;
-    order_date: string;
-    order_status: string;
-    payment_due_date: string;
-    payment_status: string;
-    buyer_id: string;
-    buyer_name: string;
-    billing_address: string;
-}
-
-interface PaymentStatusOverview {
-    payment_status: string;
-    count_payments: number;
-    total_amount: number;
-    percentage_of_payments: number;
-}
-
-interface PoorPerformingProduct {
-    id: string;
-    product_name: string;
-    producer_name: string;
-    order_count: number;
-}
-
-const props = defineProps<{
-    currentRevenue: number;
-    previousRevenue: number;
-    monthlyRevenue: MonthlyRevenue[];
-    topBuyers: TopBuyer[];
-    pendingOrders: PendingOrder[];
-    ordersByCountry: OrderByCountry[];
-    bestSellingProducts: BestSellingProduct[];
-    revenueByProducer: RevenueByProducer[];
-    unpaidOrders: UnpaidOrder[]; // Changed from unpaidInvoices
-    paymentStatusOverview: PaymentStatusOverview[];
-    poorPerformingProducts: PoorPerformingProduct[];
-}>();
-
-const revenueDelta = computed(() => {
-    if (!props.previousRevenue || props.previousRevenue === 0) return null;
-    const diff = props.currentRevenue - props.previousRevenue;
-    const pct = (diff / props.previousRevenue) * 100;
-    const sign = pct >= 0 ? '+' : '';
-    return sign + pct.toFixed(1) + '%';
-});
-
-const totalPendingOrders = computed(() => {
-    return props.pendingOrders.reduce(
-        (sum, order) => sum + order.pending_orders,
-        0,
-    );
-});
-
-const totalPendingValue = computed(() => {
-    return props.pendingOrders.reduce(
-        (sum, order) => sum + order.total_pending_value,
-        0,
-    );
-});
-
-const totalUnpaidOrders = computed(() => { // Changed from totalUnpaidInvoices
-    return props.unpaidOrders.length;
-});
-
-const totalCountries = computed(() => {
-    return props.ordersByCountry.length;
-});
 </script>
 
 <template>
     <Head title="Dashboard" />
-    <App>
-        <h1 class="mb-6 text-3xl font-bold">Dashboard</h1>
 
-        <!-- Revenue & Key Metrics -->
-        <div class="mb-6 grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4">
-            <!-- Total Revenue Card with Chart -->
-            <Card class="lg:col-span-2">
-                <CardHeader
-                    class="flex flex-row items-center justify-between space-y-0 pb-2"
+    <AuthenticatedLayout>
+        <template #header>
+            <h2
+                class="text-xl font-semibold leading-tight text-gray-800 dark:text-gray-200"
+            >
+                Dashboard
+            </h2>
+        </template>
+
+        <div class="py-12">
+            <div class="mx-auto max-w-7xl sm:px-6 lg:px-8">
+                <div
+                    class="overflow-hidden bg-white shadow-sm sm:rounded-lg dark:bg-gray-800"
                 >
-                    <CardTitle class="text-sm font-medium">
-                        Total Revenue
-                    </CardTitle>
-                    <svg
-                        xmlns="http://www.w3.org/2000/svg"
-                        viewBox="0 0 24 24"
-                        fill="none"
-                        stroke="currentColor"
-                        stroke-linecap="round"
-                        stroke-linejoin="round"
-                        stroke-width="2"
-                        class="text-muted-foreground h-4 w-4"
-                    >
-                        <path
-                            d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"
-                        />
-                    </svg>
-                </CardHeader>
-                <CardContent>
-                    <div class="text-2xl font-bold">
-                        ${{ currentRevenue.toLocaleString() }}
+                    <div class="p-6 text-gray-900 dark:text-gray-100">
+                        yo
                     </div>
-                    <p class="text-muted-foreground mb-4 text-xs">
-                        {{ revenueDelta }} from last month
-                    </p>
-
-                    <!-- Line chart inside the revenue card -->
-                    <LineChart
-                        :labels="monthlyRevenue.map((r) => r.month)"
-                        :data="monthlyRevenue.map((r) => r.revenue)"
-                    />
-                </CardContent>
-            </Card>
-
-            <Card>
-                <CardHeader
-                    class="flex flex-row items-center justify-between space-y-0 pb-2"
-                >
-                    <CardTitle class="text-sm font-medium">
-                        Pending Orders
-                    </CardTitle>
-                    <svg
-                        xmlns="http://www.w3.org/2000/svg"
-                        viewBox="0 0 24 24"
-                        fill="none"
-                        stroke="currentColor"
-                        stroke-linecap="round"
-                        stroke-linejoin="round"
-                        stroke-width="2"
-                        class="text-muted-foreground h-4 w-4"
-                    >
-                        <path
-                            d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"
-                        />
-                    </svg>
-                </CardHeader>
-                <CardContent>
-                    <div class="text-2xl font-bold">
-                        {{ totalPendingOrders }}
-                    </div>
-                    <p class="text-muted-foreground text-xs">
-                        ${{ totalPendingValue.toLocaleString() }} total value
-                    </p>
-                </CardContent>
-            </Card>
-
-            <Card>
-                <CardHeader
-                    class="flex flex-row items-center justify-between space-y-0 pb-2"
-                >
-                    <CardTitle class="text-sm font-medium">
-                        Unpaid Orders
-                    </CardTitle> <!-- Changed from Unpaid Invoices -->
-                    <svg
-                        xmlns="http://www.w3.org/2000/svg"
-                        viewBox="0 0 24 24"
-                        fill="none"
-                        stroke="currentColor"
-                        stroke-linecap="round"
-                        stroke-linejoin="round"
-                        stroke-width="2"
-                        class="text-muted-foreground h-4 w-4"
-                    >
-                        <path
-                            d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"
-                        />
-                    </svg>
-                </CardHeader>
-                <CardContent>
-                    <div class="text-2xl font-bold">
-                        {{ totalUnpaidOrders }} <!-- Changed from totalUnpaidInvoices -->
-                    </div>
-                    <p class="text-muted-foreground text-xs">
-                        Requiring attention
-                    </p>
-                </CardContent>
-            </Card>
+                </div>
+            </div>
         </div>
-
-        <!-- Payment Status Overview -->
-        <div class="mb-6 grid grid-cols-1 gap-6 lg:grid-cols-2">
-            <!-- Payment Status Chart -->
-            <Card>
-                <CardHeader>
-                    <CardTitle>Payment Status Overview</CardTitle>
-                </CardHeader>
-                <CardContent>
-                    <div class="space-y-2">
-                        <div
-                            v-for="status in paymentStatusOverview"
-                            :key="status.payment_status"
-                            class="flex items-center justify-between rounded border p-2"
-                        >
-                            <span class="capitalize">{{
-                                    status.payment_status
-                                }}</span>
-                            <div class="text-right">
-                                <div class="font-medium">
-                                    {{ status.count_payments }} payments
-                                </div>
-                                <div class="text-muted-foreground text-sm">
-                                    {{ status.percentage_of_payments }}% • ${{
-                                        status.total_amount.toLocaleString()
-                                    }}
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </CardContent>
-            </Card>
-
-            <!-- Active Countries -->
-            <Card>
-                <CardHeader>
-                    <CardTitle>Orders by Country</CardTitle>
-                </CardHeader>
-                <CardContent>
-                    <div class="space-y-2">
-                        <div
-                            v-for="country in ordersByCountry.slice(0, 5)"
-                            :key="country.country"
-                            class="flex items-center justify-between rounded border p-2"
-                        >
-                            <span class="font-medium">{{
-                                    country.country || 'Unknown'
-                                }}</span>
-                            <div class="text-right">
-                                <div class="font-medium">
-                                    {{ country.total_orders }} orders
-                                </div>
-                                <div class="text-muted-foreground text-sm">
-                                    ${{
-                                        country.total_revenue.toLocaleString()
-                                    }}
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </CardContent>
-            </Card>
-        </div>
-
-        <!-- Top Performers Section -->
-        <div class="mb-6 grid grid-cols-1 gap-6 lg:grid-cols-2">
-            <!-- Top Buyers -->
-            <Card>
-                <CardHeader>
-                    <CardTitle>Top Buyers</CardTitle>
-                </CardHeader>
-                <CardContent>
-                    <div class="space-y-3">
-                        <div
-                            v-for="buyer in topBuyers"
-                            :key="buyer.id"
-                            class="flex items-center justify-between rounded border p-3"
-                        >
-                            <div>
-                                <div class="font-medium">
-                                    {{ buyer.company_name }}
-                                </div>
-                                <div class="text-muted-foreground text-sm">
-                                    {{ buyer.total_orders }} orders
-                                </div>
-                            </div>
-                            <div class="text-right font-bold">
-                                ${{ buyer.total_spent.toLocaleString() }}
-                            </div>
-                        </div>
-                    </div>
-                </CardContent>
-            </Card>
-
-            <!-- Best Selling Products -->
-            <Card>
-                <CardHeader>
-                    <CardTitle>Best Selling Products</CardTitle>
-                </CardHeader>
-                <CardContent>
-                    <div class="space-y-3">
-                        <div
-                            v-for="product in bestSellingProducts"
-                            :key="product.id"
-                            class="flex items-center justify-between rounded border p-3"
-                        >
-                            <div>
-                                <div class="font-medium">
-                                    {{ product.product_name }}
-                                </div>
-                                <div class="text-muted-foreground text-sm">
-                                    {{ product.producer_name }} •
-                                    {{ product.times_ordered }} orders
-                                </div>
-                            </div>
-                            <div class="text-right font-bold">
-                                ${{ product.total_revenue.toLocaleString() }}
-                            </div>
-                        </div>
-                    </div>
-                </CardContent>
-            </Card>
-        </div>
-
-        <!-- Additional Reports Section -->
-        <div class="grid grid-cols-1 gap-6 lg:grid-cols-3">
-            <!-- Revenue by Producer -->
-            <Card>
-                <CardHeader>
-                    <CardTitle>Top Producers</CardTitle>
-                </CardHeader>
-                <CardContent>
-                    <div class="space-y-3">
-                        <div
-                            v-for="producer in revenueByProducer"
-                            :key="producer.id"
-                            class="flex items-center justify-between rounded border p-3"
-                        >
-                            <div class="font-medium">
-                                {{ producer.company_name }}
-                            </div>
-                            <div class="text-right font-bold">
-                                ${{ producer.total_revenue.toLocaleString() }}
-                            </div>
-                        </div>
-                    </div>
-                </CardContent>
-            </Card>
-
-            <!-- Pending Orders -->
-            <Card>
-                <CardHeader>
-                    <CardTitle>Pending Orders by Client</CardTitle>
-                </CardHeader>
-                <CardContent>
-                    <div class="space-y-3">
-                        <div
-                            v-for="order in pendingOrders"
-                            :key="order.id"
-                            class="flex items-center justify-between rounded border p-3"
-                        >
-                            <div>
-                                <div class="font-medium">
-                                    {{ order.company_name }}
-                                </div>
-                                <div class="text-muted-foreground text-sm">
-                                    {{ order.pending_orders }} pending
-                                </div>
-                            </div>
-                            <div class="text-right font-bold text-orange-600">
-                                ${{
-                                    order.total_pending_value.toLocaleString()
-                                }}
-                            </div>
-                        </div>
-                    </div>
-                </CardContent>
-            </Card>
-
-            <!-- Poor Performing Products -->
-            <Card>
-                <CardHeader>
-                    <CardTitle>Products Needing Attention</CardTitle>
-                </CardHeader>
-                <CardContent>
-                    <!-- Fixed: removed stray 'n' character -->
-                    <div class="space-y-3">
-                        <div
-                            v-for="product in poorPerformingProducts"
-                            :key="product.id"
-                            class="flex items-center justify-between rounded border p-3"
-                        >
-                            <div>
-                                <div class="font-medium">
-                                    {{ product.product_name }}
-                                </div>
-                                <div class="text-muted-foreground text-sm">
-                                    {{ product.producer_name }}
-                                </div>
-                            </div>
-                            <div class="text-right font-bold text-red-600">
-                                {{ product.order_count }} orders
-                            </div>
-                        </div>
-                    </div>
-                </CardContent>
-            </Card>
-        </div>
-    </App>
+    </AuthenticatedLayout>
 </template>
-
-<style scoped></style>
Index: sources/js/Pages/GenericModelPage.vue
===================================================================
--- resources/js/Pages/GenericModelPage.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,955 +1,0 @@
-<script setup lang="ts">
-import App from '@/Layout/App.vue';
-import { Button } from '@/components/ui/button';
-import { Calendar } from '@/components/ui/calendar';
-import { Checkbox } from '@/components/ui/checkbox';
-import {
-    Dialog,
-    DialogContent,
-    DialogFooter,
-    DialogHeader,
-    DialogTitle,
-} from '@/components/ui/dialog';
-import { Input } from '@/components/ui/input';
-import { Label } from '@/components/ui/label';
-import {
-    Popover,
-    PopoverContent,
-    PopoverTrigger,
-} from '@/components/ui/popover';
-import {
-    Select,
-    SelectContent,
-    SelectItem,
-    SelectTrigger,
-    SelectValue,
-} from '@/components/ui/select';
-import {
-    Table,
-    TableBody,
-    TableCell,
-    TableHead,
-    TableHeader,
-    TableRow,
-} from '@/components/ui/table';
-import { formatLabel } from '@/lib/utils';
-import { router } from '@inertiajs/vue3';
-import { format } from 'date-fns';
-import { debounce } from 'lodash-es';
-import {
-    CalendarIcon,
-    ChevronLeft,
-    ChevronRight,
-    ChevronsLeft,
-    ChevronsRight,
-    ExternalLink,
-} from 'lucide-vue-next';
-import { computed, reactive, ref, watch } from 'vue';
-
-interface PaginatedData {
-    data: any[];
-    current_page: number;
-    last_page: number;
-    per_page: number;
-    total: number;
-    from: number;
-    to: number;
-    links: Array<{
-        url: string | null;
-        label: string;
-        active: boolean;
-    }>;
-}
-
-interface Props {
-    model: string;
-    items: PaginatedData;
-    filters: {
-        search?: string;
-        sort_by: string;
-        sort_direction: string;
-        per_page: number;
-        open_id?: string;
-    };
-    fkMap: Record<string, string>;
-    relatedOptions: Record<string, RelatedOption[]>;
-}
-
-interface RelatedOption {
-    id: number;
-    name: string;
-}
-
-const props = defineProps<Props>();
-
-// Dialog states
-const createDialogOpen = ref(false);
-const editDialogOpen = ref(false);
-const currentEditItem = ref<any | null>(null);
-
-// Form models
-const createForm = reactive<Record<string, any>>({});
-const editForm = reactive<Record<string, any>>({});
-
-// Reactive search
-const search = ref(props.filters.search || '');
-const perPage = ref(props.filters.per_page);
-
-// Expanded rows
-const expandedRows = ref(new Set<string>());
-
-// Auto-expand if open_id is provided
-if (props.filters.open_id) {
-    expandedRows.value.add(props.filters.open_id);
-}
-
-// Computed properties
-const fields = computed(() => {
-    if (!props.items.data.length) return [];
-    return Object.keys(props.items.data[0]);
-});
-
-type ForeignKeyMap = {
-    [key: string]: string;
-};
-
-const foreignKeyMap = computed<ForeignKeyMap>(() => ({
-    product_id: 'products',
-    buyer_id: 'clients',
-    receiver_id: 'clients',
-    transport_id: 'transports',
-    producer_id: 'producers',
-    order_id: 'orders',
-    payment_id: 'payments',
-}));
-
-const tableFields = computed(() => {
-    return fields.value.filter(
-        (field) =>
-            !['id', 'created_at', 'updated_at'].includes(field) &&
-            typeof props.items.data[0][field] !== 'object',
-    );
-});
-
-const detailFields = computed(() => {
-    return fields.value.filter((field) => {
-        if (['id', 'created_at', 'updated_at'].includes(field)) return false;
-
-        if (props.items.data.length > 0) {
-            const value = props.items.data[0][field];
-            if (
-                typeof value === 'object' &&
-                value !== null &&
-                !field.endsWith('_id')
-            ) {
-                return false;
-            }
-        }
-        return true;
-    });
-});
-
-const dialogDescription = computed(() => {
-    const descriptionFields = [
-        'description',
-        'status',
-        'insurance_conditions',
-        'notes',
-    ];
-    const hasDescription = detailFields.value.some((f) =>
-        descriptionFields.includes(f),
-    );
-
-    return hasDescription
-        ? `Please fill in all required fields including the description.`
-        : `Fill in the details to create a new ${props.model}.`;
-});
-
-// Helper functions
-const isForeignKey = (field: string): boolean => {
-    return (
-        field.endsWith('_id') &&
-        (foreignKeyMap.value as any)[field] !== undefined
-    );
-};
-
-const getRelatedModelName = (item: any, field: string): string => {
-    const relationName = field.replace('_id', '');
-
-    if (item[relationName]?.name) {
-        return item[relationName].name;
-    }
-
-    if (item[relationName]?.id) {
-        return `#${item[relationName].id}`;
-    }
-
-    return item[field] ? item[field].toString() : 'N/A';
-};
-
-const navigateToRelatedModel = (field: string, value: any) => {
-    const fkTable = (foreignKeyMap.value as any)[field];
-    if (!fkTable) return;
-
-    const targetId = typeof value === 'object' ? value.id : value;
-    if (!targetId) return;
-
-    router.get(`/${fkTable}`, { open_id: targetId });
-};
-
-const getFieldType = (
-    field: string,
-): 'boolean' | 'date' | 'number' | 'foreignKey' | 'string' => {
-    if (isForeignKey(field)) return 'foreignKey';
-    if (props.items.data.length === 0) return 'string';
-
-    const value = props.items.data[0][field];
-
-    if (typeof value === 'boolean') return 'boolean';
-    if (typeof value === 'number') return 'number';
-    if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value))
-        return 'date';
-
-    return 'string';
-};
-
-const formatValue = (value: any): string => {
-    if (value === null || value === undefined) return 'N/A';
-    if (typeof value === 'boolean') return value ? 'Yes' : 'No';
-    if (typeof value === 'number') return value.toFixed(2);
-    if (typeof value === 'object') return value.name || value.id || 'N/A';
-    if (typeof value === 'string' && /^\d{4}-\d{2}-\d{2}/.test(value)) {
-        const date = new Date(value);
-        return !isNaN(date.getTime()) ? date.toLocaleDateString() : value;
-    }
-    return value;
-};
-
-const formatDateForInput = (val: any): string => {
-    if (!val) return '';
-    const d = new Date(val);
-    return isNaN(d.getTime()) ? '' : d.toISOString().slice(0, 10);
-};
-
-// FIXED: Added back the isDateField function - it's used for detecting date fields by name pattern
-const isDateField = (field: string): boolean => {
-    return /date$/i.test(field);
-};
-
-const formatDateForSubmit = (date: any): string => {
-    if (!date) return '';
-
-    // If it's a Date object
-    if (date instanceof Date) {
-        return date.toISOString().split('T')[0]; // YYYY-MM-DD
-    }
-
-    // If it's an array from calendar, take the first element
-    if (Array.isArray(date) && date.length > 0) {
-        const firstDate = date[0];
-        if (firstDate instanceof Date) {
-            return firstDate.toISOString().split('T')[0];
-        }
-        return String(firstDate);
-    }
-
-    // If it's already a string, return as-is (assuming it's already YYYY-MM-DD)
-    return String(date);
-};
-
-// Form management
-const resetCreateForm = () => {
-    Object.keys(createForm).forEach((key) => delete createForm[key]);
-
-    detailFields.value.forEach((field) => {
-        const fieldType = getFieldType(field);
-        switch (fieldType) {
-            case 'boolean':
-                createForm[field] = false;
-                break;
-            case 'date':
-                createForm[field] = '';
-                break;
-            case 'number':
-                createForm[field] = 0;
-                break;
-            case 'foreignKey':
-                createForm[field] = null;
-                break;
-            default:
-                createForm[field] = '';
-        }
-    });
-};
-
-const openEditDialog = (item: any) => {
-    currentEditItem.value = item;
-    Object.keys(editForm).forEach((key) => delete editForm[key]);
-
-    detailFields.value.forEach((field) => {
-        const fieldType = getFieldType(field);
-        switch (fieldType) {
-            case 'date':
-                editForm[field] = formatDateForInput(item[field]);
-                break;
-            case 'boolean':
-                editForm[field] = Boolean(item[field]);
-                break;
-            case 'foreignKey':
-                editForm[field] = item[field] || null;
-                break;
-            default:
-                editForm[field] = item[field] || '';
-        }
-    });
-
-    editDialogOpen.value = true;
-};
-
-// Initialize create form
-resetCreateForm();
-
-// Row expansion
-const toggleRowExpansion = (itemId: string) => {
-    if (expandedRows.value.has(itemId)) {
-        expandedRows.value.delete(itemId);
-    } else {
-        expandedRows.value.add(itemId);
-    }
-};
-
-// Search and pagination
-const debouncedSearch = debounce((value: string) => {
-    router.get(
-        `/${props.model.toLowerCase()}s`,
-        { search: value, per_page: perPage.value },
-        { preserveState: true, replace: true },
-    );
-}, 300);
-
-watch(search, debouncedSearch);
-
-watch(perPage, (newValue) => {
-    router.get(
-        `/${props.model.toLowerCase()}s`,
-        { search: search.value, per_page: newValue, page: 1 },
-        { preserveState: true, replace: true },
-    );
-});
-
-// Pagination functions
-const goToPage = (page: number) => {
-    router.get(
-        `/${props.model.toLowerCase()}s`,
-        { search: search.value, per_page: perPage.value, page },
-        { preserveState: true },
-    );
-};
-
-const goToFirstPage = () => goToPage(1);
-const goToLastPage = () => goToPage(props.items.last_page);
-const goToPreviousPage = () => goToPage(props.items.current_page - 1);
-const goToNextPage = () => goToPage(props.items.current_page + 1);
-
-const canGoPrevious = computed(() => props.items.current_page > 1);
-const canGoNext = computed(
-    () => props.items.current_page < props.items.last_page,
-);
-
-// Form submissions
-const submitCreate = () => {
-    const payload: Record<string, any> = {};
-
-    // Convert all form data, handling dates specifically
-    Object.keys(createForm).forEach(key => {
-        const value = createForm[key];
-        const fieldType = getFieldType(key);
-
-        if (fieldType === 'date') {
-            payload[key] = formatDateForSubmit(value);
-        } else {
-            payload[key] = value;
-        }
-    });
-
-    console.log('CreateForm payload with normalized dates:', payload);
-    router.post(`/${props.model.toLowerCase()}s`, payload, {
-        onSuccess: () => {
-            createDialogOpen.value = false;
-            resetCreateForm();
-        },
-        onError: (errors) => console.error('Create failed:', errors),
-        preserveState: false,
-    });
-};
-
-const submitEdit = () => {
-    if (!currentEditItem.value) return;
-
-    const payload: Record<string, any> = {};
-
-    // Convert all form data, handling dates specifically
-    Object.keys(editForm).forEach(key => {
-        const value = editForm[key];
-        const fieldType = getFieldType(key);
-
-        if (fieldType === 'date') {
-            payload[key] = formatDateForSubmit(value);
-        } else {
-            payload[key] = value;
-        }
-    });
-
-    console.log('EditForm payload with normalized dates:', payload);
-    router.put(
-        `/${props.model.toLowerCase()}s/${currentEditItem.value.id}`,
-        payload,
-        {
-            onSuccess: () => {
-                editDialogOpen.value = false;
-                currentEditItem.value = null;
-                Object.keys(editForm).forEach(key => delete editForm[key]);
-            },
-            onError: (errors) => console.error('Update failed:', errors),
-            preserveState: false,
-        },
-    );
-};
-
-const deleteItem = (item: any) => {
-    if (confirm(`Are you sure you want to delete this ${props.model}?`)) {
-        router.delete(`/${props.model.toLowerCase()}s/${item.id}`, {
-            preserveScroll: true,
-        });
-    }
-};
-</script>
-
-<style scoped>
-.fk-link {
-    color: #2563eb;
-    text-decoration: underline;
-    cursor: pointer;
-    display: inline-flex;
-    align-items: center;
-    gap: 0.25rem;
-    transition: all 0.2s ease;
-}
-
-.fk-link:hover {
-    color: #1d4ed8;
-    background-color: #eff6ff;
-    padding: 0.125rem 0.25rem;
-    border-radius: 0.25rem;
-}
-</style>
-
-<template>
-    <App>
-        <template #title>{{ model }}s</template>
-
-        <div class="w-full space-y-4">
-            <div class="flex items-center justify-between">
-                <div class="flex items-center space-x-2">
-                    <Input
-                        v-model="search"
-                        class="max-w-sm"
-                        :placeholder="`Search ${model.toLowerCase()}s...`"
-                    />
-                    <Select v-model="perPage">
-                        <SelectTrigger class="w-[120px]">
-                            <SelectValue />
-                        </SelectTrigger>
-                        <SelectContent>
-                            <SelectItem value="10">10 per page</SelectItem>
-                            <SelectItem value="25">25 per page</SelectItem>
-                            <SelectItem value="50">50 per page</SelectItem>
-                            <SelectItem value="100">100 per page</SelectItem>
-                        </SelectContent>
-                    </Select>
-                    <Button @click="createDialogOpen = true">
-                        Create {{ model }}
-                    </Button>
-                </div>
-
-                <div class="text-muted-foreground text-sm">
-                    Showing {{ items.from }} to {{ items.to }} of
-                    {{ items.total }} results
-                </div>
-            </div>
-
-            <div class="rounded-md border">
-                <Table>
-                    <TableHeader>
-                        <TableRow>
-                            <TableHead
-                                v-for="field in tableFields"
-                                :key="field"
-                            >
-                                {{ formatLabel(field.replace('_id', '')) }}
-                            </TableHead>
-                            <TableHead>Created</TableHead>
-                            <TableHead>Actions</TableHead>
-                        </TableRow>
-                    </TableHeader>
-                    <TableBody>
-                        <template v-if="items.data.length">
-                            <template v-for="item in items.data" :key="item.id">
-                                <!-- Slot for custom table rows -->
-                                <slot
-                                    v-if="$slots['table-row']"
-                                    name="table-row"
-                                    :item="item"
-                                    :tableFields="tableFields"
-                                    :isForeignKey="isForeignKey"
-                                    :getRelatedModelName="getRelatedModelName"
-                                    :navigateToRelatedModel="navigateToRelatedModel"
-                                    :formatValue="formatValue"
-                                    :toggleRowExpansion="toggleRowExpansion"
-                                    :expandedRows="expandedRows"
-                                    :openEditDialog="openEditDialog"
-                                    :deleteItem="deleteItem"
-                                    :isDateField="isDateField"
-                                />
-
-                                <!-- Default table row (when no slot provided) -->
-                                <template v-else>
-                                    <TableRow
-                                        class="hover:bg-muted/50 cursor-pointer"
-                                        @click="toggleRowExpansion(item.id)"
-                                    >
-                                        <TableCell
-                                            v-for="field in tableFields"
-                                            :key="field"
-                                            class="max-w-[200px] truncate overflow-hidden font-medium whitespace-nowrap"
-                                        >
-                                            <template
-                                                v-if="
-                                                    isForeignKey(field) &&
-                                                    item[field]
-                                                "
-                                            >
-                                                <span
-                                                    class="fk-link"
-                                                    @click.stop="
-                                                        navigateToRelatedModel(
-                                                            field,
-                                                            item[field],
-                                                        )
-                                                    "
-                                                >
-                                                    {{
-                                                        getRelatedModelName(
-                                                            item,
-                                                            field,
-                                                        )
-                                                    }}
-                                                    <ExternalLink class="h-3 w-3" />
-                                                </span>
-                                            </template>
-                                            <template v-else>
-                                                {{ formatValue(item[field]) }}
-                                            </template>
-                                        </TableCell>
-                                        <TableCell>
-                                            {{
-                                                new Date(
-                                                    item.created_at,
-                                                ).toLocaleDateString()
-                                            }}
-                                        </TableCell>
-                                        <TableCell class="flex space-x-2">
-                                            <Button
-                                                variant="outline"
-                                                size="sm"
-                                                @click.stop="
-                                                    toggleRowExpansion(item.id)
-                                                "
-                                            >
-                                                {{
-                                                    expandedRows.has(item.id)
-                                                        ? 'Hide'
-                                                        : 'Show'
-                                                }}
-                                            </Button>
-                                            <Button
-                                                variant="outline"
-                                                size="sm"
-                                                @click.stop="openEditDialog(item)"
-                                            >
-                                                Edit
-                                            </Button>
-                                            <Button
-                                                variant="destructive"
-                                                size="sm"
-                                                @click.stop="deleteItem(item)"
-                                            >
-                                                Delete
-                                            </Button>
-                                        </TableCell>
-                                    </TableRow>
-
-                                    <TableRow
-                                        v-if="expandedRows.has(item.id)"
-                                        class="bg-muted/20"
-                                    >
-                                        <TableCell
-                                            :colspan="tableFields.length + 2"
-                                            class="p-4"
-                                        >
-                                            <div class="space-y-3">
-                                                <h4 class="font-semibold">
-                                                    {{ model }} Details
-                                                </h4>
-                                                <div
-                                                    class="grid grid-cols-2 gap-4 text-sm"
-                                                >
-                                                    <div
-                                                        v-for="field in detailFields"
-                                                        :key="field"
-                                                    >
-                                                        <strong>
-                                                            {{
-                                                                formatLabel(
-                                                                    field.replace(
-                                                                        '_id',
-                                                                        '',
-                                                                    ),
-                                                                )
-                                                            }}:
-                                                        </strong>
-                                                        <template
-                                                            v-if="
-                                                                isForeignKey(
-                                                                    field,
-                                                                ) && item[field]
-                                                            "
-                                                        >
-                                                            <span
-                                                                class="fk-link ml-2"
-                                                                @click.stop="
-                                                                    navigateToRelatedModel(
-                                                                        field,
-                                                                        item[field],
-                                                                    )
-                                                                "
-                                                            >
-                                                                {{
-                                                                    getRelatedModelName(
-                                                                        item,
-                                                                        field,
-                                                                    )
-                                                                }}
-                                                                <ExternalLink
-                                                                    class="h-3 w-3"
-                                                                />
-                                                            </span>
-                                                        </template>
-                                                        <template v-else>
-                                                            {{
-                                                                formatValue(
-                                                                    item[field],
-                                                                )
-                                                            }}
-                                                        </template>
-                                                    </div>
-                                                </div>
-                                                <div
-                                                    class="text-muted-foreground mt-2 text-xs"
-                                                >
-                                                    Created:
-                                                    {{
-                                                        new Date(
-                                                            item.created_at,
-                                                        ).toLocaleString()
-                                                    }}
-                                                    | Updated:
-                                                    {{
-                                                        new Date(
-                                                            item.updated_at,
-                                                        ).toLocaleString()
-                                                    }}
-                                                </div>
-                                            </div>
-                                        </TableCell>
-                                    </TableRow>
-                                </template>
-                            </template>
-                        </template>
-                        <TableRow v-else>
-                            <TableCell
-                                :colspan="tableFields.length + 2"
-                                class="h-24 text-center"
-                            >
-                                No {{ model.toLowerCase() }}s found.
-                            </TableCell>
-                        </TableRow>
-                    </TableBody>
-                </Table>
-            </div>
-
-            <div class="flex items-center justify-between">
-                <div class="text-muted-foreground text-sm">
-                    Page {{ items.current_page }} of {{ items.last_page }}
-                </div>
-                <div class="flex items-center space-x-2">
-                    <Button
-                        variant="outline"
-                        size="sm"
-                        :disabled="!canGoPrevious"
-                        @click="goToFirstPage"
-                    >
-                        <ChevronsLeft class="h-4 w-4" />
-                        <span class="sr-only">Go to first page</span>
-                    </Button>
-                    <Button
-                        variant="outline"
-                        size="sm"
-                        :disabled="!canGoPrevious"
-                        @click="goToPreviousPage"
-                    >
-                        <ChevronLeft class="h-4 w-4" />
-                        Previous
-                    </Button>
-                    <Button
-                        variant="outline"
-                        size="sm"
-                        :disabled="!canGoNext"
-                        @click="goToNextPage"
-                    >
-                        Next
-                        <ChevronRight class="h-4 w-4" />
-                    </Button>
-                    <Button
-                        variant="outline"
-                        size="sm"
-                        :disabled="!canGoNext"
-                        @click="goToLastPage"
-                    >
-                        <ChevronsRight class="h-4 w-4" />
-                        <span class="sr-only">Go to last page</span>
-                    </Button>
-                </div>
-            </div>
-        </div>
-
-        <!-- Create Dialog -->
-        <Dialog v-model:open="createDialogOpen">
-            <DialogContent class="aria-dialog-description sm:max-w-3xl">
-                <DialogHeader>
-                    <DialogTitle>Create New {{ model }}</DialogTitle>
-                    <p
-                        id="create-dialog-description"
-                        class="text-muted-foreground text-sm"
-                    >
-                        {{ dialogDescription }}
-                    </p>
-                </DialogHeader>
-                <div class="grid grid-cols-1 gap-4 py-4 md:grid-cols-2">
-                    <div
-                        v-for="field in detailFields"
-                        :key="field"
-                        class="space-y-2"
-                    >
-                        <Label :for="field">
-                            {{ formatLabel(field.replace('_id', '')) }}
-                        </Label>
-
-                        <!-- Dynamic form fields -->
-                        <div v-if="getFieldType(field) === 'foreignKey'">
-                            <Select
-                                v-model="createForm[field]"
-                                :aria-label="formatLabel(field)"
-                            >
-                                <SelectTrigger>
-                                    <SelectValue placeholder="Select..." />
-                                </SelectTrigger>
-                                <SelectContent>
-                                    <SelectItem
-                                        v-for="option in props.relatedOptions[
-                                            field
-                                        ] || []"
-                                        :key="option.id"
-                                        :value="option.id"
-                                    >
-                                        {{ option.name }}
-                                    </SelectItem>
-                                </SelectContent>
-                            </Select>
-                        </div>
-
-                        <div v-else-if="getFieldType(field) === 'boolean'">
-                            <Checkbox
-                                :id="field"
-                                v-model:checked="createForm[field]"
-                            />
-                        </div>
-
-                        <div v-else-if="getFieldType(field) === 'date'">
-                            <Popover>
-                                <PopoverTrigger as-child>
-                                    <Button
-                                        variant="outline"
-                                        class="w-full justify-start text-left font-normal"
-                                    >
-                                        <CalendarIcon class="mr-2 h-4 w-4" />
-                                        {{
-                                            createForm[field]
-                                                ? format(
-                                                    new Date(
-                                                        createForm[field],
-                                                    ),
-                                                    'PPP',
-                                                )
-                                                : 'Pick a date'
-                                        }}
-                                    </Button>
-                                </PopoverTrigger>
-                                <PopoverContent
-                                    class="w-auto p-0"
-                                    align="start"
-                                >
-                                    <Calendar
-                                        v-model="createForm[field]"
-                                        mode="single"
-                                        :initial-focus="true"
-                                    />
-                                </PopoverContent>
-                            </Popover>
-                        </div>
-
-                        <div v-else-if="getFieldType(field) === 'number'">
-                            <Input
-                                type="number"
-                                :id="field"
-                                v-model.number="createForm[field]"
-                            />
-                        </div>
-
-                        <div v-else>
-                            <Input :id="field" v-model="createForm[field]" />
-                        </div>
-                    </div>
-                </div>
-                <DialogFooter>
-                    <Button variant="outline" @click="createDialogOpen = false">
-                        Cancel
-                    </Button>
-                    <Button type="submit" @click="submitCreate">
-                        Create {{ model }}
-                    </Button>
-                </DialogFooter>
-            </DialogContent>
-        </Dialog>
-
-        <!-- Edit Dialog -->
-        <Dialog v-model:open="editDialogOpen">
-            <DialogContent class="sm:max-w-3xl">
-                <DialogHeader>
-                    <DialogTitle>Edit {{ model }}</DialogTitle>
-                    <p
-                        id="edit-dialog-description"
-                        class="text-muted-foreground text-sm"
-                    >
-                        {{ dialogDescription }}
-                    </p>
-                </DialogHeader>
-                <div class="grid grid-cols-1 gap-4 py-4 md:grid-cols-2">
-                    <div
-                        v-for="field in detailFields"
-                        :key="field"
-                        class="space-y-2"
-                    >
-                        <Label :for="`edit_${field}`">
-                            {{ formatLabel(field.replace('_id', '')) }}
-                        </Label>
-
-                        <!-- Dynamic form fields -->
-                        <div v-if="getFieldType(field) === 'foreignKey'">
-                            <Select
-                                v-model="editForm[field]"
-                                :aria-label="formatLabel(field)"
-                            >
-                                <SelectTrigger>
-                                    <SelectValue placeholder="Select..." />
-                                </SelectTrigger>
-                                <SelectContent>
-                                    <SelectItem
-                                        v-for="option in props.relatedOptions[
-                                            field
-                                        ] || []"
-                                        :key="option.id"
-                                        :value="option.id"
-                                    >
-                                        {{ option.name }}
-                                    </SelectItem>
-                                </SelectContent>
-                            </Select>
-                        </div>
-
-                        <div v-else-if="getFieldType(field) === 'boolean'">
-                            <Checkbox
-                                :id="`edit_${field}`"
-                                v-model:checked="editForm[field]"
-                            />
-                        </div>
-
-                        <div v-else-if="getFieldType(field) === 'date'">
-                            <Popover>
-                                <PopoverTrigger as-child>
-                                    <Button
-                                        variant="outline"
-                                        class="w-full justify-start text-left font-normal"
-                                    >
-                                        <CalendarIcon class="mr-2 h-4 w-4" />
-                                        {{
-                                            editForm[field]
-                                                ? format(
-                                                    new Date(editForm[field]),
-                                                    'PPP',
-                                                )
-                                                : 'Pick a date'
-                                        }}
-                                    </Button>
-                                </PopoverTrigger>
-                                <PopoverContent
-                                    class="w-auto p-0"
-                                    align="start"
-                                >
-                                    <Calendar
-                                        v-model="editForm[field]"
-                                        mode="single"
-                                        :initial-focus="true"
-                                    />
-                                </PopoverContent>
-                            </Popover>
-                        </div>
-
-                        <div v-else-if="getFieldType(field) === 'number'">
-                            <Input
-                                type="number"
-                                :id="`edit_${field}`"
-                                v-model.number="editForm[field]"
-                            />
-                        </div>
-
-                        <div v-else>
-                            <Input
-                                :id="`edit_${field}`"
-                                v-model="editForm[field]"
-                            />
-                        </div>
-                    </div>
-                </div>
-                <DialogFooter>
-                    <Button variant="outline" @click="editDialogOpen = false">
-                        Cancel
-                    </Button>
-                    <Button type="submit" @click="submitEdit">
-                        Save Changes
-                    </Button>
-                </DialogFooter>
-            </DialogContent>
-        </Dialog>
-    </App>
-</template>
Index: resources/js/Pages/Home/Index.vue
===================================================================
--- resources/js/Pages/Home/Index.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Home/Index.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,15 @@
+<script setup>
+import { Head } from '@inertiajs/vue3'
+
+// defineProps({ user: Object})
+</script>
+
+<template>
+        <Head title="Welcome to my page"/>
+        <h1 class=text-blue>Welcome to my page</h1>
+        <p>Hello and welcome to your first Inertia app!</p>
+</template>
+
+<style scoped>
+
+</style>
Index: sources/js/Pages/OrderPage.vue
===================================================================
--- resources/js/Pages/OrderPage.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,508 +1,0 @@
-<script setup lang="ts">
-import { Badge } from '@/components/ui/badge';
-import { Button } from '@/components/ui/button';
-import { formatLabel } from '@/lib/utils';
-import { router } from '@inertiajs/vue3';
-import GenericModelPage from './GenericModelPage.vue';
-
-interface Props {
-    model: string;
-    items: any;
-    filters: any;
-    fkMap: any;
-    relatedOptions: any;
-}
-
-const props = defineProps<Props>();
-
-// Custom methods for Order-specific actions
-const generateInvoice = (order: any) => {
-    if (confirm('Generate invoice for this order?')) {
-        // Use window.location for direct download
-        window.location.href = `/orders/${order.id}/generate-invoice`;
-    }
-};
-
-const generatePackingList = (order: any) => {
-    if (confirm('Generate packing list for this order?')) {
-        window.location.href = `/orders/${order.id}/generate-packing-list`;
-    }
-};
-const viewInvoice = (order: any) => {
-    window.open(`/orders/${order.id}/preview-invoice`, '_blank');
-};
-
-const viewPackingList = (order: any) => {
-    window.open(`/orders/${order.id}/preview-packing-list`, '_blank');
-};
-
-// Payment management
-const createPayment = (order: any) => {
-    if (confirm('Create payment for this order?')) {
-        router.post(
-            `/orders/${order.id}/create-payment`,
-            {},
-            {
-                onSuccess: () => {
-                    router.reload();
-                },
-            },
-        );
-    }
-};
-
-const editPayment = (order: any) => {
-    // Check both payment relationships
-    const payment = order.payment || order.payments?.[0];
-    if (payment) {
-        router.get(`/payments?open_id=${payment.id}`);
-    }
-};
-
-// Helper to get payment from order (checking both relationships)
-const getOrderPayment = (order: any) => {
-    return order.payment || order.payments?.[0] || null;
-};
-
-// Format order status with colors
-const getStatusBadgeVariant = (status: string) => {
-    switch (status) {
-        case 'pending':
-            return 'secondary';
-        case 'confirmed':
-            return 'default';
-        case 'processing':
-            return 'default';
-        case 'shipped':
-            return 'default';
-        case 'delivered':
-            return 'default';
-        case 'cancelled':
-            return 'destructive';
-        default:
-            return 'secondary';
-    }
-};
-
-// Format payment status with colors
-const getPaymentStatusBadgeVariant = (status: string) => {
-    switch (status) {
-        case 'paid':
-            return 'default';
-        case 'pending':
-            return 'secondary';
-        case 'failed':
-            return 'destructive';
-        case 'refunded':
-            return 'outline';
-        case 'cancelled':
-            return 'destructive';
-        default:
-            return 'secondary';
-    }
-};
-
-// Additional class mapping for visual styling
-const getPaymentStatusBadgeClass = (status: string) => {
-    switch (status) {
-        case 'paid':
-            return 'bg-green-100 text-green-800 border-green-200';
-        case 'pending':
-            return 'bg-yellow-100 text-yellow-800 border-yellow-200';
-        case 'failed':
-            return 'bg-red-100 text-red-800 border-red-200';
-        case 'refunded':
-            return 'bg-blue-100 text-blue-800 border-blue-200';
-        case 'cancelled':
-            return 'bg-gray-100 text-gray-800 border-gray-200';
-        default:
-            return '';
-    }
-};
-</script>
-
-<template>
-    <GenericModelPage
-        :model="model"
-        :items="items"
-        :filters="filters"
-        :fkMap="fkMap"
-        :relatedOptions="relatedOptions"
-    >
-        <!-- Override the table row to add custom Order functionality -->
-        <template
-            #table-row="{
-                item,
-                tableFields,
-                isForeignKey,
-                getRelatedModelName,
-                navigateToRelatedModel,
-                formatValue,
-                toggleRowExpansion,
-                expandedRows,
-                openEditDialog,
-                deleteItem,
-            }"
-        >
-            <tr
-                class="hover:bg-muted/50 cursor-pointer"
-                @click="toggleRowExpansion(item.id)"
-            >
-                <td
-                    v-for="field in tableFields"
-                    :key="field"
-                    class="max-w-[200px] truncate overflow-hidden p-2 font-medium whitespace-nowrap"
-                >
-                    <!-- Custom status display -->
-                    <template v-if="field === 'status'">
-                        <Badge :variant="getStatusBadgeVariant(item[field])">
-                            {{ formatValue(item[field]) }}
-                        </Badge>
-                    </template>
-
-                    <template v-else-if="isForeignKey(field) && item[field]">
-                        <span
-                            class="fk-link"
-                            @click.stop="
-                                navigateToRelatedModel(field, item[field])
-                            "
-                        >
-                            {{ getRelatedModelName(item, field) }}
-                            <ExternalLink class="h-3 w-3" />
-                        </span>
-                    </template>
-                    <template v-else>
-                        {{ formatValue(item[field]) }}
-                    </template>
-                </td>
-                <td class="p-2">
-                    {{ new Date(item.created_at).toLocaleDateString() }}
-                </td>
-                <td class="flex space-x-1 p-2">
-                    <!-- Show/Hide Details Button -->
-                    <Button
-                        variant="outline"
-                        size="sm"
-                        @click.stop="toggleRowExpansion(item.id)"
-                    >
-                        {{ expandedRows.has(item.id) ? 'Hide' : 'Show' }}
-                    </Button>
-
-                    <!-- Custom Order Actions -->
-                    <Button
-                        v-if="!item.invoice"
-                        variant="outline"
-                        size="sm"
-                        @click.stop="generateInvoice(item)"
-                    >
-                        Invoice
-                    </Button>
-                    <Button
-                        v-else
-                        variant="outline"
-                        size="sm"
-                        @click.stop="viewInvoice(item)"
-                    >
-                        View Invoice
-                    </Button>
-
-                    <Button
-                        v-if="!item.packing_list"
-                        variant="outline"
-                        size="sm"
-                        @click.stop="generatePackingList(item)"
-                    >
-                        Packing List
-                    </Button>
-                    <Button
-                        v-else
-                        variant="outline"
-                        size="sm"
-                        @click.stop="viewPackingList(item)"
-                    >
-                        View Packing
-                    </Button>
-
-                    <Button
-                        variant="outline"
-                        size="sm"
-                        @click.stop="openEditDialog(item)"
-                    >
-                        Edit
-                    </Button>
-                    <Button
-                        variant="destructive"
-                        size="sm"
-                        @click.stop="deleteItem(item)"
-                    >
-                        Delete
-                    </Button>
-                </td>
-            </tr>
-
-            <!-- Expanded Row with Order Details -->
-            <tr v-if="expandedRows.has(item.id)" class="bg-muted/20">
-                <td :colspan="tableFields.length + 2" class="p-4">
-                    <div class="space-y-4">
-                        <h4 class="text-lg font-semibold">Order Details</h4>
-
-                        <!-- Basic Order Information -->
-                        <div class="mb-4 grid grid-cols-2 gap-4 text-sm">
-                            <div
-                                v-for="field in [
-                                    'date',
-                                    'status',
-                                    'estimated_delivery_date',
-                                ]"
-                                :key="field"
-                            >
-                                <strong>{{ formatLabel(field) }}:</strong>
-                                {{ formatValue(item[field]) }}
-                            </div>
-                        </div>
-
-                        <!-- Batches Section -->
-                        <div class="rounded-lg border p-4">
-                            <h5 class="mb-3 font-semibold">
-                                Batches in this Order
-                            </h5>
-                            <div v-if="item.batches && item.batches.length">
-                                <div
-                                    v-for="batch in item.batches"
-                                    :key="batch.id"
-                                    class="flex items-center justify-between border-b p-2 last:border-b-0"
-                                >
-                                    <div>
-                                        <div class="font-medium">
-                                            {{ batch.batch_code }} -
-                                            {{ batch.product?.name }}
-                                        </div>
-                                        <div
-                                            class="text-muted-foreground text-sm"
-                                        >
-                                            Quantity:
-                                            {{ batch.pivot.quantity }} • Price:
-                                            ${{ batch.pivot.price_per_unit }} •
-                                            Total: ${{
-                                                batch.pivot.total_price
-                                            }}
-                                        </div>
-                                    </div>
-                                    <Button
-                                        variant="outline"
-                                        size="sm"
-                                        @click.stop="
-                                            router.get(
-                                                `/batches?open_id=${batch.id}`,
-                                            )
-                                        "
-                                    >
-                                        View Batch
-                                    </Button>
-                                </div>
-                            </div>
-                            <div v-else class="text-muted-foreground">
-                                No batches associated with this order.
-                            </div>
-                        </div>
-
-                        <!-- Payment Information -->
-                        <div class="rounded-lg border p-4">
-                            <div class="flex items-center justify-between mb-3">
-                                <h5 class="font-semibold">
-                                    Payment Information
-                                </h5>
-                                <div class="flex space-x-2">
-                                    <Button
-                                        v-if="!getOrderPayment(item)"
-                                        variant="outline"
-                                        size="sm"
-                                        @click="createPayment(item)"
-                                    >
-                                        Create Payment
-                                    </Button>
-                                    <Button
-                                        v-else
-                                        variant="outline"
-                                        size="sm"
-                                        @click="editPayment(item)"
-                                    >
-                                        Edit Payment
-                                    </Button>
-                                </div>
-                            </div>
-                            <div v-if="getOrderPayment(item)">
-                                <div class="grid grid-cols-2 gap-4 text-sm">
-                                    <div>
-                                        <strong>Status:</strong>
-                                        <Badge
-                                            :variant="getPaymentStatusBadgeVariant(getOrderPayment(item).payment_status)"
-                                            :class="getPaymentStatusBadgeClass(getOrderPayment(item).payment_status)"
-                                            class="ml-2"
-                                        >
-                                            {{ getOrderPayment(item).payment_status }}
-                                        </Badge>
-                                    </div>
-                                    <div>
-                                        <strong>Amount:</strong> ${{
-                                            getOrderPayment(item).amount
-                                        }} {{ getOrderPayment(item).currency }}
-                                    </div>
-                                    <div>
-                                        <strong>Due Date:</strong>
-                                        {{
-                                            new Date(
-                                                getOrderPayment(item).due_date,
-                                            ).toLocaleDateString()
-                                        }}
-                                    </div>
-                                    <div>
-                                        <strong>Payment Date:</strong>
-                                        {{
-                                            getOrderPayment(item).payment_date
-                                                ? new Date(
-                                                    getOrderPayment(item).payment_date,
-                                                ).toLocaleDateString()
-                                                : 'Not paid'
-                                        }}
-                                    </div>
-                                    <div>
-                                        <strong>Payment Method:</strong>
-                                        {{ getOrderPayment(item).payment_method }}
-                                    </div>
-                                    <div>
-                                        <strong>Exchange Rate:</strong>
-                                        {{ getOrderPayment(item).exchange_rate }}
-                                    </div>
-                                </div>
-                            </div>
-                            <div v-else class="text-muted-foreground">
-                                No payment information available. Click "Create Payment" to add payment details.
-                            </div>
-                        </div>
-
-                        <!-- Related Documents -->
-                        <div class="rounded-lg border p-4">
-                            <h5 class="mb-3 font-semibold">
-                                Related Documents
-                            </h5>
-                            <div class="flex space-x-2">
-                                <Button
-                                    v-if="item.invoice"
-                                    variant="outline"
-                                    size="sm"
-                                    @click="viewInvoice(item)"
-                                >
-                                    View Invoice #{{ item.invoice.id }}
-                                </Button>
-                                <Button
-                                    v-else
-                                    variant="outline"
-                                    size="sm"
-                                    @click="generateInvoice(item)"
-                                >
-                                    Create Invoice
-                                </Button>
-
-                                <Button
-                                    v-if="item.packing_list"
-                                    variant="outline"
-                                    size="sm"
-                                    @click="viewPackingList(item)"
-                                >
-                                    View Packing List
-                                </Button>
-                                <Button
-                                    v-else
-                                    variant="outline"
-                                    size="sm"
-                                    @click="generatePackingList(item)"
-                                >
-                                    Create Packing List
-                                </Button>
-                            </div>
-                        </div>
-
-                        <!-- Metadata -->
-                        <div class="text-muted-foreground text-xs">
-                            Created:
-                            {{ new Date(item.created_at).toLocaleString() }} |
-                            Updated:
-                            {{ new Date(item.updated_at).toLocaleString() }}
-                        </div>
-                    </div>
-                </td>
-            </tr>
-        </template>
-    </GenericModelPage>
-</template>
-
-<style scoped>
-.fk-link {
-    color: #2563eb;
-    text-decoration: underline;
-    cursor: pointer;
-    display: inline-flex;
-    align-items: center;
-    gap: 0.25rem;
-    transition: all 0.2s ease;
-}
-
-.fk-link:hover {
-    color: #1d4ed8;
-    background-color: #eff6ff;
-    padding: 0.125rem 0.25rem;
-    border-radius: 0.25rem;
-}
-
-/* Custom badge styles for better visual indication */
-:deep(.bg-green-100) {
-    background-color: #dcfce7;
-}
-:deep(.text-green-800) {
-    color: #166534;
-}
-:deep(.border-green-200) {
-    border-color: #bbf7d0;
-}
-
-:deep(.bg-yellow-100) {
-    background-color: #fef9c3;
-}
-:deep(.text-yellow-800) {
-    color: #854d0e;
-}
-:deep(.border-yellow-200) {
-    border-color: #fef08a;
-}
-
-:deep(.bg-red-100) {
-    background-color: #fee2e2;
-}
-:deep(.text-red-800) {
-    color: #991b1b;
-}
-:deep(.border-red-200) {
-    border-color: #fecaca;
-}
-
-:deep(.bg-blue-100) {
-    background-color: #dbeafe;
-}
-:deep(.text-blue-800) {
-    color: #1e40af;
-}
-:deep(.border-blue-200) {
-    border-color: #bfdbfe;
-}
-
-:deep(.bg-gray-100) {
-    background-color: #f3f4f6;
-}
-:deep(.text-gray-800) {
-    color: #374151;
-}
-:deep(.border-gray-200) {
-    border-color: #e5e7eb;
-}
-</style>
Index: resources/js/Pages/Profile/Edit.vue
===================================================================
--- resources/js/Pages/Profile/Edit.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Profile/Edit.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,52 @@
+<script setup lang="ts">
+import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout.vue';
+import DeleteUserForm from './Partials/DeleteUserForm.vue';
+import UpdatePasswordForm from './Partials/UpdatePasswordForm.vue';
+import UpdateProfileInformationForm from './Partials/UpdateProfileInformationForm.vue';
+import { Head } from '@inertiajs/vue3';
+
+defineProps<{
+    mustVerifyEmail?: boolean;
+    status?: string;
+}>();
+</script>
+
+<template>
+    <Head title="Profile" />
+
+    <AuthenticatedLayout>
+        <template #header>
+            <h2
+                class="text-xl font-semibold leading-tight text-gray-800 dark:text-gray-200"
+            >
+                Profile
+            </h2>
+        </template>
+
+        <div class="py-12">
+            <div class="mx-auto max-w-7xl space-y-6 sm:px-6 lg:px-8">
+                <div
+                    class="bg-white p-4 shadow sm:rounded-lg sm:p-8 dark:bg-gray-800"
+                >
+                    <UpdateProfileInformationForm
+                        :must-verify-email="mustVerifyEmail"
+                        :status="status"
+                        class="max-w-xl"
+                    />
+                </div>
+
+                <div
+                    class="bg-white p-4 shadow sm:rounded-lg sm:p-8 dark:bg-gray-800"
+                >
+                    <UpdatePasswordForm class="max-w-xl" />
+                </div>
+
+                <div
+                    class="bg-white p-4 shadow sm:rounded-lg sm:p-8 dark:bg-gray-800"
+                >
+                    <DeleteUserForm class="max-w-xl" />
+                </div>
+            </div>
+        </div>
+    </AuthenticatedLayout>
+</template>
Index: resources/js/Pages/Profile/Partials/DeleteUserForm.vue
===================================================================
--- resources/js/Pages/Profile/Partials/DeleteUserForm.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Profile/Partials/DeleteUserForm.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,110 @@
+<script setup lang="ts">
+import DangerButton from '@/Components/DangerButton.vue';
+import InputError from '@/Components/InputError.vue';
+import InputLabel from '@/Components/InputLabel.vue';
+import Modal from '@/Components/Modal.vue';
+import SecondaryButton from '@/Components/SecondaryButton.vue';
+import TextInput from '@/Components/TextInput.vue';
+import { useForm } from '@inertiajs/vue3';
+import { nextTick, ref } from 'vue';
+
+const confirmingUserDeletion = ref(false);
+const passwordInput = ref<HTMLInputElement | null>(null);
+
+const form = useForm({
+    password: '',
+});
+
+const confirmUserDeletion = () => {
+    confirmingUserDeletion.value = true;
+
+    nextTick(() => passwordInput.value?.focus());
+};
+
+const deleteUser = () => {
+    form.delete(route('profile.destroy'), {
+        preserveScroll: true,
+        onSuccess: () => closeModal(),
+        onError: () => passwordInput.value?.focus(),
+        onFinish: () => {
+            form.reset();
+        },
+    });
+};
+
+const closeModal = () => {
+    confirmingUserDeletion.value = false;
+
+    form.clearErrors();
+    form.reset();
+};
+</script>
+
+<template>
+    <section class="space-y-6">
+        <header>
+            <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
+                Delete Account
+            </h2>
+
+            <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
+                Once your account is deleted, all of its resources and data will
+                be permanently deleted. Before deleting your account, please
+                download any data or information that you wish to retain.
+            </p>
+        </header>
+
+        <DangerButton @click="confirmUserDeletion">Delete Account</DangerButton>
+
+        <Modal :show="confirmingUserDeletion" @close="closeModal">
+            <div class="p-6">
+                <h2
+                    class="text-lg font-medium text-gray-900 dark:text-gray-100"
+                >
+                    Are you sure you want to delete your account?
+                </h2>
+
+                <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
+                    Once your account is deleted, all of its resources and data
+                    will be permanently deleted. Please enter your password to
+                    confirm you would like to permanently delete your account.
+                </p>
+
+                <div class="mt-6">
+                    <InputLabel
+                        for="password"
+                        value="Password"
+                        class="sr-only"
+                    />
+
+                    <TextInput
+                        id="password"
+                        ref="passwordInput"
+                        v-model="form.password"
+                        type="password"
+                        class="mt-1 block w-3/4"
+                        placeholder="Password"
+                        @keyup.enter="deleteUser"
+                    />
+
+                    <InputError :message="form.errors.password" class="mt-2" />
+                </div>
+
+                <div class="mt-6 flex justify-end">
+                    <SecondaryButton @click="closeModal">
+                        Cancel
+                    </SecondaryButton>
+
+                    <DangerButton
+                        class="ms-3"
+                        :class="{ 'opacity-25': form.processing }"
+                        :disabled="form.processing"
+                        @click="deleteUser"
+                    >
+                        Delete Account
+                    </DangerButton>
+                </div>
+            </div>
+        </Modal>
+    </section>
+</template>
Index: resources/js/Pages/Profile/Partials/UpdatePasswordForm.vue
===================================================================
--- resources/js/Pages/Profile/Partials/UpdatePasswordForm.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Profile/Partials/UpdatePasswordForm.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,124 @@
+<script setup lang="ts">
+import InputError from '@/Components/InputError.vue';
+import InputLabel from '@/Components/InputLabel.vue';
+import PrimaryButton from '@/Components/PrimaryButton.vue';
+import TextInput from '@/Components/TextInput.vue';
+import { useForm } from '@inertiajs/vue3';
+import { ref } from 'vue';
+
+const passwordInput = ref<HTMLInputElement | null>(null);
+const currentPasswordInput = ref<HTMLInputElement | null>(null);
+
+const form = useForm({
+    current_password: '',
+    password: '',
+    password_confirmation: '',
+});
+
+const updatePassword = () => {
+    form.put(route('password.update'), {
+        preserveScroll: true,
+        onSuccess: () => {
+            form.reset();
+        },
+        onError: () => {
+            if (form.errors.password) {
+                form.reset('password', 'password_confirmation');
+                passwordInput.value?.focus();
+            }
+            if (form.errors.current_password) {
+                form.reset('current_password');
+                currentPasswordInput.value?.focus();
+            }
+        },
+    });
+};
+</script>
+
+<template>
+    <section>
+        <header>
+            <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
+                Update Password
+            </h2>
+
+            <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
+                Ensure your account is using a long, random password to stay
+                secure.
+            </p>
+        </header>
+
+        <form @submit.prevent="updatePassword" class="mt-6 space-y-6">
+            <div>
+                <InputLabel for="current_password" value="Current Password" />
+
+                <TextInput
+                    id="current_password"
+                    ref="currentPasswordInput"
+                    v-model="form.current_password"
+                    type="password"
+                    class="mt-1 block w-full"
+                    autocomplete="current-password"
+                />
+
+                <InputError
+                    :message="form.errors.current_password"
+                    class="mt-2"
+                />
+            </div>
+
+            <div>
+                <InputLabel for="password" value="New Password" />
+
+                <TextInput
+                    id="password"
+                    ref="passwordInput"
+                    v-model="form.password"
+                    type="password"
+                    class="mt-1 block w-full"
+                    autocomplete="new-password"
+                />
+
+                <InputError :message="form.errors.password" class="mt-2" />
+            </div>
+
+            <div>
+                <InputLabel
+                    for="password_confirmation"
+                    value="Confirm Password"
+                />
+
+                <TextInput
+                    id="password_confirmation"
+                    v-model="form.password_confirmation"
+                    type="password"
+                    class="mt-1 block w-full"
+                    autocomplete="new-password"
+                />
+
+                <InputError
+                    :message="form.errors.password_confirmation"
+                    class="mt-2"
+                />
+            </div>
+
+            <div class="flex items-center gap-4">
+                <PrimaryButton :disabled="form.processing">Save</PrimaryButton>
+
+                <Transition
+                    enter-active-class="transition ease-in-out"
+                    enter-from-class="opacity-0"
+                    leave-active-class="transition ease-in-out"
+                    leave-to-class="opacity-0"
+                >
+                    <p
+                        v-if="form.recentlySuccessful"
+                        class="text-sm text-gray-600 dark:text-gray-400"
+                    >
+                        Saved.
+                    </p>
+                </Transition>
+            </div>
+        </form>
+    </section>
+</template>
Index: resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue
===================================================================
--- resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,108 @@
+<script setup lang="ts">
+import InputError from '@/Components/InputError.vue';
+import InputLabel from '@/Components/InputLabel.vue';
+import PrimaryButton from '@/Components/PrimaryButton.vue';
+import TextInput from '@/Components/TextInput.vue';
+import { Link, useForm, usePage } from '@inertiajs/vue3';
+
+defineProps<{
+    mustVerifyEmail?: Boolean;
+    status?: String;
+}>();
+
+const user = usePage().props.auth.user;
+
+const form = useForm({
+    name: user.name,
+    email: user.email,
+});
+</script>
+
+<template>
+    <section>
+        <header>
+            <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
+                Profile Information
+            </h2>
+
+            <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
+                Update your account's profile information and email address.
+            </p>
+        </header>
+
+        <form
+            @submit.prevent="form.patch(route('profile.update'))"
+            class="mt-6 space-y-6"
+        >
+            <div>
+                <InputLabel for="name" value="Name" />
+
+                <TextInput
+                    id="name"
+                    type="text"
+                    class="mt-1 block w-full"
+                    v-model="form.name"
+                    required
+                    autofocus
+                    autocomplete="name"
+                />
+
+                <InputError class="mt-2" :message="form.errors.name" />
+            </div>
+
+            <div>
+                <InputLabel for="email" value="Email" />
+
+                <TextInput
+                    id="email"
+                    type="email"
+                    class="mt-1 block w-full"
+                    v-model="form.email"
+                    required
+                    autocomplete="username"
+                />
+
+                <InputError class="mt-2" :message="form.errors.email" />
+            </div>
+
+            <div v-if="mustVerifyEmail && user.email_verified_at === null">
+                <p class="mt-2 text-sm text-gray-800 dark:text-gray-200">
+                    Your email address is unverified.
+                    <Link
+                        :href="route('verification.send')"
+                        method="post"
+                        as="button"
+                        class="rounded-md text-sm text-gray-600 underline hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:text-gray-400 dark:hover:text-gray-100 dark:focus:ring-offset-gray-800"
+                    >
+                        Click here to re-send the verification email.
+                    </Link>
+                </p>
+
+                <div
+                    v-show="status === 'verification-link-sent'"
+                    class="mt-2 text-sm font-medium text-green-600 dark:text-green-400"
+                >
+                    A new verification link has been sent to your email address.
+                </div>
+            </div>
+
+            <div class="flex items-center gap-4">
+                <PrimaryButton :disabled="form.processing">Save</PrimaryButton>
+
+                <Transition
+                    enter-active-class="transition ease-in-out"
+                    enter-from-class="opacity-0"
+                    leave-active-class="transition ease-in-out"
+                    leave-to-class="opacity-0"
+                >
+                    <p
+                        v-if="form.recentlySuccessful"
+                        class="text-sm text-gray-600 dark:text-gray-400"
+                    >
+                        Saved.
+                    </p>
+                </Transition>
+            </div>
+        </form>
+    </section>
+</template>
Index: resources/js/Pages/Welcome.vue
===================================================================
--- resources/js/Pages/Welcome.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ resources/js/Pages/Welcome.vue	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,376 @@
+<script setup lang="ts">
+import { Head, Link } from '@inertiajs/vue3';
+
+defineProps<{
+    canLogin?: boolean;
+    canRegister?: boolean;
+    laravelVersion: string;
+    phpVersion: string;
+}>();
+
+function handleImageError() {
+    document.getElementById('screenshot-container')?.classList.add('!hidden');
+    document.getElementById('docs-card')?.classList.add('!row-span-1');
+    document.getElementById('docs-card-content')?.classList.add('!flex-row');
+    document.getElementById('background')?.classList.add('!hidden');
+}
+</script>
+
+<template>
+    <Head title="Welcome" />
+    <div class="bg-gray-50 text-black/50 dark:bg-black dark:text-white/50">
+        <img
+            id="background"
+            class="absolute -left-20 top-0 max-w-[877px]"
+            src="https://laravel.com/assets/img/welcome/background.svg"
+        />
+        <div
+            class="relative flex min-h-screen flex-col items-center justify-center selection:bg-[#FF2D20] selection:text-white"
+        >
+            <div class="relative w-full max-w-2xl px-6 lg:max-w-7xl">
+                <header
+                    class="grid grid-cols-2 items-center gap-2 py-10 lg:grid-cols-3"
+                >
+                    <div class="flex lg:col-start-2 lg:justify-center">
+                        <svg
+                            class="h-12 w-auto text-white lg:h-16 lg:text-[#FF2D20]"
+                            viewBox="0 0 62 65"
+                            fill="none"
+                            xmlns="http://www.w3.org/2000/svg"
+                        >
+                            <path
+                                d="M61.8548 14.6253C61.8778 14.7102 61.8895 14.7978 61.8897 14.8858V28.5615C61.8898 28.737 61.8434 28.9095 61.7554 29.0614C61.6675 29.2132 61.5409 29.3392 61.3887 29.4265L49.9104 36.0351V49.1337C49.9104 49.4902 49.7209 49.8192 49.4118 49.9987L25.4519 63.7916C25.3971 63.8227 25.3372 63.8427 25.2774 63.8639C25.255 63.8714 25.2338 63.8851 25.2101 63.8913C25.0426 63.9354 24.8666 63.9354 24.6991 63.8913C24.6716 63.8838 24.6467 63.8689 24.6205 63.8589C24.5657 63.8389 24.5084 63.8215 24.456 63.7916L0.501061 49.9987C0.348882 49.9113 0.222437 49.7853 0.134469 49.6334C0.0465019 49.4816 0.000120578 49.3092 0 49.1337L0 8.10652C0 8.01678 0.0124642 7.92953 0.0348998 7.84477C0.0423783 7.8161 0.0598282 7.78993 0.0697995 7.76126C0.0884958 7.70891 0.105946 7.65531 0.133367 7.6067C0.152063 7.5743 0.179485 7.54812 0.20192 7.51821C0.230588 7.47832 0.256763 7.43719 0.290416 7.40229C0.319084 7.37362 0.356476 7.35243 0.388883 7.32751C0.425029 7.29759 0.457436 7.26518 0.498568 7.2415L12.4779 0.345059C12.6296 0.257786 12.8015 0.211853 12.9765 0.211853C13.1515 0.211853 13.3234 0.257786 13.475 0.345059L25.4531 7.2415H25.4556C25.4955 7.26643 25.5292 7.29759 25.5653 7.32626C25.5977 7.35119 25.6339 7.37362 25.6625 7.40104C25.6974 7.43719 25.7224 7.47832 25.7523 7.51821C25.7735 7.54812 25.8021 7.5743 25.8196 7.6067C25.8483 7.65656 25.8645 7.70891 25.8844 7.76126C25.8944 7.78993 25.9118 7.8161 25.9193 7.84602C25.9423 7.93096 25.954 8.01853 25.9542 8.10652V33.7317L35.9355 27.9844V14.8846C35.9355 14.7973 35.948 14.7088 35.9704 14.6253C35.9792 14.5954 35.9954 14.5692 36.0053 14.5405C36.0253 14.4882 36.0427 14.4346 36.0702 14.386C36.0888 14.3536 36.1163 14.3274 36.1375 14.2975C36.1674 14.2576 36.1923 14.2165 36.2272 14.1816C36.2559 14.1529 36.292 14.1317 36.3244 14.1068C36.3618 14.0769 36.3942 14.0445 36.4341 14.0208L48.4147 7.12434C48.5663 7.03694 48.7383 6.99094 48.9133 6.99094C49.0883 6.99094 49.2602 7.03694 49.4118 7.12434L61.3899 14.0208C61.4323 14.0457 61.4647 14.0769 61.5021 14.1055C61.5333 14.1305 61.5694 14.1529 61.5981 14.1803C61.633 14.2165 61.6579 14.2576 61.6878 14.2975C61.7103 14.3274 61.7377 14.3536 61.7551 14.386C61.7838 14.4346 61.8 14.4882 61.8199 14.5405C61.8312 14.5692 61.8474 14.5954 61.8548 14.6253ZM59.893 27.9844V16.6121L55.7013 19.0252L49.9104 22.3593V33.7317L59.8942 27.9844H59.893ZM47.9149 48.5566V37.1768L42.2187 40.4299L25.953 49.7133V61.2003L47.9149 48.5566ZM1.99677 9.83281V48.5566L23.9562 61.199V49.7145L12.4841 43.2219L12.4804 43.2194L12.4754 43.2169C12.4368 43.1945 12.4044 43.1621 12.3682 43.1347C12.3371 43.1097 12.3009 43.0898 12.2735 43.0624L12.271 43.0586C12.2386 43.0275 12.2162 42.9888 12.1887 42.9539C12.1638 42.9203 12.1339 42.8916 12.114 42.8567L12.1127 42.853C12.0903 42.8156 12.0766 42.7707 12.0604 42.7283C12.0442 42.6909 12.023 42.656 12.013 42.6161C12.0005 42.5688 11.998 42.5177 11.9931 42.4691C11.9881 42.4317 11.9781 42.3943 11.9781 42.3569V15.5801L6.18848 12.2446L1.99677 9.83281ZM12.9777 2.36177L2.99764 8.10652L12.9752 13.8513L22.9541 8.10527L12.9752 2.36177H12.9777ZM18.1678 38.2138L23.9574 34.8809V9.83281L19.7657 12.2459L13.9749 15.5801V40.6281L18.1678 38.2138ZM48.9133 9.14105L38.9344 14.8858L48.9133 20.6305L58.8909 14.8846L48.9133 9.14105ZM47.9149 22.3593L42.124 19.0252L37.9323 16.6121V27.9844L43.7219 31.3174L47.9149 33.7317V22.3593ZM24.9533 47.987L39.59 39.631L46.9065 35.4555L36.9352 29.7145L25.4544 36.3242L14.9907 42.3482L24.9533 47.987Z"
+                                fill="currentColor"
+                            />
+                        </svg>
+                    </div>
+                    <nav v-if="canLogin" class="-mx-3 flex flex-1 justify-end">
+                        <Link
+                            v-if="$page.props.auth.user"
+                            :href="route('dashboard')"
+                            class="rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white/80 dark:focus-visible:ring-white"
+                        >
+                            Dashboard
+                        </Link>
+
+                        <template v-else>
+                            <Link
+                                :href="route('login')"
+                                class="rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white/80 dark:focus-visible:ring-white"
+                            >
+                                Log in
+                            </Link>
+
+                            <Link
+                                v-if="canRegister"
+                                :href="route('register')"
+                                class="rounded-md px-3 py-2 text-black ring-1 ring-transparent transition hover:text-black/70 focus:outline-none focus-visible:ring-[#FF2D20] dark:text-white dark:hover:text-white/80 dark:focus-visible:ring-white"
+                            >
+                                Register
+                            </Link>
+                        </template>
+                    </nav>
+                </header>
+
+                <main class="mt-6">
+                    <div class="grid gap-6 lg:grid-cols-2 lg:gap-8">
+                        <a
+                            href="https://laravel.com/docs"
+                            id="docs-card"
+                            class="flex flex-col items-start gap-6 overflow-hidden rounded-lg bg-white p-6 shadow-[0px_14px_34px_0px_rgba(0,0,0,0.08)] ring-1 ring-white/[0.05] transition duration-300 hover:text-black/70 hover:ring-black/20 focus:outline-none focus-visible:ring-[#FF2D20] md:row-span-3 lg:p-10 lg:pb-10 dark:bg-zinc-900 dark:ring-zinc-800 dark:hover:text-white/70 dark:hover:ring-zinc-700 dark:focus-visible:ring-[#FF2D20]"
+                        >
+                            <div
+                                id="screenshot-container"
+                                class="relative flex w-full flex-1 items-stretch"
+                            >
+                                <img
+                                    src="https://laravel.com/assets/img/welcome/docs-light.svg"
+                                    alt="Laravel documentation screenshot"
+                                    class="aspect-video h-full w-full flex-1 rounded-[10px] object-cover object-top drop-shadow-[0px_4px_34px_rgba(0,0,0,0.06)] dark:hidden"
+                                    @error="handleImageError"
+                                />
+                                <img
+                                    src="https://laravel.com/assets/img/welcome/docs-dark.svg"
+                                    alt="Laravel documentation screenshot"
+                                    class="hidden aspect-video h-full w-full flex-1 rounded-[10px] object-cover object-top drop-shadow-[0px_4px_34px_rgba(0,0,0,0.25)] dark:block"
+                                />
+                                <div
+                                    class="absolute -bottom-16 -left-16 h-40 w-[calc(100%+8rem)] bg-gradient-to-b from-transparent via-white to-white dark:via-zinc-900 dark:to-zinc-900"
+                                ></div>
+                            </div>
+
+                            <div
+                                class="relative flex items-center gap-6 lg:items-end"
+                            >
+                                <div
+                                    id="docs-card-content"
+                                    class="flex items-start gap-6 lg:flex-col"
+                                >
+                                    <div
+                                        class="flex size-12 shrink-0 items-center justify-center rounded-full bg-[#FF2D20]/10 sm:size-16"
+                                    >
+                                        <svg
+                                            class="size-5 sm:size-6"
+                                            xmlns="http://www.w3.org/2000/svg"
+                                            fill="none"
+                                            viewBox="0 0 24 24"
+                                        >
+                                            <path
+                                                fill="#FF2D20"
+                                                d="M23 4a1 1 0 0 0-1.447-.894L12.224 7.77a.5.5 0 0 1-.448 0L2.447 3.106A1 1 0 0 0 1 4v13.382a1.99 1.99 0 0 0 1.105 1.79l9.448 4.728c.14.065.293.1.447.1.154-.005.306-.04.447-.105l9.453-4.724a1.99 1.99 0 0 0 1.1-1.789V4ZM3 6.023a.25.25 0 0 1 .362-.223l7.5 3.75a.251.251 0 0 1 .138.223v11.2a.25.25 0 0 1-.362.224l-7.5-3.75a.25.25 0 0 1-.138-.22V6.023Zm18 11.2a.25.25 0 0 1-.138.224l-7.5 3.75a.249.249 0 0 1-.329-.099.249.249 0 0 1-.033-.12V9.772a.251.251 0 0 1 .138-.224l7.5-3.75a.25.25 0 0 1 .362.224v11.2Z"
+                                            />
+                                            <path
+                                                fill="#FF2D20"
+                                                d="m3.55 1.893 8 4.048a1.008 1.008 0 0 0 .9 0l8-4.048a1 1 0 0 0-.9-1.785l-7.322 3.706a.506.506 0 0 1-.452 0L4.454.108a1 1 0 0 0-.9 1.785H3.55Z"
+                                            />
+                                        </svg>
+                                    </div>
+
+                                    <div class="pt-3 sm:pt-5 lg:pt-0">
+                                        <h2
+                                            class="text-xl font-semibold text-black dark:text-white"
+                                        >
+                                            Documentation
+                                        </h2>
+
+                                        <p class="mt-4 text-sm/relaxed">
+                                            Laravel has wonderful documentation
+                                            covering every aspect of the
+                                            framework. Whether you are a
+                                            newcomer or have prior experience
+                                            with Laravel, we recommend reading
+                                            our documentation from beginning to
+                                            end.
+                                        </p>
+                                    </div>
+                                </div>
+
+                                <svg
+                                    class="size-6 shrink-0 stroke-[#FF2D20]"
+                                    xmlns="http://www.w3.org/2000/svg"
+                                    fill="none"
+                                    viewBox="0 0 24 24"
+                                    stroke-width="1.5"
+                                >
+                                    <path
+                                        stroke-linecap="round"
+                                        stroke-linejoin="round"
+                                        d="M4.5 12h15m0 0l-6.75-6.75M19.5 12l-6.75 6.75"
+                                    />
+                                </svg>
+                            </div>
+                        </a>
+
+                        <a
+                            href="https://laracasts.com"
+                            class="flex items-start gap-4 rounded-lg bg-white p-6 shadow-[0px_14px_34px_0px_rgba(0,0,0,0.08)] ring-1 ring-white/[0.05] transition duration-300 hover:text-black/70 hover:ring-black/20 focus:outline-none focus-visible:ring-[#FF2D20] lg:pb-10 dark:bg-zinc-900 dark:ring-zinc-800 dark:hover:text-white/70 dark:hover:ring-zinc-700 dark:focus-visible:ring-[#FF2D20]"
+                        >
+                            <div
+                                class="flex size-12 shrink-0 items-center justify-center rounded-full bg-[#FF2D20]/10 sm:size-16"
+                            >
+                                <svg
+                                    class="size-5 sm:size-6"
+                                    xmlns="http://www.w3.org/2000/svg"
+                                    fill="none"
+                                    viewBox="0 0 24 24"
+                                >
+                                    <g fill="#FF2D20">
+                                        <path
+                                            d="M24 8.25a.5.5 0 0 0-.5-.5H.5a.5.5 0 0 0-.5.5v12a2.5 2.5 0 0 0 2.5 2.5h19a2.5 2.5 0 0 0 2.5-2.5v-12Zm-7.765 5.868a1.221 1.221 0 0 1 0 2.264l-6.626 2.776A1.153 1.153 0 0 1 8 18.123v-5.746a1.151 1.151 0 0 1 1.609-1.035l6.626 2.776ZM19.564 1.677a.25.25 0 0 0-.177-.427H15.6a.106.106 0 0 0-.072.03l-4.54 4.543a.25.25 0 0 0 .177.427h3.783c.027 0 .054-.01.073-.03l4.543-4.543ZM22.071 1.318a.047.047 0 0 0-.045.013l-4.492 4.492a.249.249 0 0 0 .038.385.25.25 0 0 0 .14.042h5.784a.5.5 0 0 0 .5-.5v-2a2.5 2.5 0 0 0-1.925-2.432ZM13.014 1.677a.25.25 0 0 0-.178-.427H9.101a.106.106 0 0 0-.073.03l-4.54 4.543a.25.25 0 0 0 .177.427H8.4a.106.106 0 0 0 .073-.03l4.54-4.543ZM6.513 1.677a.25.25 0 0 0-.177-.427H2.5A2.5 2.5 0 0 0 0 3.75v2a.5.5 0 0 0 .5.5h1.4a.106.106 0 0 0 .073-.03l4.54-4.543Z"
+                                        />
+                                    </g>
+                                </svg>
+                            </div>
+
+                            <div class="pt-3 sm:pt-5">
+                                <h2
+                                    class="text-xl font-semibold text-black dark:text-white"
+                                >
+                                    Laracasts
+                                </h2>
+
+                                <p class="mt-4 text-sm/relaxed">
+                                    Laracasts offers thousands of video
+                                    tutorials on Laravel, PHP, and JavaScript
+                                    development. Check them out, see for
+                                    yourself, and massively level up your
+                                    development skills in the process.
+                                </p>
+                            </div>
+
+                            <svg
+                                class="size-6 shrink-0 self-center stroke-[#FF2D20]"
+                                xmlns="http://www.w3.org/2000/svg"
+                                fill="none"
+                                viewBox="0 0 24 24"
+                                stroke-width="1.5"
+                            >
+                                <path
+                                    stroke-linecap="round"
+                                    stroke-linejoin="round"
+                                    d="M4.5 12h15m0 0l-6.75-6.75M19.5 12l-6.75 6.75"
+                                />
+                            </svg>
+                        </a>
+
+                        <a
+                            href="https://laravel-news.com"
+                            class="flex items-start gap-4 rounded-lg bg-white p-6 shadow-[0px_14px_34px_0px_rgba(0,0,0,0.08)] ring-1 ring-white/[0.05] transition duration-300 hover:text-black/70 hover:ring-black/20 focus:outline-none focus-visible:ring-[#FF2D20] lg:pb-10 dark:bg-zinc-900 dark:ring-zinc-800 dark:hover:text-white/70 dark:hover:ring-zinc-700 dark:focus-visible:ring-[#FF2D20]"
+                        >
+                            <div
+                                class="flex size-12 shrink-0 items-center justify-center rounded-full bg-[#FF2D20]/10 sm:size-16"
+                            >
+                                <svg
+                                    class="size-5 sm:size-6"
+                                    xmlns="http://www.w3.org/2000/svg"
+                                    fill="none"
+                                    viewBox="0 0 24 24"
+                                >
+                                    <g fill="#FF2D20">
+                                        <path
+                                            d="M8.75 4.5H5.5c-.69 0-1.25.56-1.25 1.25v4.75c0 .69.56 1.25 1.25 1.25h3.25c.69 0 1.25-.56 1.25-1.25V5.75c0-.69-.56-1.25-1.25-1.25Z"
+                                        />
+                                        <path
+                                            d="M24 10a3 3 0 0 0-3-3h-2V2.5a2 2 0 0 0-2-2H2a2 2 0 0 0-2 2V20a3.5 3.5 0 0 0 3.5 3.5h17A3.5 3.5 0 0 0 24 20V10ZM3.5 21.5A1.5 1.5 0 0 1 2 20V3a.5.5 0 0 1 .5-.5h14a.5.5 0 0 1 .5.5v17c0 .295.037.588.11.874a.5.5 0 0 1-.484.625L3.5 21.5ZM22 20a1.5 1.5 0 1 1-3 0V9.5a.5.5 0 0 1 .5-.5H21a1 1 0 0 1 1 1v10Z"
+                                        />
+                                        <path
+                                            d="M12.751 6.047h2a.75.75 0 0 1 .75.75v.5a.75.75 0 0 1-.75.75h-2A.75.75 0 0 1 12 7.3v-.5a.75.75 0 0 1 .751-.753ZM12.751 10.047h2a.75.75 0 0 1 .75.75v.5a.75.75 0 0 1-.75.75h-2A.75.75 0 0 1 12 11.3v-.5a.75.75 0 0 1 .751-.753ZM4.751 14.047h10a.75.75 0 0 1 .75.75v.5a.75.75 0 0 1-.75.75h-10A.75.75 0 0 1 4 15.3v-.5a.75.75 0 0 1 .751-.753ZM4.75 18.047h7.5a.75.75 0 0 1 .75.75v.5a.75.75 0 0 1-.75.75h-7.5A.75.75 0 0 1 4 19.3v-.5a.75.75 0 0 1 .75-.753Z"
+                                        />
+                                    </g>
+                                </svg>
+                            </div>
+
+                            <div class="pt-3 sm:pt-5">
+                                <h2
+                                    class="text-xl font-semibold text-black dark:text-white"
+                                >
+                                    Laravel News
+                                </h2>
+
+                                <p class="mt-4 text-sm/relaxed">
+                                    Laravel News is a community driven portal
+                                    and newsletter aggregating all of the latest
+                                    and most important news in the Laravel
+                                    ecosystem, including new package releases
+                                    and tutorials.
+                                </p>
+                            </div>
+
+                            <svg
+                                class="size-6 shrink-0 self-center stroke-[#FF2D20]"
+                                xmlns="http://www.w3.org/2000/svg"
+                                fill="none"
+                                viewBox="0 0 24 24"
+                                stroke-width="1.5"
+                            >
+                                <path
+                                    stroke-linecap="round"
+                                    stroke-linejoin="round"
+                                    d="M4.5 12h15m0 0l-6.75-6.75M19.5 12l-6.75 6.75"
+                                />
+                            </svg>
+                        </a>
+
+                        <div
+                            class="flex items-start gap-4 rounded-lg bg-white p-6 shadow-[0px_14px_34px_0px_rgba(0,0,0,0.08)] ring-1 ring-white/[0.05] lg:pb-10 dark:bg-zinc-900 dark:ring-zinc-800"
+                        >
+                            <div
+                                class="flex size-12 shrink-0 items-center justify-center rounded-full bg-[#FF2D20]/10 sm:size-16"
+                            >
+                                <svg
+                                    class="size-5 sm:size-6"
+                                    xmlns="http://www.w3.org/2000/svg"
+                                    fill="none"
+                                    viewBox="0 0 24 24"
+                                >
+                                    <g fill="#FF2D20">
+                                        <path
+                                            d="M16.597 12.635a.247.247 0 0 0-.08-.237 2.234 2.234 0 0 1-.769-1.68c.001-.195.03-.39.084-.578a.25.25 0 0 0-.09-.267 8.8 8.8 0 0 0-4.826-1.66.25.25 0 0 0-.268.181 2.5 2.5 0 0 1-2.4 1.824.045.045 0 0 0-.045.037 12.255 12.255 0 0 0-.093 3.86.251.251 0 0 0 .208.214c2.22.366 4.367 1.08 6.362 2.118a.252.252 0 0 0 .32-.079 10.09 10.09 0 0 0 1.597-3.733ZM13.616 17.968a.25.25 0 0 0-.063-.407A19.697 19.697 0 0 0 8.91 15.98a.25.25 0 0 0-.287.325c.151.455.334.898.548 1.328.437.827.981 1.594 1.619 2.28a.249.249 0 0 0 .32.044 29.13 29.13 0 0 0 2.506-1.99ZM6.303 14.105a.25.25 0 0 0 .265-.274 13.048 13.048 0 0 1 .205-4.045.062.062 0 0 0-.022-.07 2.5 2.5 0 0 1-.777-.982.25.25 0 0 0-.271-.149 11 11 0 0 0-5.6 2.815.255.255 0 0 0-.075.163c-.008.135-.02.27-.02.406.002.8.084 1.598.246 2.381a.25.25 0 0 0 .303.193 19.924 19.924 0 0 1 5.746-.438ZM9.228 20.914a.25.25 0 0 0 .1-.393 11.53 11.53 0 0 1-1.5-2.22 12.238 12.238 0 0 1-.91-2.465.248.248 0 0 0-.22-.187 18.876 18.876 0 0 0-5.69.33.249.249 0 0 0-.179.336c.838 2.142 2.272 4 4.132 5.353a.254.254 0 0 0 .15.048c1.41-.01 2.807-.282 4.117-.802ZM18.93 12.957l-.005-.008a.25.25 0 0 0-.268-.082 2.21 2.21 0 0 1-.41.081.25.25 0 0 0-.217.2c-.582 2.66-2.127 5.35-5.75 7.843a.248.248 0 0 0-.09.299.25.25 0 0 0 .065.091 28.703 28.703 0 0 0 2.662 2.12.246.246 0 0 0 .209.037c2.579-.701 4.85-2.242 6.456-4.378a.25.25 0 0 0 .048-.189 13.51 13.51 0 0 0-2.7-6.014ZM5.702 7.058a.254.254 0 0 0 .2-.165A2.488 2.488 0 0 1 7.98 5.245a.093.093 0 0 0 .078-.062 19.734 19.734 0 0 1 3.055-4.74.25.25 0 0 0-.21-.41 12.009 12.009 0 0 0-10.4 8.558.25.25 0 0 0 .373.281 12.912 12.912 0 0 1 4.826-1.814ZM10.773 22.052a.25.25 0 0 0-.28-.046c-.758.356-1.55.635-2.365.833a.25.25 0 0 0-.022.48c1.252.43 2.568.65 3.893.65.1 0 .2 0 .3-.008a.25.25 0 0 0 .147-.444c-.526-.424-1.1-.917-1.673-1.465ZM18.744 8.436a.249.249 0 0 0 .15.228 2.246 2.246 0 0 1 1.352 2.054c0 .337-.08.67-.23.972a.25.25 0 0 0 .042.28l.007.009a15.016 15.016 0 0 1 2.52 4.6.25.25 0 0 0 .37.132.25.25 0 0 0 .096-.114c.623-1.464.944-3.039.945-4.63a12.005 12.005 0 0 0-5.78-10.258.25.25 0 0 0-.373.274c.547 2.109.85 4.274.901 6.453ZM9.61 5.38a.25.25 0 0 0 .08.31c.34.24.616.561.8.935a.25.25 0 0 0 .3.127.631.631 0 0 1 .206-.034c2.054.078 4.036.772 5.69 1.991a.251.251 0 0 0 .267.024c.046-.024.093-.047.141-.067a.25.25 0 0 0 .151-.23A29.98 29.98 0 0 0 15.957.764a.25.25 0 0 0-.16-.164 11.924 11.924 0 0 0-2.21-.518.252.252 0 0 0-.215.076A22.456 22.456 0 0 0 9.61 5.38Z"
+                                        />
+                                    </g>
+                                </svg>
+                            </div>
+
+                            <div class="pt-3 sm:pt-5">
+                                <h2
+                                    class="text-xl font-semibold text-black dark:text-white"
+                                >
+                                    Vibrant Ecosystem
+                                </h2>
+
+                                <p class="mt-4 text-sm/relaxed">
+                                    Laravel's robust library of first-party
+                                    tools and libraries, such as
+                                    <a
+                                        href="https://forge.laravel.com"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white dark:focus-visible:ring-[#FF2D20]"
+                                        >Forge</a
+                                    >,
+                                    <a
+                                        href="https://vapor.laravel.com"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Vapor</a
+                                    >,
+                                    <a
+                                        href="https://nova.laravel.com"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Nova</a
+                                    >,
+                                    <a
+                                        href="https://envoyer.io"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Envoyer</a
+                                    >, and
+                                    <a
+                                        href="https://herd.laravel.com"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Herd</a
+                                    >
+                                    help you take your projects to the next
+                                    level. Pair them with powerful open source
+                                    libraries like
+                                    <a
+                                        href="https://laravel.com/docs/billing"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Cashier</a
+                                    >,
+                                    <a
+                                        href="https://laravel.com/docs/dusk"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Dusk</a
+                                    >,
+                                    <a
+                                        href="https://laravel.com/docs/broadcasting"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Echo</a
+                                    >,
+                                    <a
+                                        href="https://laravel.com/docs/horizon"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Horizon</a
+                                    >,
+                                    <a
+                                        href="https://laravel.com/docs/sanctum"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Sanctum</a
+                                    >,
+                                    <a
+                                        href="https://laravel.com/docs/telescope"
+                                        class="rounded-sm underline hover:text-black focus:outline-none focus-visible:ring-1 focus-visible:ring-[#FF2D20] dark:hover:text-white"
+                                        >Telescope</a
+                                    >, and more.
+                                </p>
+                            </div>
+                        </div>
+                    </div>
+                </main>
+
+                <footer
+                    class="py-16 text-center text-sm text-black dark:text-white/70"
+                >
+                    Laravel v{{ laravelVersion }} (PHP v{{ phpVersion }})
+                </footer>
+            </div>
+        </div>
+    </div>
+</template>
Index: sources/js/components/ui/badge/Badge.vue
===================================================================
--- resources/js/components/ui/badge/Badge.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,26 +1,0 @@
-<script setup lang="ts">
-import type { PrimitiveProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import type { BadgeVariants } from "."
-import { reactiveOmit } from "@vueuse/core"
-import { Primitive } from "reka-ui"
-import { cn } from "@/lib/utils"
-import { badgeVariants } from "."
-
-const props = defineProps<PrimitiveProps & {
-  variant?: BadgeVariants["variant"]
-  class?: HTMLAttributes["class"]
-}>()
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <Primitive
-    data-slot="badge"
-    :class="cn(badgeVariants({ variant }), props.class)"
-    v-bind="delegatedProps"
-  >
-    <slot />
-  </Primitive>
-</template>
Index: sources/js/components/ui/badge/index.ts
===================================================================
--- resources/js/components/ui/badge/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,26 +1,0 @@
-import type { VariantProps } from "class-variance-authority"
-import { cva } from "class-variance-authority"
-
-export { default as Badge } from "./Badge.vue"
-
-export const badgeVariants = cva(
-  "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
-  {
-    variants: {
-      variant: {
-        default:
-          "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
-        secondary:
-          "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
-        destructive:
-         "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
-        outline:
-          "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
-      },
-    },
-    defaultVariants: {
-      variant: "default",
-    },
-  },
-)
-export type BadgeVariants = VariantProps<typeof badgeVariants>
Index: sources/js/components/ui/button/Button.vue
===================================================================
--- resources/js/components/ui/button/Button.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,27 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from 'vue'
-import { Primitive, type PrimitiveProps } from 'reka-ui'
-import { cn } from '@/lib/utils'
-import { type ButtonVariants, buttonVariants } from '.'
-
-interface Props extends PrimitiveProps {
-  variant?: ButtonVariants['variant']
-  size?: ButtonVariants['size']
-  class?: HTMLAttributes['class']
-}
-
-const props = withDefaults(defineProps<Props>(), {
-  as: 'button',
-})
-</script>
-
-<template>
-  <Primitive
-    data-slot="button"
-    :as="as"
-    :as-child="asChild"
-    :class="cn(buttonVariants({ variant, size }), props.class)"
-  >
-    <slot />
-  </Primitive>
-</template>
Index: sources/js/components/ui/button/index.ts
===================================================================
--- resources/js/components/ui/button/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,36 +1,0 @@
-import { cva, type VariantProps } from 'class-variance-authority'
-
-export { default as Button } from './Button.vue'
-
-export const buttonVariants = cva(
-  'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*=\'size-\'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
-  {
-    variants: {
-      variant: {
-        default:
-          'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',
-        destructive:
-          'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
-        outline:
-          'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50',
-        secondary:
-          'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',
-        ghost:
-          'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
-        link: 'text-primary underline-offset-4 hover:underline',
-      },
-      size: {
-        default: 'h-9 px-4 py-2 has-[>svg]:px-3',
-        sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5',
-        lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
-        icon: 'size-9',
-      },
-    },
-    defaultVariants: {
-      variant: 'default',
-      size: 'default',
-    },
-  },
-)
-
-export type ButtonVariants = VariantProps<typeof buttonVariants>
Index: sources/js/components/ui/calendar/Calendar.vue
===================================================================
--- resources/js/components/ui/calendar/Calendar.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,61 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarRootEmits, CalendarRootProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { CalendarRoot, useForwardPropsEmits } from "reka-ui"
-import { cn } from "@/lib/utils"
-import { CalendarCell, CalendarCellTrigger, CalendarGrid, CalendarGridBody, CalendarGridHead, CalendarGridRow, CalendarHeadCell, CalendarHeader, CalendarHeading, CalendarNextButton, CalendarPrevButton } from "."
-
-const props = defineProps<CalendarRootProps & { class?: HTMLAttributes["class"] }>()
-const emits = defineEmits<CalendarRootEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <CalendarRoot
-    v-slot="{ grid, weekDays }"
-    data-slot="calendar"
-    :class="cn('p-3', props.class)"
-    v-bind="forwarded"
-  >
-    <CalendarHeader>
-      <CalendarHeading />
-
-      <div class="flex items-center gap-1">
-        <CalendarPrevButton />
-        <CalendarNextButton />
-      </div>
-    </CalendarHeader>
-
-    <div class="flex flex-col gap-y-4 mt-4 sm:flex-row sm:gap-x-4 sm:gap-y-0">
-      <CalendarGrid v-for="month in grid" :key="month.value.toString()">
-        <CalendarGridHead>
-          <CalendarGridRow>
-            <CalendarHeadCell
-              v-for="day in weekDays" :key="day"
-            >
-              {{ day }}
-            </CalendarHeadCell>
-          </CalendarGridRow>
-        </CalendarGridHead>
-        <CalendarGridBody>
-          <CalendarGridRow v-for="(weekDates, index) in month.rows" :key="`weekDate-${index}`" class="mt-2 w-full">
-            <CalendarCell
-              v-for="weekDate in weekDates"
-              :key="weekDate.toString()"
-              :date="weekDate"
-            >
-              <CalendarCellTrigger
-                :day="weekDate"
-                :month="month.value"
-              />
-            </CalendarCell>
-          </CalendarGridRow>
-        </CalendarGridBody>
-      </CalendarGrid>
-    </div>
-  </CalendarRoot>
-</template>
Index: sources/js/components/ui/calendar/CalendarCell.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarCell.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarCellProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { CalendarCell, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<CalendarCellProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarCell
-    data-slot="calendar-cell"
-    :class="cn('relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([data-selected])]:rounded-md [&:has([data-selected])]:bg-accent', props.class)"
-    v-bind="forwardedProps"
-  >
-    <slot />
-  </CalendarCell>
-</template>
Index: sources/js/components/ui/calendar/CalendarCellTrigger.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarCellTrigger.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,39 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarCellTriggerProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { CalendarCellTrigger, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-import { buttonVariants } from '@/components/ui/button'
-
-const props = withDefaults(defineProps<CalendarCellTriggerProps & { class?: HTMLAttributes["class"] }>(), {
-  as: "button",
-})
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarCellTrigger
-    data-slot="calendar-cell-trigger"
-    :class="cn(
-      buttonVariants({ variant: 'ghost' }),
-      'size-8 p-0 font-normal aria-selected:opacity-100 cursor-default',
-      '[&[data-today]:not([data-selected])]:bg-accent [&[data-today]:not([data-selected])]:text-accent-foreground',
-      // Selected
-      'data-[selected]:bg-primary data-[selected]:text-primary-foreground data-[selected]:opacity-100 data-[selected]:hover:bg-primary data-[selected]:hover:text-primary-foreground data-[selected]:focus:bg-primary data-[selected]:focus:text-primary-foreground',
-      // Disabled
-      'data-[disabled]:text-muted-foreground data-[disabled]:opacity-50',
-      // Unavailable
-      'data-[unavailable]:text-destructive-foreground data-[unavailable]:line-through',
-      // Outside months
-      'data-[outside-view]:text-muted-foreground',
-      props.class,
-    )"
-    v-bind="forwardedProps"
-  >
-    <slot />
-  </CalendarCellTrigger>
-</template>
Index: sources/js/components/ui/calendar/CalendarGrid.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarGrid.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarGridProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { CalendarGrid, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<CalendarGridProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarGrid
-    data-slot="calendar-grid"
-    :class="cn('w-full border-collapse space-x-1', props.class)"
-    v-bind="forwardedProps"
-  >
-    <slot />
-  </CalendarGrid>
-</template>
Index: sources/js/components/ui/calendar/CalendarGridBody.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarGridBody.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarGridBodyProps } from "reka-ui"
-import { CalendarGridBody } from "reka-ui"
-
-const props = defineProps<CalendarGridBodyProps>()
-</script>
-
-<template>
-  <CalendarGridBody
-    data-slot="calendar-grid-body"
-    v-bind="props"
-  >
-    <slot />
-  </CalendarGridBody>
-</template>
Index: sources/js/components/ui/calendar/CalendarGridHead.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarGridHead.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,16 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarGridHeadProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { CalendarGridHead } from "reka-ui"
-
-const props = defineProps<CalendarGridHeadProps & { class?: HTMLAttributes["class"] }>()
-</script>
-
-<template>
-  <CalendarGridHead
-    data-slot="calendar-grid-head"
-    v-bind="props"
-  >
-    <slot />
-  </CalendarGridHead>
-</template>
Index: sources/js/components/ui/calendar/CalendarGridRow.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarGridRow.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,22 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarGridRowProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { CalendarGridRow, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<CalendarGridRowProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarGridRow
-    data-slot="calendar-grid-row"
-    :class="cn('flex', props.class)" v-bind="forwardedProps"
-  >
-    <slot />
-  </CalendarGridRow>
-</template>
Index: sources/js/components/ui/calendar/CalendarHeadCell.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarHeadCell.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarHeadCellProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { CalendarHeadCell, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<CalendarHeadCellProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarHeadCell
-    data-slot="calendar-head-cell"
-    :class="cn('text-muted-foreground rounded-md w-8 font-normal text-[0.8rem]', props.class)"
-    v-bind="forwardedProps"
-  >
-    <slot />
-  </CalendarHeadCell>
-</template>
Index: sources/js/components/ui/calendar/CalendarHeader.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarHeader.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarHeaderProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { CalendarHeader, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<CalendarHeaderProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarHeader
-    data-slot="calendar-header"
-    :class="cn('flex justify-center pt-1 relative items-center w-full', props.class)"
-    v-bind="forwardedProps"
-  >
-    <slot />
-  </CalendarHeader>
-</template>
Index: sources/js/components/ui/calendar/CalendarHeading.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarHeading.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,30 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarHeadingProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { CalendarHeading, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<CalendarHeadingProps & { class?: HTMLAttributes["class"] }>()
-
-defineSlots<{
-  default: (props: { headingValue: string }) => any
-}>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarHeading
-    v-slot="{ headingValue }"
-    data-slot="calendar-heading"
-    :class="cn('text-sm font-medium', props.class)"
-    v-bind="forwardedProps"
-  >
-    <slot :heading-value>
-      {{ headingValue }}
-    </slot>
-  </CalendarHeading>
-</template>
Index: sources/js/components/ui/calendar/CalendarNextButton.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarNextButton.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,32 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarNextProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { ChevronRight } from "lucide-vue-next"
-import { CalendarNext, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-import { buttonVariants } from '@/components/ui/button'
-
-const props = defineProps<CalendarNextProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarNext
-    data-slot="calendar-next-button"
-    :class="cn(
-      buttonVariants({ variant: 'outline' }),
-      'absolute right-1',
-      'size-7 bg-transparent p-0 opacity-50 hover:opacity-100',
-      props.class,
-    )"
-    v-bind="forwardedProps"
-  >
-    <slot>
-      <ChevronRight class="size-4" />
-    </slot>
-  </CalendarNext>
-</template>
Index: sources/js/components/ui/calendar/CalendarPrevButton.vue
===================================================================
--- resources/js/components/ui/calendar/CalendarPrevButton.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,32 +1,0 @@
-<script lang="ts" setup>
-import type { CalendarPrevProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { ChevronLeft } from "lucide-vue-next"
-import { CalendarPrev, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-import { buttonVariants } from '@/components/ui/button'
-
-const props = defineProps<CalendarPrevProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <CalendarPrev
-    data-slot="calendar-prev-button"
-    :class="cn(
-      buttonVariants({ variant: 'outline' }),
-      'absolute left-1',
-      'size-7 bg-transparent p-0 opacity-50 hover:opacity-100',
-      props.class,
-    )"
-    v-bind="forwardedProps"
-  >
-    <slot>
-      <ChevronLeft class="size-4" />
-    </slot>
-  </CalendarPrev>
-</template>
Index: sources/js/components/ui/calendar/index.ts
===================================================================
--- resources/js/components/ui/calendar/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,12 +1,0 @@
-export { default as Calendar } from "./Calendar.vue"
-export { default as CalendarCell } from "./CalendarCell.vue"
-export { default as CalendarCellTrigger } from "./CalendarCellTrigger.vue"
-export { default as CalendarGrid } from "./CalendarGrid.vue"
-export { default as CalendarGridBody } from "./CalendarGridBody.vue"
-export { default as CalendarGridHead } from "./CalendarGridHead.vue"
-export { default as CalendarGridRow } from "./CalendarGridRow.vue"
-export { default as CalendarHeadCell } from "./CalendarHeadCell.vue"
-export { default as CalendarHeader } from "./CalendarHeader.vue"
-export { default as CalendarHeading } from "./CalendarHeading.vue"
-export { default as CalendarNextButton } from "./CalendarNextButton.vue"
-export { default as CalendarPrevButton } from "./CalendarPrevButton.vue"
Index: sources/js/components/ui/card/Card.vue
===================================================================
--- resources/js/components/ui/card/Card.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,22 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <div
-    data-slot="card"
-    :class="
-      cn(
-        'bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm',
-        props.class,
-      )
-    "
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/card/CardAction.vue
===================================================================
--- resources/js/components/ui/card/CardAction.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <div
-    data-slot="card-action"
-    :class="cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', props.class)"
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/card/CardContent.vue
===================================================================
--- resources/js/components/ui/card/CardContent.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <div
-    data-slot="card-content"
-    :class="cn('px-6', props.class)"
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/card/CardDescription.vue
===================================================================
--- resources/js/components/ui/card/CardDescription.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <p
-    data-slot="card-description"
-    :class="cn('text-muted-foreground text-sm', props.class)"
-  >
-    <slot />
-  </p>
-</template>
Index: sources/js/components/ui/card/CardFooter.vue
===================================================================
--- resources/js/components/ui/card/CardFooter.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <div
-    data-slot="card-footer"
-    :class="cn('flex items-center px-6 [.border-t]:pt-6', props.class)"
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/card/CardHeader.vue
===================================================================
--- resources/js/components/ui/card/CardHeader.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <div
-    data-slot="card-header"
-    :class="cn('@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6', props.class)"
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/card/CardTitle.vue
===================================================================
--- resources/js/components/ui/card/CardTitle.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <h3
-    data-slot="card-title"
-    :class="cn('leading-none font-semibold', props.class)"
-  >
-    <slot />
-  </h3>
-</template>
Index: sources/js/components/ui/card/index.ts
===================================================================
--- resources/js/components/ui/card/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,7 +1,0 @@
-export { default as Card } from "./Card.vue"
-export { default as CardAction } from "./CardAction.vue"
-export { default as CardContent } from "./CardContent.vue"
-export { default as CardDescription } from "./CardDescription.vue"
-export { default as CardFooter } from "./CardFooter.vue"
-export { default as CardHeader } from "./CardHeader.vue"
-export { default as CardTitle } from "./CardTitle.vue"
Index: sources/js/components/ui/chart-bar/BarChart.vue
===================================================================
--- resources/js/components/ui/chart-bar/BarChart.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,116 +1,0 @@
-<script setup lang="ts" generic="T extends Record<string, any>">
-import type { BulletLegendItemInterface } from "@unovis/ts"
-import type { Component } from "vue"
-import type { BaseChartProps } from "."
-import { Axis, GroupedBar, StackedBar } from "@unovis/ts"
-import { VisAxis, VisGroupedBar, VisStackedBar, VisXYContainer } from "@unovis/vue"
-import { useMounted } from "@vueuse/core"
-import { computed, ref } from "vue"
-import { cn } from "@/lib/utils"
-import { ChartCrosshair, ChartLegend, defaultColors } from '@/components/ui/chart'
-
-const props = withDefaults(defineProps<BaseChartProps<T> & {
-  /**
-   * Render custom tooltip component.
-   */
-  customTooltip?: Component
-  /**
-   * Change the type of the chart
-   * @default "grouped"
-   */
-  type?: "stacked" | "grouped"
-  /**
-   * Rounded bar corners
-   * @default 0
-   */
-  roundedCorners?: number
-}>(), {
-  type: "grouped",
-  margin: () => ({ top: 0, bottom: 0, left: 0, right: 0 }),
-  filterOpacity: 0.2,
-  roundedCorners: 0,
-  showXAxis: true,
-  showYAxis: true,
-  showTooltip: true,
-  showLegend: true,
-  showGridLine: true,
-})
-const emits = defineEmits<{
-  legendItemClick: [d: BulletLegendItemInterface, i: number]
-}>()
-
-type KeyOfT = Extract<keyof T, string>
-type Data = typeof props.data[number]
-
-const index = computed(() => props.index as KeyOfT)
-const colors = computed(() => props.colors?.length ? props.colors : defaultColors(props.categories.length))
-const legendItems = ref<BulletLegendItemInterface[]>(props.categories.map((category, i) => ({
-  name: category,
-  color: colors.value[i],
-  inactive: false,
-})))
-
-const isMounted = useMounted()
-
-function handleLegendItemClick(d: BulletLegendItemInterface, i: number) {
-  emits("legendItemClick", d, i)
-}
-
-const VisBarComponent = computed(() => props.type === "grouped" ? VisGroupedBar : VisStackedBar)
-const selectorsBar = computed(() => props.type === "grouped" ? GroupedBar.selectors.bar : StackedBar.selectors.bar)
-</script>
-
-<template>
-  <div :class="cn('w-full h-[400px] flex flex-col items-end', $attrs.class ?? '')">
-    <ChartLegend v-if="showLegend" v-model:items="legendItems" @legend-item-click="handleLegendItemClick" />
-
-    <VisXYContainer
-      :data="data"
-      :style="{ height: isMounted ? '100%' : 'auto' }"
-      :margin="margin"
-    >
-      <ChartCrosshair v-if="showTooltip" :colors="colors" :items="legendItems" :custom-tooltip="customTooltip" :index="index" />
-
-      <VisBarComponent
-        :x="(d: Data, i: number) => i"
-        :y="categories.map(category => (d: Data) => d[category]) "
-        :color="colors"
-        :rounded-corners="roundedCorners"
-        :bar-padding="0.05"
-        :attributes="{
-          [selectorsBar]: {
-            opacity: (d: Data, i:number) => {
-              const pos = i % categories.length
-              return legendItems[pos]?.inactive ? filterOpacity : 1
-            },
-          },
-        }"
-      />
-
-      <VisAxis
-        v-if="showXAxis"
-        type="x"
-        :tick-format="xFormatter ?? ((v: number) => data[v]?.[index])"
-        :grid-line="false"
-        :tick-line="false"
-        tick-text-color="hsl(var(--vis-text-color))"
-      />
-      <VisAxis
-        v-if="showYAxis"
-        type="y"
-        :tick-line="false"
-        :tick-format="yFormatter"
-        :domain-line="false"
-        :grid-line="showGridLine"
-        :attributes="{
-          [Axis.selectors.grid]: {
-            class: 'text-muted',
-          },
-        }"
-        tick-text-color="hsl(var(--vis-text-color))"
-      />
-
-      <slot />
-    </VisXYContainer>
-  </div>
-</template>
Index: sources/js/components/ui/chart-bar/index.ts
===================================================================
--- resources/js/components/ui/chart-bar/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,66 +1,0 @@
-export { default as BarChart } from "./BarChart.vue"
-
-import type { Spacing } from "@unovis/ts"
-
-type KeyOf<T extends Record<string, any>> = Extract<keyof T, string>
-
-export interface BaseChartProps<T extends Record<string, any>> {
-  /**
-   * The source data, in which each entry is a dictionary.
-   */
-  data: T[]
-  /**
-   * Select the categories from your data. Used to populate the legend and tooltip.
-   */
-  categories: KeyOf<T>[]
-  /**
-   * Sets the key to map the data to the axis.
-   */
-  index: KeyOf<T>
-  /**
-   * Change the default colors.
-   */
-  colors?: string[]
-  /**
-   * Margin of each the container
-   */
-  margin?: Spacing
-  /**
-   * Change the opacity of the non-selected field
-   * @default 0.2
-   */
-  filterOpacity?: number
-  /**
-   * Function to format X label
-   */
-  xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string
-  /**
-   * Function to format Y label
-   */
-  yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string
-  /**
-   * Controls the visibility of the X axis.
-   * @default true
-   */
-  showXAxis?: boolean
-  /**
-   * Controls the visibility of the Y axis.
-   * @default true
-   */
-  showYAxis?: boolean
-  /**
-   * Controls the visibility of tooltip.
-   * @default true
-   */
-  showTooltip?: boolean
-  /**
-   * Controls the visibility of legend.
-   * @default true
-   */
-  showLegend?: boolean
-  /**
-   * Controls the visibility of gridline.
-   * @default true
-   */
-  showGridLine?: boolean
-}
Index: sources/js/components/ui/chart-donut/DonutChart.vue
===================================================================
--- resources/js/components/ui/chart-donut/DonutChart.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,101 +1,0 @@
-<script setup lang="ts" generic="T extends Record<string, any>">
-import type { Component } from "vue"
-import type { BaseChartProps } from "."
-import { Donut } from "@unovis/ts"
-import { VisDonut, VisSingleContainer } from "@unovis/vue"
-import { useMounted } from "@vueuse/core"
-import { computed, ref } from "vue"
-import { cn } from "@/lib/utils"
-import { ChartSingleTooltip, defaultColors } from '@/components/ui/chart'
-
-const props = withDefaults(defineProps<Pick<BaseChartProps<T>, "data" | "colors" | "index" | "margin" | "showLegend" | "showTooltip" | "filterOpacity"> & {
-  /**
-   * Sets the name of the key containing the quantitative chart values.
-   */
-  category: KeyOfT
-  /**
-   * Change the type of the chart
-   * @default "donut"
-   */
-  type?: "donut" | "pie"
-  /**
-   * Function to sort the segment
-   */
-  sortFunction?: (a: any, b: any) => number | undefined
-  /**
-   * Controls the formatting for the label.
-   */
-  valueFormatter?: (tick: number, i?: number, ticks?: number[]) => string
-  /**
-   * Render custom tooltip component.
-   */
-  customTooltip?: Component
-}>(), {
-  margin: () => ({ top: 0, bottom: 0, left: 0, right: 0 }),
-  sortFunction: () => undefined,
-  type: "donut",
-  filterOpacity: 0.2,
-  showTooltip: true,
-  showLegend: true,
-})
-
-type KeyOfT = Extract<keyof T, string>
-type Data = typeof props.data[number]
-
-const valueFormatter = props.valueFormatter ?? ((tick: number) => `${tick}`)
-const category = computed(() => props.category as KeyOfT)
-const index = computed(() => props.index as KeyOfT)
-
-const isMounted = useMounted()
-const activeSegmentKey = ref<string>()
-const colors = computed(() => props.colors?.length ? props.colors : defaultColors(props.data.filter(d => d[props.category]).filter(Boolean).length))
-const legendItems = computed(() => props.data.map((item, i) => ({
-  name: item[props.index],
-  color: colors.value[i],
-  inactive: false,
-})))
-
-const totalValue = computed(() => props.data.reduce((prev, curr) => {
-  return prev + curr[props.category]
-}, 0))
-</script>
-
-<template>
-  <div :class="cn('w-full h-48 flex flex-col items-end', $attrs.class ?? '')">
-    <VisSingleContainer :style="{ height: isMounted ? '100%' : 'auto' }" :margin="{ left: 20, right: 20 }" :data="data">
-      <ChartSingleTooltip
-        :selector="Donut.selectors.segment"
-        :index="category"
-        :items="legendItems"
-        :value-formatter="valueFormatter"
-        :custom-tooltip="customTooltip"
-      />
-
-      <VisDonut
-        :value="(d: Data) => d[category]"
-        :sort-function="sortFunction"
-        :color="colors"
-        :arc-width="type === 'donut' ? 20 : 0"
-        :show-background="false"
-        :central-label="type === 'donut' ? valueFormatter(totalValue) : ''"
-        :events="{
-          [Donut.selectors.segment]: {
-            click: (d: Data, ev: PointerEvent, i: number, elements: HTMLElement[]) => {
-              if (d?.data?.[index] === activeSegmentKey) {
-                activeSegmentKey = undefined
-                elements.forEach(el => el.style.opacity = '1')
-              }
-              else {
-                activeSegmentKey = d?.data?.[index]
-                elements.forEach(el => el.style.opacity = `${filterOpacity}`)
-                elements[i].style.opacity = '1'
-              }
-            },
-          },
-        }"
-      />
-
-      <slot />
-    </VisSingleContainer>
-  </div>
-</template>
Index: sources/js/components/ui/chart-donut/index.ts
===================================================================
--- resources/js/components/ui/chart-donut/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,39 +1,0 @@
-export { default as DonutChart } from "./DonutChart.vue"
-
-import type { Spacing } from "@unovis/ts"
-
-type KeyOf<T extends Record<string, any>> = Extract<keyof T, string>
-
-export interface BaseChartProps<T extends Record<string, any>> {
-  /**
-   * The source data, in which each entry is a dictionary.
-   */
-  data: T[]
-  /**
-   * Sets the key to map the data to the axis.
-   */
-  index: KeyOf<T>
-  /**
-   * Change the default colors.
-   */
-  colors?: string[]
-  /**
-   * Margin of each the container
-   */
-  margin?: Spacing
-  /**
-   * Change the opacity of the non-selected field
-   * @default 0.2
-   */
-  filterOpacity?: number
-  /**
-   * Controls the visibility of tooltip.
-   * @default true
-   */
-  showTooltip?: boolean
-  /**
-   * Controls the visibility of legend.
-   * @default true
-   */
-  showLegend?: boolean
-}
Index: sources/js/components/ui/chart-line/LineChart.vue
===================================================================
--- resources/js/components/ui/chart-line/LineChart.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,107 +1,0 @@
-<script setup lang="ts" generic="T extends Record<string, any>">
-import type { BulletLegendItemInterface } from "@unovis/ts"
-import type { Component } from "vue"
-import type { BaseChartProps } from "."
-import { Axis, CurveType, Line } from "@unovis/ts"
-
-import { VisAxis, VisLine, VisXYContainer } from "@unovis/vue"
-import { useMounted } from "@vueuse/core"
-import { computed, ref } from "vue"
-import { cn } from "@/lib/utils"
-import { ChartCrosshair, ChartLegend, defaultColors } from '@/components/ui/chart'
-
-const props = withDefaults(defineProps<BaseChartProps<T> & {
-  /**
-   * Render custom tooltip component.
-   */
-  customTooltip?: Component
-  /**
-   * Type of curve
-   */
-  curveType?: CurveType
-}>(), {
-  curveType: CurveType.MonotoneX,
-  filterOpacity: 0.2,
-  margin: () => ({ top: 0, bottom: 0, left: 0, right: 0 }),
-  showXAxis: true,
-  showYAxis: true,
-  showTooltip: true,
-  showLegend: true,
-  showGridLine: true,
-})
-
-const emits = defineEmits<{
-  legendItemClick: [d: BulletLegendItemInterface, i: number]
-}>()
-
-type KeyOfT = Extract<keyof T, string>
-type Data = typeof props.data[number]
-
-const index = computed(() => props.index as KeyOfT)
-const colors = computed(() => props.colors?.length ? props.colors : defaultColors(props.categories.length))
-
-const legendItems = ref<BulletLegendItemInterface[]>(props.categories.map((category, i) => ({
-  name: category,
-  color: colors.value[i],
-  inactive: false,
-})))
-
-const isMounted = useMounted()
-
-function handleLegendItemClick(d: BulletLegendItemInterface, i: number) {
-  emits("legendItemClick", d, i)
-}
-</script>
-
-<template>
-  <div :class="cn('w-full h-[400px] flex flex-col items-end', $attrs.class ?? '')">
-    <ChartLegend v-if="showLegend" v-model:items="legendItems" @legend-item-click="handleLegendItemClick" />
-
-    <VisXYContainer
-      :margin="{ left: 20, right: 20 }"
-      :data="data"
-      :style="{ height: isMounted ? '100%' : 'auto' }"
-    >
-      <ChartCrosshair v-if="showTooltip" :colors="colors" :items="legendItems" :index="index" :custom-tooltip="customTooltip" />
-
-      <template v-for="(category, i) in categories" :key="category">
-        <VisLine
-          :x="(d: Data, i: number) => i"
-          :y="(d: Data) => d[category]"
-          :curve-type="curveType"
-          :color="colors[i]"
-          :attributes="{
-            [Line.selectors.line]: {
-              opacity: legendItems.find(item => item.name === category)?.inactive ? filterOpacity : 1,
-            },
-          }"
-        />
-      </template>
-
-      <VisAxis
-        v-if="showXAxis"
-        type="x"
-        :tick-format="xFormatter ?? ((v: number) => data[v]?.[index])"
-        :grid-line="false"
-        :tick-line="false"
-        tick-text-color="hsl(var(--vis-text-color))"
-      />
-      <VisAxis
-        v-if="showYAxis"
-        type="y"
-        :tick-line="false"
-        :tick-format="yFormatter"
-        :domain-line="false"
-        :grid-line="showGridLine"
-        :attributes="{
-          [Axis.selectors.grid]: {
-            class: 'text-muted',
-          },
-        }"
-        tick-text-color="hsl(var(--vis-text-color))"
-      />
-
-      <slot />
-    </VisXYContainer>
-  </div>
-</template>
Index: sources/js/components/ui/chart-line/index.ts
===================================================================
--- resources/js/components/ui/chart-line/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,66 +1,0 @@
-export { default as LineChart } from "./LineChart.vue"
-
-import type { Spacing } from "@unovis/ts"
-
-type KeyOf<T extends Record<string, any>> = Extract<keyof T, string>
-
-export interface BaseChartProps<T extends Record<string, any>> {
-  /**
-   * The source data, in which each entry is a dictionary.
-   */
-  data: T[]
-  /**
-   * Select the categories from your data. Used to populate the legend and tooltip.
-   */
-  categories: KeyOf<T>[]
-  /**
-   * Sets the key to map the data to the axis.
-   */
-  index: KeyOf<T>
-  /**
-   * Change the default colors.
-   */
-  colors?: string[]
-  /**
-   * Margin of each the container
-   */
-  margin?: Spacing
-  /**
-   * Change the opacity of the non-selected field
-   * @default 0.2
-   */
-  filterOpacity?: number
-  /**
-   * Function to format X label
-   */
-  xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string
-  /**
-   * Function to format Y label
-   */
-  yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string
-  /**
-   * Controls the visibility of the X axis.
-   * @default true
-   */
-  showXAxis?: boolean
-  /**
-   * Controls the visibility of the Y axis.
-   * @default true
-   */
-  showYAxis?: boolean
-  /**
-   * Controls the visibility of tooltip.
-   * @default true
-   */
-  showTooltip?: boolean
-  /**
-   * Controls the visibility of legend.
-   * @default true
-   */
-  showLegend?: boolean
-  /**
-   * Controls the visibility of gridline.
-   * @default true
-   */
-  showGridLine?: boolean
-}
Index: sources/js/components/ui/chart/ChartCrosshair.vue
===================================================================
--- resources/js/components/ui/chart/ChartCrosshair.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,45 +1,0 @@
-<script setup lang="ts">
-import type { BulletLegendItemInterface } from "@unovis/ts"
-import type { Component } from "vue"
-import { omit } from "@unovis/ts"
-import { VisCrosshair, VisTooltip } from "@unovis/vue"
-import { createApp } from "vue"
-import { ChartTooltip } from "."
-
-const props = withDefaults(defineProps<{
-  colors: string[]
-  index: string
-  items: BulletLegendItemInterface[]
-  customTooltip?: Component
-}>(), {
-  colors: () => [],
-})
-
-// Use weakmap to store reference to each datapoint for Tooltip
-const wm = new WeakMap()
-function template(d: any) {
-  if (wm.has(d)) {
-    return wm.get(d)
-  }
-  else {
-    const componentDiv = document.createElement("div")
-    const omittedData = Object.entries(omit(d, [props.index])).map(([key, value]) => {
-      const legendReference = props.items.find(i => i.name === key)
-      return { ...legendReference, value }
-    })
-    const TooltipComponent = props.customTooltip ?? ChartTooltip
-    createApp(TooltipComponent, { title: d[props.index].toString(), data: omittedData }).mount(componentDiv)
-    wm.set(d, componentDiv.innerHTML)
-    return componentDiv.innerHTML
-  }
-}
-
-function color(d: unknown, i: number) {
-  return props.colors[i] ?? "transparent"
-}
-</script>
-
-<template>
-  <VisTooltip :horizontal-shift="20" :vertical-shift="20" />
-  <VisCrosshair :template="template" :color="color" />
-</template>
Index: sources/js/components/ui/chart/ChartLegend.vue
===================================================================
--- resources/js/components/ui/chart/ChartLegend.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,60 +1,0 @@
-<script setup lang="ts">
-import type { BulletLegendItemInterface } from "@unovis/ts"
-import { BulletLegend } from "@unovis/ts"
-import { VisBulletLegend } from "@unovis/vue"
-import { nextTick, onMounted, ref } from "vue"
-import { buttonVariants } from '@/components/ui/button'
-
-const props = withDefaults(defineProps<{ items: BulletLegendItemInterface[] }>(), {
-  items: () => [],
-})
-
-const emits = defineEmits<{
-  "legendItemClick": [d: BulletLegendItemInterface, i: number]
-  "update:items": [payload: BulletLegendItemInterface[]]
-}>()
-
-const elRef = ref<HTMLElement>()
-
-function keepStyling() {
-  const selector = `.${BulletLegend.selectors.item}`
-  nextTick(() => {
-    const elements = elRef.value?.querySelectorAll(selector)
-    const classes = buttonVariants({ variant: "ghost", size: "xs" }).split(" ")
-
-    elements?.forEach(el => el.classList.add(...classes, "!inline-flex", "!mr-2"))
-  })
-}
-
-onMounted(() => {
-  keepStyling()
-})
-
-function onLegendItemClick(d: BulletLegendItemInterface, i: number) {
-  emits("legendItemClick", d, i)
-  const isBulletActive = !props.items[i].inactive
-  const isFilterApplied = props.items.some(i => i.inactive)
-  if (isFilterApplied && isBulletActive) {
-    // reset filter
-    emits("update:items", props.items.map(item => ({ ...item, inactive: false })))
-  }
-  else {
-    // apply selection, set other item as inactive
-    emits("update:items", props.items.map(item => item.name === d.name ? ({ ...d, inactive: false }) : { ...item, inactive: true }))
-  }
-  keepStyling()
-}
-</script>
-
-<template>
-  <div
-    ref="elRef" class="w-max" :style="{
-      '--vis-legend-bullet-size': '16px',
-    }"
-  >
-    <VisBulletLegend
-      :items="items"
-      :on-legend-item-click="onLegendItemClick"
-    />
-  </div>
-</template>
Index: sources/js/components/ui/chart/ChartSingleTooltip.vue
===================================================================
--- resources/js/components/ui/chart/ChartSingleTooltip.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,63 +1,0 @@
-<script setup lang="ts">
-import type { BulletLegendItemInterface } from "@unovis/ts"
-import type { Component } from "vue"
-import { omit } from "@unovis/ts"
-import { VisTooltip } from "@unovis/vue"
-import { createApp } from "vue"
-import { ChartTooltip } from "."
-
-const props = defineProps<{
-  selector: string
-  index: string
-  items?: BulletLegendItemInterface[]
-  valueFormatter?: (tick: number, i?: number, ticks?: number[]) => string
-  customTooltip?: Component
-}>()
-
-// Use weakmap to store reference to each datapoint for Tooltip
-const wm = new WeakMap()
-function template(d: any, i: number, elements: (HTMLElement | SVGElement)[]) {
-  const valueFormatter = props.valueFormatter ?? ((tick: number) => `${tick}`)
-  if (props.index in d) {
-    if (wm.has(d)) {
-      return wm.get(d)
-    }
-    else {
-      const componentDiv = document.createElement("div")
-      const omittedData = Object.entries(omit(d, [props.index])).map(([key, value]) => {
-        const legendReference = props.items?.find(i => i.name === key)
-        return { ...legendReference, value: valueFormatter(value) }
-      })
-      const TooltipComponent = props.customTooltip ?? ChartTooltip
-      createApp(TooltipComponent, { title: d[props.index], data: omittedData }).mount(componentDiv)
-      wm.set(d, componentDiv.innerHTML)
-      return componentDiv.innerHTML
-    }
-  }
-
-  else {
-    const data = d.data
-
-    if (wm.has(data)) {
-      return wm.get(data)
-    }
-    else {
-      const style = getComputedStyle(elements[i])
-      const omittedData = [{ name: data.name, value: valueFormatter(data[props.index]), color: style.fill }]
-      const componentDiv = document.createElement("div")
-      const TooltipComponent = props.customTooltip ?? ChartTooltip
-      createApp(TooltipComponent, { title: d[props.index], data: omittedData }).mount(componentDiv)
-      wm.set(d, componentDiv.innerHTML)
-      return componentDiv.innerHTML
-    }
-  }
-}
-</script>
-
-<template>
-  <VisTooltip
-    :horizontal-shift="20" :vertical-shift="20" :triggers="{
-      [selector]: template,
-    }"
-  />
-</template>
Index: sources/js/components/ui/chart/ChartTooltip.vue
===================================================================
--- resources/js/components/ui/chart/ChartTooltip.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,40 +1,0 @@
-<script setup lang="ts">
-import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
-
-defineProps<{
-  title?: string
-  data: {
-    name: string
-    color: string
-    value: any
-  }[]
-}>()
-</script>
-
-<template>
-  <Card class="text-sm">
-    <CardHeader v-if="title" class="p-3 border-b">
-      <CardTitle>
-        {{ title }}
-      </CardTitle>
-    </CardHeader>
-    <CardContent class="p-3 min-w-[180px] flex flex-col gap-1">
-      <div v-for="(item, key) in data" :key="key" class="flex justify-between">
-        <div class="flex items-center">
-          <span class="w-2.5 h-2.5 mr-2">
-            <svg width="100%" height="100%" viewBox="0 0 30 30">
-              <path
-                d=" M 15 15 m -14, 0 a 14,14 0 1,1 28,0 a 14,14 0 1,1 -28,0"
-                :stroke="item.color"
-                :fill="item.color"
-                stroke-width="1"
-              />
-            </svg>
-          </span>
-          <span>{{ item.name }}</span>
-        </div>
-        <span class="font-semibold ml-4">{{ item.value }}</span>
-      </div>
-    </CardContent>
-  </Card>
-</template>
Index: sources/js/components/ui/chart/LineChart.vue
===================================================================
--- resources/js/components/ui/chart/LineChart.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,79 +1,0 @@
-<script setup lang="ts">
-import { computed, watch, ref } from 'vue';
-import { Line } from 'vue-chartjs';
-import {
-    Chart as ChartJS,
-    LineElement,
-    PointElement,
-    LinearScale,
-    CategoryScale,
-    Tooltip,
-    Filler,
-} from 'chart.js';
-import useTheme from '@/composables/useTheme';
-
-ChartJS.register(LineElement, PointElement, LinearScale, CategoryScale, Tooltip, Filler);
-
-const props = defineProps<{
-    labels: string[];
-    data: number[];
-}>();
-
-const { theme } = useTheme();
-const isDark = computed(() => theme.value === 'dark');
-
-// Use a key that changes when theme changes
-const chartKey = ref(0);
-
-// Watch theme changes and force re-render
-watch(isDark, () => {
-    chartKey.value++;
-});
-
-const borderColor = computed(() => (isDark.value ? '#fff' : '#000'));
-const pointColor = computed(() => (isDark.value ? '#fff' : '#000'));
-
-const chartData = computed(() => ({
-    labels: props.labels,
-    datasets: [
-        {
-            label: 'Revenue',
-            data: props.data,
-            borderColor: borderColor.value,
-            borderWidth: 2,
-            tension: 0.3,
-            pointBackgroundColor: pointColor.value,
-            pointBorderColor: borderColor.value,
-            pointBorderWidth: 1.5,
-            fill: false,
-        },
-    ],
-}));
-
-const chartOptions = computed(() => ({
-    responsive: true,
-    maintainAspectRatio: false,
-    plugins: {
-        legend: { display: false },
-        tooltip: {
-            enabled: true,
-            backgroundColor: isDark.value ? '#111' : '#eee',
-            titleColor: isDark.value ? '#fff' : '#000',
-            bodyColor: isDark.value ? '#fff' : '#000',
-        },
-    },
-    elements: {
-        line: { borderDash: [2, 2] },
-    },
-    scales: {
-        x: { display: false },
-        y: { display: false },
-    },
-}));
-</script>
-
-<template>
-    <div style="height: 100px;">
-        <Line :key="chartKey" :data="chartData" :options="chartOptions" />
-    </div>
-</template>
Index: sources/js/components/ui/chart/index.ts
===================================================================
--- resources/js/components/ui/chart/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-export { default as ChartCrosshair } from "./ChartCrosshair.vue"
-export { default as ChartLegend } from "./ChartLegend.vue"
-export { default as ChartSingleTooltip } from "./ChartSingleTooltip.vue"
-export { default as ChartTooltip } from "./ChartTooltip.vue"
-
-export function defaultColors(count: number = 3) {
-  const quotient = Math.floor(count / 2)
-  const remainder = count % 2
-
-  const primaryCount = quotient + remainder
-  const secondaryCount = quotient
-  return [
-    ...Array.from(new Array(primaryCount).keys()).map(i => `hsl(var(--vis-primary-color) / ${1 - (1 / primaryCount) * i})`),
-    ...Array.from(new Array(secondaryCount).keys()).map(i => `hsl(var(--vis-secondary-color) / ${1 - (1 / secondaryCount) * i})`),
-  ]
-}
-
-export * from "./interface"
Index: sources/js/components/ui/chart/interface.ts
===================================================================
--- resources/js/components/ui/chart/interface.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,64 +1,0 @@
-import type { Spacing } from "@unovis/ts"
-
-type KeyOf<T extends Record<string, any>> = Extract<keyof T, string>
-
-export interface BaseChartProps<T extends Record<string, any>> {
-  /**
-   * The source data, in which each entry is a dictionary.
-   */
-  data: T[]
-  /**
-   * Select the categories from your data. Used to populate the legend and tooltip.
-   */
-  categories: KeyOf<T>[]
-  /**
-   * Sets the key to map the data to the axis.
-   */
-  index: KeyOf<T>
-  /**
-   * Change the default colors.
-   */
-  colors?: string[]
-  /**
-   * Margin of each the container
-   */
-  margin?: Spacing
-  /**
-   * Change the opacity of the non-selected field
-   * @default 0.2
-   */
-  filterOpacity?: number
-  /**
-   * Function to format X label
-   */
-  xFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string
-  /**
-   * Function to format Y label
-   */
-  yFormatter?: (tick: number | Date, i: number, ticks: number[] | Date[]) => string
-  /**
-   * Controls the visibility of the X axis.
-   * @default true
-   */
-  showXAxis?: boolean
-  /**
-   * Controls the visibility of the Y axis.
-   * @default true
-   */
-  showYAxis?: boolean
-  /**
-   * Controls the visibility of tooltip.
-   * @default true
-   */
-  showTooltip?: boolean
-  /**
-   * Controls the visibility of legend.
-   * @default true
-   */
-  showLegend?: boolean
-  /**
-   * Controls the visibility of gridline.
-   * @default true
-   */
-  showGridLine?: boolean
-}
Index: sources/js/components/ui/checkbox/Checkbox.vue
===================================================================
--- resources/js/components/ui/checkbox/Checkbox.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,34 +1,0 @@
-<script setup lang="ts">
-import type { CheckboxRootEmits, CheckboxRootProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { Check } from "lucide-vue-next"
-import { CheckboxIndicator, CheckboxRoot, useForwardPropsEmits } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<CheckboxRootProps & { class?: HTMLAttributes["class"] }>()
-const emits = defineEmits<CheckboxRootEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <CheckboxRoot
-    data-slot="checkbox"
-    v-bind="forwarded"
-    :class="
-      cn('peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',
-         props.class)"
-  >
-    <CheckboxIndicator
-      data-slot="checkbox-indicator"
-      class="flex items-center justify-center text-current transition-none"
-    >
-      <slot>
-        <Check class="size-3.5" />
-      </slot>
-    </CheckboxIndicator>
-  </CheckboxRoot>
-</template>
Index: sources/js/components/ui/checkbox/index.ts
===================================================================
--- resources/js/components/ui/checkbox/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,1 +1,0 @@
-export { default as Checkbox } from "./Checkbox.vue"
Index: sources/js/components/ui/dialog/Dialog.vue
===================================================================
--- resources/js/components/ui/dialog/Dialog.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<script setup lang="ts">
-import type { DialogRootEmits, DialogRootProps } from "reka-ui"
-import { DialogRoot, useForwardPropsEmits } from "reka-ui"
-
-const props = defineProps<DialogRootProps>()
-const emits = defineEmits<DialogRootEmits>()
-
-const forwarded = useForwardPropsEmits(props, emits)
-</script>
-
-<template>
-  <DialogRoot
-    data-slot="dialog"
-    v-bind="forwarded"
-  >
-    <slot />
-  </DialogRoot>
-</template>
Index: sources/js/components/ui/dialog/DialogClose.vue
===================================================================
--- resources/js/components/ui/dialog/DialogClose.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { DialogCloseProps } from "reka-ui"
-import { DialogClose } from "reka-ui"
-
-const props = defineProps<DialogCloseProps>()
-</script>
-
-<template>
-  <DialogClose
-    data-slot="dialog-close"
-    v-bind="props"
-  >
-    <slot />
-  </DialogClose>
-</template>
Index: sources/js/components/ui/dialog/DialogContent.vue
===================================================================
--- resources/js/components/ui/dialog/DialogContent.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,46 +1,0 @@
-<script setup lang="ts">
-import type {DialogContentEmits, DialogContentProps} from "reka-ui"
-import type {HTMLAttributes} from "vue"
-import {reactiveOmit} from "@vueuse/core"
-import {X} from "lucide-vue-next"
-import {
-    DialogClose,
-    DialogContent,
-
-    DialogPortal,
-    useForwardPropsEmits,
-} from "reka-ui"
-import {cn} from "@/lib/utils"
-import DialogOverlay from "./DialogOverlay.vue"
-
-const props = defineProps<DialogContentProps & { class?: HTMLAttributes["class"] }>()
-const emits = defineEmits<DialogContentEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-    <DialogPortal>
-        <DialogOverlay/>
-        <DialogContent
-            data-slot="dialog-content"
-            v-bind="forwarded"
-            :class="
-        cn(
-          'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',
-          props.class,
-        )"
-        >
-            <slot/>
-
-            <DialogClose
-                class="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
-            >
-                <X/>
-                <span class="sr-only">Close</span>
-            </DialogClose>
-        </DialogContent>
-    </DialogPortal>
-</template>
Index: sources/js/components/ui/dialog/DialogDescription.vue
===================================================================
--- resources/js/components/ui/dialog/DialogDescription.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<script setup lang="ts">
-import type { DialogDescriptionProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { DialogDescription, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DialogDescriptionProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <DialogDescription
-    data-slot="dialog-description"
-    v-bind="forwardedProps"
-    :class="cn('text-muted-foreground text-sm', props.class)"
-  >
-    <slot />
-  </DialogDescription>
-</template>
Index: sources/js/components/ui/dialog/DialogFooter.vue
===================================================================
--- resources/js/components/ui/dialog/DialogFooter.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{ class?: HTMLAttributes["class"] }>()
-</script>
-
-<template>
-  <div
-    data-slot="dialog-footer"
-    :class="cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', props.class)"
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/dialog/DialogHeader.vue
===================================================================
--- resources/js/components/ui/dialog/DialogHeader.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <div
-    data-slot="dialog-header"
-    :class="cn('flex flex-col gap-2 text-center sm:text-left', props.class)"
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/dialog/DialogOverlay.vue
===================================================================
--- resources/js/components/ui/dialog/DialogOverlay.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,21 +1,0 @@
-<script setup lang="ts">
-import type { DialogOverlayProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { DialogOverlay } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DialogOverlayProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <DialogOverlay
-    data-slot="dialog-overlay"
-    v-bind="delegatedProps"
-    :class="cn('data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80', props.class)"
-  >
-    <slot />
-  </DialogOverlay>
-</template>
Index: sources/js/components/ui/dialog/DialogScrollContent.vue
===================================================================
--- resources/js/components/ui/dialog/DialogScrollContent.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,56 +1,0 @@
-<script setup lang="ts">
-import type {DialogContentEmits, DialogContentProps} from "reka-ui"
-import type {HTMLAttributes} from "vue"
-import {reactiveOmit} from "@vueuse/core"
-import {X} from "lucide-vue-next"
-import {
-    DialogClose,
-    DialogContent,
-
-    DialogOverlay,
-    DialogPortal,
-    useForwardPropsEmits,
-} from "reka-ui"
-import {cn} from '@/lib/utils'
-
-const props = defineProps<DialogContentProps & { class?: HTMLAttributes["class"] }>()
-const emits = defineEmits<DialogContentEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-    <DialogPortal>
-        <DialogOverlay
-            class="fixed inset-0 z-50 grid place-items-center overflow-y-auto bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
-        >
-            <DialogContent
-                :class="
-          cn(
-            'relative z-50 grid w-full max-w-lg my-8 gap-4 border border-border bg-background p-6 shadow-lg duration-200 sm:rounded-lg md:w-full',
-            props.class,
-          )
-        "
-                v-bind="forwarded"
-                @pointer-down-outside="(event) => {
-          const originalEvent = event.detail.originalEvent;
-          const target = originalEvent.target as HTMLElement;
-          if (originalEvent.offsetX > target.clientWidth || originalEvent.offsetY > target.clientHeight) {
-            event.preventDefault();
-          }
-        }"
-            >
-                <slot/>
-
-                <DialogClose
-                    class="absolute top-4 right-4 p-0.5 transition-colors rounded-md hover:bg-secondary"
-                >
-                    <X class="w-4 h-4"/>
-                    <span class="sr-only">Close</span>
-                </DialogClose>
-            </DialogContent>
-        </DialogOverlay>
-    </DialogPortal>
-</template>
Index: sources/js/components/ui/dialog/DialogTitle.vue
===================================================================
--- resources/js/components/ui/dialog/DialogTitle.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<script setup lang="ts">
-import type { DialogTitleProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { DialogTitle, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DialogTitleProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <DialogTitle
-    data-slot="dialog-title"
-    v-bind="forwardedProps"
-    :class="cn('text-lg leading-none font-semibold', props.class)"
-  >
-    <slot />
-  </DialogTitle>
-</template>
Index: sources/js/components/ui/dialog/DialogTrigger.vue
===================================================================
--- resources/js/components/ui/dialog/DialogTrigger.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { DialogTriggerProps } from "reka-ui"
-import { DialogTrigger } from "reka-ui"
-
-const props = defineProps<DialogTriggerProps>()
-</script>
-
-<template>
-  <DialogTrigger
-    data-slot="dialog-trigger"
-    v-bind="props"
-  >
-    <slot />
-  </DialogTrigger>
-</template>
Index: sources/js/components/ui/dialog/index.ts
===================================================================
--- resources/js/components/ui/dialog/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,10 +1,0 @@
-export { default as Dialog } from "./Dialog.vue"
-export { default as DialogClose } from "./DialogClose.vue"
-export { default as DialogContent } from "./DialogContent.vue"
-export { default as DialogDescription } from "./DialogDescription.vue"
-export { default as DialogFooter } from "./DialogFooter.vue"
-export { default as DialogHeader } from "./DialogHeader.vue"
-export { default as DialogOverlay } from "./DialogOverlay.vue"
-export { default as DialogScrollContent } from "./DialogScrollContent.vue"
-export { default as DialogTitle } from "./DialogTitle.vue"
-export { default as DialogTrigger } from "./DialogTrigger.vue"
Index: sources/js/components/ui/dropdown-menu/DropdownMenu.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenu.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuRootEmits, DropdownMenuRootProps } from "reka-ui"
-import { DropdownMenuRoot, useForwardPropsEmits } from "reka-ui"
-
-const props = defineProps<DropdownMenuRootProps>()
-const emits = defineEmits<DropdownMenuRootEmits>()
-
-const forwarded = useForwardPropsEmits(props, emits)
-</script>
-
-<template>
-  <DropdownMenuRoot
-    data-slot="dropdown-menu"
-    v-bind="forwarded"
-  >
-    <slot />
-  </DropdownMenuRoot>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,38 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuCheckboxItemEmits, DropdownMenuCheckboxItemProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { Check } from "lucide-vue-next"
-import {
-  DropdownMenuCheckboxItem,
-
-  DropdownMenuItemIndicator,
-  useForwardPropsEmits,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DropdownMenuCheckboxItemProps & { class?: HTMLAttributes["class"] }>()
-const emits = defineEmits<DropdownMenuCheckboxItemEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <DropdownMenuCheckboxItem
-    data-slot="dropdown-menu-checkbox-item"
-    v-bind="forwarded"
-    :class=" cn(
-      `focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,
-      props.class,
-    )"
-  >
-    <span class="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
-      <DropdownMenuItemIndicator>
-        <Check class="size-4" />
-      </DropdownMenuItemIndicator>
-    </span>
-    <slot />
-  </DropdownMenuCheckboxItem>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuContent.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,36 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuContentEmits, DropdownMenuContentProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import {
-  DropdownMenuContent,
-
-  DropdownMenuPortal,
-  useForwardPropsEmits,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = withDefaults(
-  defineProps<DropdownMenuContentProps & { class?: HTMLAttributes["class"] }>(),
-  {
-    sideOffset: 4,
-  },
-)
-const emits = defineEmits<DropdownMenuContentEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <DropdownMenuPortal>
-    <DropdownMenuContent
-      data-slot="dropdown-menu-content"
-      v-bind="forwarded"
-      :class="cn('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--reka-dropdown-menu-content-available-height) min-w-[8rem] origin-(--reka-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md', props.class)"
-    >
-      <slot />
-    </DropdownMenuContent>
-  </DropdownMenuPortal>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuGroupProps } from "reka-ui"
-import { DropdownMenuGroup } from "reka-ui"
-
-const props = defineProps<DropdownMenuGroupProps>()
-</script>
-
-<template>
-  <DropdownMenuGroup
-    data-slot="dropdown-menu-group"
-    v-bind="props"
-  >
-    <slot />
-  </DropdownMenuGroup>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuItem.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,31 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuItemProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { DropdownMenuItem, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = withDefaults(defineProps<DropdownMenuItemProps & {
-  class?: HTMLAttributes["class"]
-  inset?: boolean
-  variant?: "default" | "destructive"
-}>(), {
-  variant: "default",
-})
-
-const delegatedProps = reactiveOmit(props, "inset", "variant", "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <DropdownMenuItem
-    data-slot="dropdown-menu-item"
-    :data-inset="inset ? '' : undefined"
-    :data-variant="variant"
-    v-bind="forwardedProps"
-    :class="cn(`focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive-foreground data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/40 data-[variant=destructive]:focus:text-destructive-foreground data-[variant=destructive]:*:[svg]:!text-destructive-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`, props.class)"
-  >
-    <slot />
-  </DropdownMenuItem>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,23 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuLabelProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { DropdownMenuLabel, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DropdownMenuLabelProps & { class?: HTMLAttributes["class"], inset?: boolean }>()
-
-const delegatedProps = reactiveOmit(props, "class", "inset")
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <DropdownMenuLabel
-    data-slot="dropdown-menu-label"
-    :data-inset="inset ? '' : undefined"
-    v-bind="forwardedProps"
-    :class="cn('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', props.class)"
-  >
-    <slot />
-  </DropdownMenuLabel>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,22 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuRadioGroupEmits, DropdownMenuRadioGroupProps } from "reka-ui"
-import {
-  DropdownMenuRadioGroup,
-
-  useForwardPropsEmits,
-} from "reka-ui"
-
-const props = defineProps<DropdownMenuRadioGroupProps>()
-const emits = defineEmits<DropdownMenuRadioGroupEmits>()
-
-const forwarded = useForwardPropsEmits(props, emits)
-</script>
-
-<template>
-  <DropdownMenuRadioGroup
-    data-slot="dropdown-menu-radio-group"
-    v-bind="forwarded"
-  >
-    <slot />
-  </DropdownMenuRadioGroup>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,39 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuRadioItemEmits, DropdownMenuRadioItemProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { Circle } from "lucide-vue-next"
-import {
-  DropdownMenuItemIndicator,
-  DropdownMenuRadioItem,
-
-  useForwardPropsEmits,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DropdownMenuRadioItemProps & { class?: HTMLAttributes["class"] }>()
-
-const emits = defineEmits<DropdownMenuRadioItemEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <DropdownMenuRadioItem
-    data-slot="dropdown-menu-radio-item"
-    v-bind="forwarded"
-    :class="cn(
-      `focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,
-      props.class,
-    )"
-  >
-    <span class="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
-      <DropdownMenuItemIndicator>
-        <Circle class="size-2 fill-current" />
-      </DropdownMenuItemIndicator>
-    </span>
-    <slot />
-  </DropdownMenuRadioItem>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,24 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuSeparatorProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import {
-  DropdownMenuSeparator,
-
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DropdownMenuSeparatorProps & {
-  class?: HTMLAttributes["class"]
-}>()
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <DropdownMenuSeparator
-    data-slot="dropdown-menu-separator"
-    v-bind="delegatedProps"
-    :class="cn('bg-border -mx-1 my-1 h-px', props.class)"
-  />
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <span
-    data-slot="dropdown-menu-shortcut"
-    :class="cn('text-muted-foreground ml-auto text-xs tracking-widest', props.class)"
-  >
-    <slot />
-  </span>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuSub.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,19 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuSubEmits, DropdownMenuSubProps } from "reka-ui"
-import {
-  DropdownMenuSub,
-
-  useForwardPropsEmits,
-} from "reka-ui"
-
-const props = defineProps<DropdownMenuSubProps>()
-const emits = defineEmits<DropdownMenuSubEmits>()
-
-const forwarded = useForwardPropsEmits(props, emits)
-</script>
-
-<template>
-  <DropdownMenuSub data-slot="dropdown-menu-sub" v-bind="forwarded">
-    <slot />
-  </DropdownMenuSub>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuSubContentEmits, DropdownMenuSubContentProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import {
-  DropdownMenuSubContent,
-
-  useForwardPropsEmits,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DropdownMenuSubContentProps & { class?: HTMLAttributes["class"] }>()
-const emits = defineEmits<DropdownMenuSubContentEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <DropdownMenuSubContent
-    data-slot="dropdown-menu-sub-content"
-    v-bind="forwarded"
-    :class="cn('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--reka-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg', props.class)"
-  >
-    <slot />
-  </DropdownMenuSubContent>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,31 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuSubTriggerProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { ChevronRight } from "lucide-vue-next"
-import {
-  DropdownMenuSubTrigger,
-
-  useForwardProps,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DropdownMenuSubTriggerProps & { class?: HTMLAttributes["class"], inset?: boolean }>()
-
-const delegatedProps = reactiveOmit(props, "class", "inset")
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <DropdownMenuSubTrigger
-    data-slot="dropdown-menu-sub-trigger"
-    v-bind="forwardedProps"
-    :class="cn(
-      'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8',
-      props.class,
-    )"
-  >
-    <slot />
-    <ChevronRight class="ml-auto size-4" />
-  </DropdownMenuSubTrigger>
-</template>
Index: sources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue
===================================================================
--- resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { DropdownMenuTriggerProps } from "reka-ui"
-import { DropdownMenuTrigger, useForwardProps } from "reka-ui"
-
-const props = defineProps<DropdownMenuTriggerProps>()
-
-const forwardedProps = useForwardProps(props)
-</script>
-
-<template>
-  <DropdownMenuTrigger
-    data-slot="dropdown-menu-trigger"
-    v-bind="forwardedProps"
-  >
-    <slot />
-  </DropdownMenuTrigger>
-</template>
Index: sources/js/components/ui/dropdown-menu/index.ts
===================================================================
--- resources/js/components/ui/dropdown-menu/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,16 +1,0 @@
-export { default as DropdownMenu } from "./DropdownMenu.vue"
-
-export { default as DropdownMenuCheckboxItem } from "./DropdownMenuCheckboxItem.vue"
-export { default as DropdownMenuContent } from "./DropdownMenuContent.vue"
-export { default as DropdownMenuGroup } from "./DropdownMenuGroup.vue"
-export { default as DropdownMenuItem } from "./DropdownMenuItem.vue"
-export { default as DropdownMenuLabel } from "./DropdownMenuLabel.vue"
-export { default as DropdownMenuRadioGroup } from "./DropdownMenuRadioGroup.vue"
-export { default as DropdownMenuRadioItem } from "./DropdownMenuRadioItem.vue"
-export { default as DropdownMenuSeparator } from "./DropdownMenuSeparator.vue"
-export { default as DropdownMenuShortcut } from "./DropdownMenuShortcut.vue"
-export { default as DropdownMenuSub } from "./DropdownMenuSub.vue"
-export { default as DropdownMenuSubContent } from "./DropdownMenuSubContent.vue"
-export { default as DropdownMenuSubTrigger } from "./DropdownMenuSubTrigger.vue"
-export { default as DropdownMenuTrigger } from "./DropdownMenuTrigger.vue"
-export { DropdownMenuPortal } from "reka-ui"
Index: sources/js/components/ui/input/Input.vue
===================================================================
--- resources/js/components/ui/input/Input.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,33 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { useVModel } from "@vueuse/core"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  defaultValue?: string | number
-  modelValue?: string | number
-  class?: HTMLAttributes["class"]
-}>()
-
-const emits = defineEmits<{
-  (e: "update:modelValue", payload: string | number): void
-}>()
-
-const modelValue = useVModel(props, "modelValue", emits, {
-  passive: true,
-  defaultValue: props.defaultValue,
-})
-</script>
-
-<template>
-  <input
-    v-model="modelValue"
-    data-slot="input"
-    :class="cn(
-      'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
-      'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',
-      'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
-      props.class,
-    )"
-  >
-</template>
Index: sources/js/components/ui/input/index.ts
===================================================================
--- resources/js/components/ui/input/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,1 +1,0 @@
-export { default as Input } from "./Input.vue"
Index: sources/js/components/ui/label/Label.vue
===================================================================
--- resources/js/components/ui/label/Label.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,26 +1,0 @@
-<script setup lang="ts">
-import type { LabelProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { Label } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<LabelProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <Label
-    data-slot="label"
-    v-bind="delegatedProps"
-    :class="
-      cn(
-        'flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
-        props.class,
-      )
-    "
-  >
-    <slot />
-  </Label>
-</template>
Index: sources/js/components/ui/label/index.ts
===================================================================
--- resources/js/components/ui/label/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,1 +1,0 @@
-export { default as Label } from "./Label.vue"
Index: sources/js/components/ui/popover/Popover.vue
===================================================================
--- resources/js/components/ui/popover/Popover.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<script setup lang="ts">
-import type { PopoverRootEmits, PopoverRootProps } from "reka-ui"
-import { PopoverRoot, useForwardPropsEmits } from "reka-ui"
-
-const props = defineProps<PopoverRootProps>()
-const emits = defineEmits<PopoverRootEmits>()
-
-const forwarded = useForwardPropsEmits(props, emits)
-</script>
-
-<template>
-  <PopoverRoot
-    data-slot="popover"
-    v-bind="forwarded"
-  >
-    <slot />
-  </PopoverRoot>
-</template>
Index: sources/js/components/ui/popover/PopoverAnchor.vue
===================================================================
--- resources/js/components/ui/popover/PopoverAnchor.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { PopoverAnchorProps } from "reka-ui"
-import { PopoverAnchor } from "reka-ui"
-
-const props = defineProps<PopoverAnchorProps>()
-</script>
-
-<template>
-  <PopoverAnchor
-    data-slot="popover-anchor"
-    v-bind="props"
-  >
-    <slot />
-  </PopoverAnchor>
-</template>
Index: sources/js/components/ui/popover/PopoverContent.vue
===================================================================
--- resources/js/components/ui/popover/PopoverContent.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,46 +1,0 @@
-<script setup lang="ts">
-import type { PopoverContentEmits, PopoverContentProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import {
-  PopoverContent,
-
-  PopoverPortal,
-  useForwardPropsEmits,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-
-defineOptions({
-  inheritAttrs: false,
-})
-
-const props = withDefaults(
-  defineProps<PopoverContentProps & { class?: HTMLAttributes["class"] }>(),
-  {
-    align: "center",
-    sideOffset: 4,
-  },
-)
-const emits = defineEmits<PopoverContentEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <PopoverPortal>
-    <PopoverContent
-      data-slot="popover-content"
-      v-bind="{ ...forwarded, ...$attrs }"
-      :class="
-        cn(
-          'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md origin-(--reka-popover-content-transform-origin) outline-hidden',
-          props.class,
-        )
-      "
-    >
-      <slot />
-    </PopoverContent>
-  </PopoverPortal>
-</template>
Index: sources/js/components/ui/popover/PopoverTrigger.vue
===================================================================
--- resources/js/components/ui/popover/PopoverTrigger.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { PopoverTriggerProps } from "reka-ui"
-import { PopoverTrigger } from "reka-ui"
-
-const props = defineProps<PopoverTriggerProps>()
-</script>
-
-<template>
-  <PopoverTrigger
-    data-slot="popover-trigger"
-    v-bind="props"
-  >
-    <slot />
-  </PopoverTrigger>
-</template>
Index: sources/js/components/ui/popover/index.ts
===================================================================
--- resources/js/components/ui/popover/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,4 +1,0 @@
-export { default as Popover } from "./Popover.vue"
-export { default as PopoverAnchor } from "./PopoverAnchor.vue"
-export { default as PopoverContent } from "./PopoverContent.vue"
-export { default as PopoverTrigger } from "./PopoverTrigger.vue"
Index: sources/js/components/ui/select/Select.vue
===================================================================
--- resources/js/components/ui/select/Select.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<script setup lang="ts">
-import type { SelectRootEmits, SelectRootProps } from "reka-ui"
-import { SelectRoot, useForwardPropsEmits } from "reka-ui"
-
-const props = defineProps<SelectRootProps>()
-const emits = defineEmits<SelectRootEmits>()
-
-const forwarded = useForwardPropsEmits(props, emits)
-</script>
-
-<template>
-  <SelectRoot
-    data-slot="select"
-    v-bind="forwarded"
-  >
-    <slot />
-  </SelectRoot>
-</template>
Index: sources/js/components/ui/select/SelectContent.vue
===================================================================
--- resources/js/components/ui/select/SelectContent.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,52 +1,0 @@
-<script setup lang="ts">
-import type { SelectContentEmits, SelectContentProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import {
-  SelectContent,
-
-  SelectPortal,
-  SelectViewport,
-  useForwardPropsEmits,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-import { SelectScrollDownButton, SelectScrollUpButton } from "."
-
-defineOptions({
-  inheritAttrs: false,
-})
-
-const props = withDefaults(
-  defineProps<SelectContentProps & { class?: HTMLAttributes["class"] }>(),
-  {
-    position: "popper",
-  },
-)
-const emits = defineEmits<SelectContentEmits>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <SelectPortal>
-    <SelectContent
-      data-slot="select-content"
-      v-bind="{ ...forwarded, ...$attrs }"
-      :class="cn(
-        'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--reka-select-content-available-height) min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border shadow-md',
-        position === 'popper'
-          && 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
-        props.class,
-      )
-      "
-    >
-      <SelectScrollUpButton />
-      <SelectViewport :class="cn('p-1', position === 'popper' && 'h-[var(--reka-select-trigger-height)] w-full min-w-[var(--reka-select-trigger-width)] scroll-my-1')">
-        <slot />
-      </SelectViewport>
-      <SelectScrollDownButton />
-    </SelectContent>
-  </SelectPortal>
-</template>
Index: sources/js/components/ui/select/SelectGroup.vue
===================================================================
--- resources/js/components/ui/select/SelectGroup.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { SelectGroupProps } from "reka-ui"
-import { SelectGroup } from "reka-ui"
-
-const props = defineProps<SelectGroupProps>()
-</script>
-
-<template>
-  <SelectGroup
-    data-slot="select-group"
-    v-bind="props"
-  >
-    <slot />
-  </SelectGroup>
-</template>
Index: sources/js/components/ui/select/SelectItem.vue
===================================================================
--- resources/js/components/ui/select/SelectItem.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,43 +1,0 @@
-<script setup lang="ts">
-import type { SelectItemProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { Check } from "lucide-vue-next"
-import {
-  SelectItem,
-  SelectItemIndicator,
-
-  SelectItemText,
-  useForwardProps,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<SelectItemProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <SelectItem
-    data-slot="select-item"
-    v-bind="forwardedProps"
-    :class="
-      cn(
-        `focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,
-        props.class,
-      )
-    "
-  >
-    <span class="absolute right-2 flex size-3.5 items-center justify-center">
-      <SelectItemIndicator>
-        <Check class="size-4" />
-      </SelectItemIndicator>
-    </span>
-
-    <SelectItemText>
-      <slot />
-    </SelectItemText>
-  </SelectItem>
-</template>
Index: sources/js/components/ui/select/SelectItemText.vue
===================================================================
--- resources/js/components/ui/select/SelectItemText.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { SelectItemTextProps } from "reka-ui"
-import { SelectItemText } from "reka-ui"
-
-const props = defineProps<SelectItemTextProps>()
-</script>
-
-<template>
-  <SelectItemText
-    data-slot="select-item-text"
-    v-bind="props"
-  >
-    <slot />
-  </SelectItemText>
-</template>
Index: sources/js/components/ui/select/SelectLabel.vue
===================================================================
--- resources/js/components/ui/select/SelectLabel.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { SelectLabelProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { SelectLabel } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<SelectLabelProps & { class?: HTMLAttributes["class"] }>()
-</script>
-
-<template>
-  <SelectLabel
-    data-slot="select-label"
-    :class="cn('px-2 py-1.5 text-sm font-medium', props.class)"
-  >
-    <slot />
-  </SelectLabel>
-</template>
Index: sources/js/components/ui/select/SelectScrollDownButton.vue
===================================================================
--- resources/js/components/ui/select/SelectScrollDownButton.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,26 +1,0 @@
-<script setup lang="ts">
-import type { SelectScrollDownButtonProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { ChevronDown } from "lucide-vue-next"
-import { SelectScrollDownButton, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<SelectScrollDownButtonProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <SelectScrollDownButton
-    data-slot="select-scroll-down-button"
-    v-bind="forwardedProps"
-    :class="cn('flex cursor-default items-center justify-center py-1', props.class)"
-  >
-    <slot>
-      <ChevronDown class="size-4" />
-    </slot>
-  </SelectScrollDownButton>
-</template>
Index: sources/js/components/ui/select/SelectScrollUpButton.vue
===================================================================
--- resources/js/components/ui/select/SelectScrollUpButton.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,26 +1,0 @@
-<script setup lang="ts">
-import type { SelectScrollUpButtonProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { ChevronUp } from "lucide-vue-next"
-import { SelectScrollUpButton, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<SelectScrollUpButtonProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <SelectScrollUpButton
-    data-slot="select-scroll-up-button"
-    v-bind="forwardedProps"
-    :class="cn('flex cursor-default items-center justify-center py-1', props.class)"
-  >
-    <slot>
-      <ChevronUp class="size-4" />
-    </slot>
-  </SelectScrollUpButton>
-</template>
Index: sources/js/components/ui/select/SelectSeparator.vue
===================================================================
--- resources/js/components/ui/select/SelectSeparator.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,19 +1,0 @@
-<script setup lang="ts">
-import type { SelectSeparatorProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { SelectSeparator } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<SelectSeparatorProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <SelectSeparator
-    data-slot="select-separator"
-    v-bind="delegatedProps"
-    :class="cn('bg-border pointer-events-none -mx-1 my-1 h-px', props.class)"
-  />
-</template>
Index: sources/js/components/ui/select/SelectTrigger.vue
===================================================================
--- resources/js/components/ui/select/SelectTrigger.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,33 +1,0 @@
-<script setup lang="ts">
-import type { SelectTriggerProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { ChevronDown } from "lucide-vue-next"
-import { SelectIcon, SelectTrigger, useForwardProps } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = withDefaults(
-  defineProps<SelectTriggerProps & { class?: HTMLAttributes["class"], size?: "sm" | "default" }>(),
-  { size: "default" },
-)
-
-const delegatedProps = reactiveOmit(props, "class", "size")
-const forwardedProps = useForwardProps(delegatedProps)
-</script>
-
-<template>
-  <SelectTrigger
-    data-slot="select-trigger"
-    :data-size="size"
-    v-bind="forwardedProps"
-    :class="cn(
-      `border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,
-      props.class,
-    )"
-  >
-    <slot />
-    <SelectIcon as-child>
-      <ChevronDown class="size-4 opacity-50" />
-    </SelectIcon>
-  </SelectTrigger>
-</template>
Index: sources/js/components/ui/select/SelectValue.vue
===================================================================
--- resources/js/components/ui/select/SelectValue.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { SelectValueProps } from "reka-ui"
-import { SelectValue } from "reka-ui"
-
-const props = defineProps<SelectValueProps>()
-</script>
-
-<template>
-  <SelectValue
-    data-slot="select-value"
-    v-bind="props"
-  >
-    <slot />
-  </SelectValue>
-</template>
Index: sources/js/components/ui/select/index.ts
===================================================================
--- resources/js/components/ui/select/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,11 +1,0 @@
-export { default as Select } from "./Select.vue"
-export { default as SelectContent } from "./SelectContent.vue"
-export { default as SelectGroup } from "./SelectGroup.vue"
-export { default as SelectItem } from "./SelectItem.vue"
-export { default as SelectItemText } from "./SelectItemText.vue"
-export { default as SelectLabel } from "./SelectLabel.vue"
-export { default as SelectScrollDownButton } from "./SelectScrollDownButton.vue"
-export { default as SelectScrollUpButton } from "./SelectScrollUpButton.vue"
-export { default as SelectSeparator } from "./SelectSeparator.vue"
-export { default as SelectTrigger } from "./SelectTrigger.vue"
-export { default as SelectValue } from "./SelectValue.vue"
Index: sources/js/components/ui/sheet/Sheet.vue
===================================================================
--- resources/js/components/ui/sheet/Sheet.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-<script setup lang="ts">
-import type { DialogRootEmits, DialogRootProps } from "reka-ui"
-import { DialogRoot, useForwardPropsEmits } from "reka-ui"
-
-const props = defineProps<DialogRootProps>()
-const emits = defineEmits<DialogRootEmits>()
-
-const forwarded = useForwardPropsEmits(props, emits)
-</script>
-
-<template>
-  <DialogRoot
-    data-slot="sheet"
-    v-bind="forwarded"
-  >
-    <slot />
-  </DialogRoot>
-</template>
Index: sources/js/components/ui/sheet/SheetClose.vue
===================================================================
--- resources/js/components/ui/sheet/SheetClose.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { DialogCloseProps } from "reka-ui"
-import { DialogClose } from "reka-ui"
-
-const props = defineProps<DialogCloseProps>()
-</script>
-
-<template>
-  <DialogClose
-    data-slot="sheet-close"
-    v-bind="props"
-  >
-    <slot />
-  </DialogClose>
-</template>
Index: sources/js/components/ui/sheet/SheetContent.vue
===================================================================
--- resources/js/components/ui/sheet/SheetContent.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,63 +1,0 @@
-<script setup lang="ts">
-import type { DialogContentEmits, DialogContentProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { X } from "lucide-vue-next"
-import {
-  DialogClose,
-  DialogContent,
-
-  DialogPortal,
-  useForwardPropsEmits,
-} from "reka-ui"
-import { cn } from "@/lib/utils"
-import SheetOverlay from "./SheetOverlay.vue"
-
-interface SheetContentProps extends DialogContentProps {
-  class?: HTMLAttributes["class"]
-  side?: "top" | "right" | "bottom" | "left"
-}
-
-defineOptions({
-  inheritAttrs: false,
-})
-
-const props = withDefaults(defineProps<SheetContentProps>(), {
-  side: "right",
-})
-const emits = defineEmits<DialogContentEmits>()
-
-const delegatedProps = reactiveOmit(props, "class", "side")
-
-const forwarded = useForwardPropsEmits(delegatedProps, emits)
-</script>
-
-<template>
-  <DialogPortal>
-    <SheetOverlay />
-    <DialogContent
-      data-slot="sheet-content"
-      :class="cn(
-        'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500',
-        side === 'right'
-          && 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm',
-        side === 'left'
-          && 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',
-        side === 'top'
-          && 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b',
-        side === 'bottom'
-          && 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t',
-        props.class)"
-      v-bind="{ ...forwarded, ...$attrs }"
-    >
-      <slot />
-
-      <DialogClose
-        class="ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none"
-      >
-        <X class="size-4" />
-        <span class="sr-only">Close</span>
-      </DialogClose>
-    </DialogContent>
-  </DialogPortal>
-</template>
Index: sources/js/components/ui/sheet/SheetDescription.vue
===================================================================
--- resources/js/components/ui/sheet/SheetDescription.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,21 +1,0 @@
-<script setup lang="ts">
-import type { DialogDescriptionProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { DialogDescription } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DialogDescriptionProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <DialogDescription
-    data-slot="sheet-description"
-    :class="cn('text-muted-foreground text-sm', props.class)"
-    v-bind="delegatedProps"
-  >
-    <slot />
-  </DialogDescription>
-</template>
Index: sources/js/components/ui/sheet/SheetFooter.vue
===================================================================
--- resources/js/components/ui/sheet/SheetFooter.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,16 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{ class?: HTMLAttributes["class"] }>()
-</script>
-
-<template>
-  <div
-    data-slot="sheet-footer"
-    :class="cn('mt-auto flex flex-col gap-2 p-4', props.class)
-    "
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/sheet/SheetHeader.vue
===================================================================
--- resources/js/components/ui/sheet/SheetHeader.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{ class?: HTMLAttributes["class"] }>()
-</script>
-
-<template>
-  <div
-    data-slot="sheet-header"
-    :class="cn('flex flex-col gap-1.5 p-4', props.class)"
-  >
-    <slot />
-  </div>
-</template>
Index: sources/js/components/ui/sheet/SheetOverlay.vue
===================================================================
--- resources/js/components/ui/sheet/SheetOverlay.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,21 +1,0 @@
-<script setup lang="ts">
-import type { DialogOverlayProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { DialogOverlay } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DialogOverlayProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <DialogOverlay
-    data-slot="sheet-overlay"
-    :class="cn('data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/80', props.class)"
-    v-bind="delegatedProps"
-  >
-    <slot />
-  </DialogOverlay>
-</template>
Index: sources/js/components/ui/sheet/SheetTitle.vue
===================================================================
--- resources/js/components/ui/sheet/SheetTitle.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,21 +1,0 @@
-<script setup lang="ts">
-import type { DialogTitleProps } from "reka-ui"
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { DialogTitle } from "reka-ui"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<DialogTitleProps & { class?: HTMLAttributes["class"] }>()
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <DialogTitle
-    data-slot="sheet-title"
-    :class="cn('text-foreground font-semibold', props.class)"
-    v-bind="delegatedProps"
-  >
-    <slot />
-  </DialogTitle>
-</template>
Index: sources/js/components/ui/sheet/SheetTrigger.vue
===================================================================
--- resources/js/components/ui/sheet/SheetTrigger.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,15 +1,0 @@
-<script setup lang="ts">
-import type { DialogTriggerProps } from "reka-ui"
-import { DialogTrigger } from "reka-ui"
-
-const props = defineProps<DialogTriggerProps>()
-</script>
-
-<template>
-  <DialogTrigger
-    data-slot="sheet-trigger"
-    v-bind="props"
-  >
-    <slot />
-  </DialogTrigger>
-</template>
Index: sources/js/components/ui/sheet/index.ts
===================================================================
--- resources/js/components/ui/sheet/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,8 +1,0 @@
-export { default as Sheet } from "./Sheet.vue"
-export { default as SheetClose } from "./SheetClose.vue"
-export { default as SheetContent } from "./SheetContent.vue"
-export { default as SheetDescription } from "./SheetDescription.vue"
-export { default as SheetFooter } from "./SheetFooter.vue"
-export { default as SheetHeader } from "./SheetHeader.vue"
-export { default as SheetTitle } from "./SheetTitle.vue"
-export { default as SheetTrigger } from "./SheetTrigger.vue"
Index: sources/js/components/ui/sonner/Sonner.vue
===================================================================
--- resources/js/components/ui/sonner/Sonner.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,19 +1,0 @@
-<script lang="ts" setup>
-import type { ToasterProps } from "vue-sonner"
-import { Toaster as Sonner } from "vue-sonner"
-
-const props = defineProps<ToasterProps>()
-</script>
-
-<template>
-  <Sonner
-    class="toaster group"
-    v-bind="props"
-    :style="{
-      '--normal-bg': 'var(--popover)',
-      '--normal-text': 'var(--popover-foreground)',
-      '--normal-border': 'var(--border)',
-
-    }"
-  />
-</template>
Index: sources/js/components/ui/sonner/index.ts
===================================================================
--- resources/js/components/ui/sonner/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,1 +1,0 @@
-export { default as Toaster } from "./Sonner.vue"
Index: sources/js/components/ui/table/Table.vue
===================================================================
--- resources/js/components/ui/table/Table.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,16 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <div data-slot="table-container" class="relative w-full overflow-auto">
-    <table data-slot="table" :class="cn('w-full caption-bottom text-sm', props.class)">
-      <slot />
-    </table>
-  </div>
-</template>
Index: sources/js/components/ui/table/TableBody.vue
===================================================================
--- resources/js/components/ui/table/TableBody.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <tbody
-    data-slot="table-body"
-    :class="cn('[&_tr:last-child]:border-0', props.class)"
-  >
-    <slot />
-  </tbody>
-</template>
Index: sources/js/components/ui/table/TableCaption.vue
===================================================================
--- resources/js/components/ui/table/TableCaption.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <caption
-    data-slot="table-caption"
-    :class="cn('text-muted-foreground mt-4 text-sm', props.class)"
-  >
-    <slot />
-  </caption>
-</template>
Index: sources/js/components/ui/table/TableCell.vue
===================================================================
--- resources/js/components/ui/table/TableCell.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,22 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <td
-    data-slot="table-cell"
-    :class="
-      cn(
-        'p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',
-        props.class,
-      )
-    "
-  >
-    <slot />
-  </td>
-</template>
Index: sources/js/components/ui/table/TableEmpty.vue
===================================================================
--- resources/js/components/ui/table/TableEmpty.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,34 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { reactiveOmit } from "@vueuse/core"
-import { cn } from "@/lib/utils"
-import TableCell from "./TableCell.vue"
-import TableRow from "./TableRow.vue"
-
-const props = withDefaults(defineProps<{
-  class?: HTMLAttributes["class"]
-  colspan?: number
-}>(), {
-  colspan: 1,
-})
-
-const delegatedProps = reactiveOmit(props, "class")
-</script>
-
-<template>
-  <TableRow>
-    <TableCell
-      :class="
-        cn(
-          'p-4 whitespace-nowrap align-middle text-sm text-foreground',
-          props.class,
-        )
-      "
-      v-bind="delegatedProps"
-    >
-      <div class="flex items-center justify-center py-10">
-        <slot />
-      </div>
-    </TableCell>
-  </TableRow>
-</template>
Index: sources/js/components/ui/table/TableFooter.vue
===================================================================
--- resources/js/components/ui/table/TableFooter.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <tfoot
-    data-slot="table-footer"
-    :class="cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', props.class)"
-  >
-    <slot />
-  </tfoot>
-</template>
Index: sources/js/components/ui/table/TableHead.vue
===================================================================
--- resources/js/components/ui/table/TableHead.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <th
-    data-slot="table-head"
-    :class="cn('text-muted-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]', props.class)"
-  >
-    <slot />
-  </th>
-</template>
Index: sources/js/components/ui/table/TableHeader.vue
===================================================================
--- resources/js/components/ui/table/TableHeader.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <thead
-    data-slot="table-header"
-    :class="cn('[&_tr]:border-b', props.class)"
-  >
-    <slot />
-  </thead>
-</template>
Index: sources/js/components/ui/table/TableRow.vue
===================================================================
--- resources/js/components/ui/table/TableRow.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-}>()
-</script>
-
-<template>
-  <tr
-    data-slot="table-row"
-    :class="cn('hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors', props.class)"
-  >
-    <slot />
-  </tr>
-</template>
Index: sources/js/components/ui/table/index.ts
===================================================================
--- resources/js/components/ui/table/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,9 +1,0 @@
-export { default as Table } from "./Table.vue"
-export { default as TableBody } from "./TableBody.vue"
-export { default as TableCaption } from "./TableCaption.vue"
-export { default as TableCell } from "./TableCell.vue"
-export { default as TableEmpty } from "./TableEmpty.vue"
-export { default as TableFooter } from "./TableFooter.vue"
-export { default as TableHead } from "./TableHead.vue"
-export { default as TableHeader } from "./TableHeader.vue"
-export { default as TableRow } from "./TableRow.vue"
Index: sources/js/components/ui/table/utils.ts
===================================================================
--- resources/js/components/ui/table/utils.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,10 +1,0 @@
-import type { Updater } from "@tanstack/vue-table"
-
-import type { Ref } from "vue"
-import { isFunction } from "@tanstack/vue-table"
-
-export function valueUpdater<T>(updaterOrValue: Updater<T>, ref: Ref<T>) {
-  ref.value = isFunction(updaterOrValue)
-    ? updaterOrValue(ref.value)
-    : updaterOrValue
-}
Index: sources/js/components/ui/textarea/Textarea.vue
===================================================================
--- resources/js/components/ui/textarea/Textarea.vue	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,28 +1,0 @@
-<script setup lang="ts">
-import type { HTMLAttributes } from "vue"
-import { useVModel } from "@vueuse/core"
-import { cn } from "@/lib/utils"
-
-const props = defineProps<{
-  class?: HTMLAttributes["class"]
-  defaultValue?: string | number
-  modelValue?: string | number
-}>()
-
-const emits = defineEmits<{
-  (e: "update:modelValue", payload: string | number): void
-}>()
-
-const modelValue = useVModel(props, "modelValue", emits, {
-  passive: true,
-  defaultValue: props.defaultValue,
-})
-</script>
-
-<template>
-  <textarea
-    v-model="modelValue"
-    data-slot="textarea"
-    :class="cn('border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', props.class)"
-  />
-</template>
Index: sources/js/components/ui/textarea/index.ts
===================================================================
--- resources/js/components/ui/textarea/index.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,1 +1,0 @@
-export { default as Textarea } from "./Textarea.vue"
Index: sources/js/composables/useTheme.ts
===================================================================
--- resources/js/composables/useTheme.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,45 +1,0 @@
-import { ref } from 'vue'
-
-// Create the ref OUTSIDE the function so it's shared across all calls
-const savedTheme = localStorage.getItem('theme') || 'light'
-const theme = ref(savedTheme)
-
-function useTheme() {
-    console.log('useTheme function called')
-
-    const setTheme = (newTheme: string) => {
-        console.log('setTheme function called with:', newTheme)
-        theme.value = newTheme
-
-        // Handle system theme
-        if (newTheme === 'system') {
-            const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
-            if (systemPrefersDark) {
-                document.documentElement.classList.add('dark')
-            } else {
-                document.documentElement.classList.remove('dark')
-            }
-        } else if (newTheme === 'dark') {
-            document.documentElement.classList.add('dark')
-        } else {
-            document.documentElement.classList.remove('dark')
-        }
-
-        localStorage.setItem('theme', newTheme)
-    }
-
-    // Initialize theme on load (but only once)
-    if (!theme.value) {
-        setTheme(savedTheme)
-    } else {
-        // Reapply the current theme
-        setTheme(theme.value)
-    }
-
-    return {
-        theme,
-        setTheme
-    }
-}
-
-export default useTheme
Index: sources/js/lib/utils.ts
===================================================================
--- resources/js/lib/utils.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,18 +1,0 @@
-import { ClassValue, clsx } from 'clsx';
-import { twMerge } from 'tailwind-merge';
-
-export function cn(...inputs: ClassValue[]) {
-    return twMerge(clsx(inputs));
-}
-
-export function toCamelCase(str: string): string {
-    return str.replace(/([-_]\w)/g, (g) => g[1].toUpperCase());
-}
-
-export function formatLabel(str: string): string {
-    const words = str.replace(/_/g, ' ').split(' ');
-    const formattedWords = words.map((word) => {
-        return word.charAt(0).toUpperCase() + word.slice(1);
-    });
-    return formattedWords.join(' ');
-}
Index: sources/js/types/crud.ts
===================================================================
--- resources/js/types/crud.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,123 +1,0 @@
-export interface Column {
-    key: string
-    label: string
-    sortable?: boolean
-    formatter?: (value: any, row: any) => string
-    component?: string // For future custom cell components
-}
-
-export interface ExpandedField {
-    key: string
-    label: string
-    formatter?: (value: any, row: any) => string
-    span?: 1 | 2 // Grid span (1 = half width, 2 = full width)
-}
-
-export interface ExpandedSection {
-    title: string
-    fields: ExpandedField[]
-}
-
-export interface CrudConfig {
-    title: string
-    endpoint: string // e.g., '/clients', '/orders', '/transports'
-    searchPlaceholder: string
-    columns: Column[]
-    expandedSections?: ExpandedSection[]
-    searchFields?: string[] // Backend search fields (optional)
-}
-
-export interface PaginatedData<T = any> {
-    data: T[]
-    current_page: number
-    last_page: number
-    per_page: number
-    total: number
-    from: number
-    to: number
-    links?: Array<{
-        url: string | null
-        label: string
-        active: boolean
-    }>
-}
-
-export interface CrudFilters {
-    search?: string
-    sort_by: string
-    sort_direction: 'asc' | 'desc'
-    per_page: number
-}
-
-export interface FormField {
-    key: string
-    label: string
-    type: 'text' | 'textarea' | 'email' | 'tel' | 'number' | 'date'
-    required?: boolean
-    placeholder?: string
-    span?: 1 | 2 // Grid span for layout
-}
-
-export interface ActionButton {
-    label: string
-    variant: 'default' | 'outline' | 'destructive' | 'ghost'
-    action: (row: any) => void
-    condition?: (row: any) => boolean // Show button conditionally
-}
-
-export interface Column {
-    key: string
-    label: string
-    sortable?: boolean
-    formatter?: (value: any, row: any) => string
-    component?: string // For future custom cell components
-}
-
-export interface ExpandedField {
-    key: string
-    label: string
-    formatter?: (value: any, row: any) => string
-    span?: 1 | 2 // Grid span (1 = half width, 2 = full width)
-}
-
-export interface ExpandedSection {
-    title: string
-    fields: ExpandedField[]
-}
-
-export interface CrudConfig {
-    title: string
-    endpoint: string // e.g., '/clients', '/orders', '/transports'
-    searchPlaceholder: string
-    columns: Column[]
-    expandedSections?: ExpandedSection[]
-    searchFields?: string[] // Backend search fields (optional)
-    formFields: FormField[] // Fields for create/edit forms
-    customActions?: ActionButton[] // Custom action buttons per row
-    canCreate?: boolean
-    canEdit?: boolean
-    canDelete?: boolean
-    deleteConfirmMessage?: (row: any) => string
-}
-
-export interface PaginatedData<T = any> {
-    data: T[]
-    current_page: number
-    last_page: number
-    per_page: number
-    total: number
-    from: number
-    to: number
-    links?: Array<{
-        url: string | null
-        label: string
-        active: boolean
-    }>
-}
-
-export interface CrudFilters {
-    search?: string
-    sort_by: string
-    sort_direction: 'asc' | 'desc'
-    per_page: number
-}
Index: resources/js/types/index.d.ts
===================================================================
--- resources/js/types/index.d.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ resources/js/types/index.d.ts	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,28 +1,14 @@
-import { PageProps as InertiaPageProps } from '@inertiajs/core';
+export interface User {
+    id: number;
+    name: string;
+    email: string;
+    email_verified_at?: string;
+}
 
-declare module '@inertiajs/core' {
-    export interface PageProps extends InertiaPageProps {
-        auth: {
-            user: {
-                id: string;
-                name: string;
-                email: string;
-                is_admin: boolean;
-            } | null;
-        };
-    }
-}
-// export interface User {
-//     id: number;
-//     name: string;
-//     email: string;
-//     email_verified_at?: string;
-// }
-//
-// export type PageProps<
-//     T extends Record<string, unknown> = Record<string, unknown>,
-// > = T & {
-//     auth: {
-//         user: User;
-//     };
-// };
+export type PageProps<
+    T extends Record<string, unknown> = Record<string, unknown>,
+> = T & {
+    auth: {
+        user: User;
+    };
+};
Index: sources/views/pdfs/invoice.blade.php
===================================================================
--- resources/views/pdfs/invoice.blade.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,300 +1,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>Invoice {{ $invoiceNumber }}</title>
-    <style>
-        * {
-            margin: 0;
-            padding: 0;
-            box-sizing: border-box;
-        }
-        body {
-            font-family: 'DejaVu Sans', sans-serif;
-            font-size: 12px;
-            color: #333;
-            line-height: 1.5;
-        }
-        .header {
-            margin-bottom: 30px;
-            border-bottom: 3px solid #2563eb;
-            padding-bottom: 20px;
-        }
-        .header h1 {
-            font-size: 32px;
-            color: #2563eb;
-            margin-bottom: 5px;
-        }
-        .header .invoice-details {
-            text-align: right;
-            font-size: 11px;
-        }
-        .company-info {
-            margin-bottom: 10px;
-        }
-        .company-info h2 {
-            font-size: 16px;
-            margin-bottom: 5px;
-        }
-        .section {
-            margin-bottom: 20px;
-        }
-        .section-title {
-            font-size: 14px;
-            font-weight: bold;
-            color: #2563eb;
-            margin-bottom: 10px;
-            padding-bottom: 5px;
-            border-bottom: 1px solid #e5e7eb;
-        }
-        .two-column {
-            display: table;
-            width: 100%;
-            margin-bottom: 20px;
-        }
-        .column {
-            display: table-cell;
-            width: 48%;
-            vertical-align: top;
-        }
-        .column:first-child {
-            padding-right: 4%;
-        }
-        .info-box {
-            background: #f9fafb;
-            padding: 15px;
-            border-radius: 5px;
-            margin-bottom: 10px;
-            border: 1px solid #e5e7eb;
-        }
-        .info-box p {
-            margin-bottom: 3px;
-        }
-        .info-box strong {
-            display: inline-block;
-            min-width: 100px;
-        }
-        table {
-            width: 100%;
-            border-collapse: collapse;
-            margin-bottom: 20px;
-        }
-        table thead {
-            background: #2563eb;
-            color: white;
-        }
-        table th {
-            padding: 10px;
-            text-align: left;
-            font-weight: bold;
-            font-size: 11px;
-        }
-        table td {
-            padding: 8px 10px;
-            border-bottom: 1px solid #e5e7eb;
-        }
-        table tbody tr:hover {
-            background: #f9fafb;
-        }
-        .text-right {
-            text-align: right;
-        }
-        .text-center {
-            text-align: center;
-        }
-        .totals-section {
-            margin-top: 20px;
-            float: right;
-            width: 300px;
-        }
-        .totals-row {
-            display: table;
-            width: 100%;
-            padding: 8px 0;
-            border-bottom: 1px solid #e5e7eb;
-        }
-        .totals-row.total {
-            background: #2563eb;
-            color: white;
-            font-size: 16px;
-            font-weight: bold;
-            padding: 12px 10px;
-            margin-top: 5px;
-            border-radius: 5px;
-        }
-        .totals-label {
-            display: table-cell;
-            width: 60%;
-            font-weight: bold;
-        }
-        .totals-amount {
-            display: table-cell;
-            width: 40%;
-            text-align: right;
-        }
-        .notes {
-            clear: both;
-            margin-top: 30px;
-            padding-top: 20px;
-            border-top: 1px solid #e5e7eb;
-        }
-        .footer {
-            margin-top: 50px;
-            padding-top: 20px;
-            border-top: 2px solid #e5e7eb;
-            text-align: center;
-            font-size: 10px;
-            color: #6b7280;
-        }
-        .status-badge {
-            display: inline-block;
-            padding: 4px 12px;
-            border-radius: 12px;
-            font-size: 10px;
-            font-weight: bold;
-        }
-        .status-pending { background: #fef3c7; color: #92400e; }
-        .status-paid { background: #d1fae5; color: #065f46; }
-        .status-overdue { background: #fee2e2; color: #991b1b; }
-        .clearfix::after {
-            content: "";
-            clear: both;
-            display: table;
-        }
-    </style>
-</head>
-<body>
-<div class="header">
-    <div style="display: table; width: 100%;">
-        <div style="display: table-cell; width: 50%;">
-            <div class="company-info">
-                <h2>Your Company Name</h2>
-                <p>123 Business Street</p>
-                <p>Skopje, North Macedonia</p>
-                <p>Email: info@company.com</p>
-                <p>Phone: +389 XX XXX XXX</p>
-            </div>
-        </div>
-        <div style="display: table-cell; width: 50%; text-align: right;">
-            <h1>INVOICE</h1>
-            <div class="invoice-details">
-                <p><strong>Invoice #:</strong> {{ $invoiceNumber }}</p>
-                <p><strong>Date:</strong> {{ $invoiceDate }}</p>
-                <p><strong>Due Date:</strong> {{ $dueDate }}</p>
-                <p><strong>Order ID:</strong> {{ $order->id }}</p>
-            </div>
-        </div>
-    </div>
-</div>
-
-<div class="two-column">
-    <div class="column">
-        <div class="section-title">Bill To</div>
-        <div class="info-box">
-            <p><strong>{{ $order->buyer->name ?? 'N/A' }}</strong></p>
-            <p>{{ $order->buyer->address ?? 'N/A' }}</p>
-            <p>
-                {{ $order->buyer->city ?? '' }}{{ $order->buyer->city && $order->buyer->country ? ', ' : '' }}{{ $order->buyer->country ?? '' }}
-            </p>
-            <p>Email: {{ $order->buyer->email ?? 'N/A' }}</p>
-            <p>Phone: {{ $order->buyer->phone ?? 'N/A' }}</p>
-        </div>
-    </div>
-    <div class="column">
-        <div class="section-title">Ship To</div>
-        <div class="info-box">
-            <p><strong>{{ $order->receiver->name ?? 'N/A' }}</strong></p>
-            <p>{{ $order->receiver->address ?? 'N/A' }}</p>
-            <p>
-                {{ $order->receiver->city ?? '' }}{{ $order->receiver->city && $order->receiver->country ? ', ' : '' }}{{ $order->receiver->country ?? '' }}
-            </p>
-            <p>Email: {{ $order->receiver->email ?? 'N/A' }}</p>
-            <p>Phone: {{ $order->receiver->phone ?? 'N/A' }}</p>
-        </div>
-    </div>
-</div>
-
-<div class="section">
-    <div class="section-title">Order Details</div>
-    <table>
-        <thead>
-        <tr>
-            <th>#</th>
-            <th>Batch Code</th>
-            <th>Product</th>
-            <th class="text-center">Quantity</th>
-            <th class="text-right">Unit Price</th>
-            <th class="text-right">Total</th>
-        </tr>
-        </thead>
-        <tbody>
-        @php
-            $subtotal = 0;
-        @endphp
-        @foreach($order->batches as $index => $batch)
-            @php
-                $lineTotal = $batch->pivot->quantity * $batch->pivot->price_per_unit;
-                $subtotal += $lineTotal;
-            @endphp
-            <tr>
-                <td>{{ $index + 1 }}</td>
-                <td>{{ $batch->batch_code }}</td>
-                <td>{{ $batch->product->name ?? 'N/A' }}</td>
-                <td class="text-center">{{ $batch->pivot->quantity }}</td>
-                <td class="text-right">{{ $currency }} {{ number_format($batch->pivot->price_per_unit, 2) }}</td>
-                <td class="text-right">{{ $currency }} {{ number_format($lineTotal, 2) }}</td>
-            </tr>
-        @endforeach
-        </tbody>
-    </table>
-</div>
-
-<div class="clearfix">
-    <div class="totals-section">
-        <div class="totals-row">
-            <div class="totals-label">Subtotal:</div>
-            <div class="totals-amount">{{ $currency }} {{ number_format($subtotal, 2) }}</div>
-        </div>
-        <div class="totals-row">
-            <div class="totals-label">Tax ({{ $taxRate }}%):</div>
-            <div class="totals-amount">{{ $currency }} {{ number_format($taxAmount, 2) }}</div>
-        </div>
-        <div class="totals-row total">
-            <div class="totals-label">Total Amount:</div>
-            <div class="totals-amount">{{ $currency }} {{ number_format($totalAmount, 2) }}</div>
-        </div>
-    </div>
-</div>
-
-<div class="notes">
-    @if($order->payment)
-        <div class="section-title">Payment Information</div>
-        <div class="info-box">
-            <p><strong>Status:</strong>
-                <span class="status-badge status-{{ $order->payment->payment_status }}">
-                    {{ strtoupper($order->payment->payment_status) }}
-                </span>
-            </p>
-            <p><strong>Payment Method:</strong> {{ ucwords(str_replace('_', ' ', $order->payment->payment_method)) }}</p>
-            <p><strong>Due Date:</strong> {{ \Carbon\Carbon::parse($order->payment->due_date)->format('Y-m-d') }}</p>
-            @if($order->payment->payment_date)
-                <p><strong>Payment Date:</strong> {{ \Carbon\Carbon::parse($order->payment->payment_date)->format('Y-m-d') }}</p>
-            @endif
-            <p><strong>Amount Due:</strong> {{ $currency }} {{ number_format($order->payment->amount, 2) }}</p>
-        </div>
-    @endif
-
-    <div class="section-title" style="margin-top: 20px;">Payment Instructions</div>
-    <p>Please make payment to:</p>
-    <p><strong>Bank Name:</strong> Your Bank Name</p>
-    <p><strong>Account Number:</strong> XXXX-XXXX-XXXX</p>
-    <p><strong>SWIFT/BIC:</strong> XXXXXXXX</p>
-    <p><strong>Reference:</strong> {{ $invoiceNumber }}</p>
-</div>
-
-<div class="footer">
-    <p>Thank you for your business!</p>
-    <p>This is a computer-generated invoice. For any queries, please contact us at info@company.com</p>
-</div>
-</body>
-</html>
Index: sources/views/pdfs/packing-list.blade.php
===================================================================
--- resources/views/pdfs/packing-list.blade.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ 	(revision )
@@ -1,332 +1,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>Packing List {{ $packingListNumber }}</title>
-    <style>
-        * {
-            margin: 0;
-            padding: 0;
-            box-sizing: border-box;
-        }
-        body {
-            font-family: 'DejaVu Sans', sans-serif;
-            font-size: 12px;
-            color: #333;
-            line-height: 1.5;
-        }
-        .header {
-            margin-bottom: 30px;
-            border-bottom: 3px solid #059669;
-            padding-bottom: 20px;
-        }
-        .header h1 {
-            font-size: 32px;
-            color: #059669;
-            margin-bottom: 5px;
-        }
-        .header .packing-details {
-            text-align: right;
-            font-size: 11px;
-        }
-        .company-info {
-            margin-bottom: 10px;
-        }
-        .company-info h2 {
-            font-size: 16px;
-            margin-bottom: 5px;
-        }
-        .section {
-            margin-bottom: 20px;
-        }
-        .section-title {
-            font-size: 14px;
-            font-weight: bold;
-            color: #059669;
-            margin-bottom: 10px;
-            padding-bottom: 5px;
-            border-bottom: 1px solid #e5e7eb;
-        }
-        .two-column {
-            display: table;
-            width: 100%;
-            margin-bottom: 20px;
-        }
-        .column {
-            display: table-cell;
-            width: 48%;
-            vertical-align: top;
-        }
-        .column:first-child {
-            padding-right: 4%;
-        }
-        .info-box {
-            background: #f0fdf4;
-            padding: 15px;
-            border-radius: 5px;
-            margin-bottom: 10px;
-            border: 1px solid #bbf7d0;
-        }
-        .info-box p {
-            margin-bottom: 3px;
-        }
-        .info-box strong {
-            display: inline-block;
-            min-width: 100px;
-        }
-        table {
-            width: 100%;
-            border-collapse: collapse;
-            margin-bottom: 20px;
-        }
-        table thead {
-            background: #059669;
-            color: white;
-        }
-        table th {
-            padding: 10px;
-            text-align: left;
-            font-weight: bold;
-            font-size: 11px;
-        }
-        table td {
-            padding: 8px 10px;
-            border-bottom: 1px solid #e5e7eb;
-        }
-        table tbody tr:hover {
-            background: #f0fdf4;
-        }
-        .text-right {
-            text-align: right;
-        }
-        .text-center {
-            text-align: center;
-        }
-        .summary-section {
-            margin-top: 30px;
-            background: #f0fdf4;
-            padding: 20px;
-            border-radius: 5px;
-            border: 2px solid #059669;
-        }
-        .summary-grid {
-            display: table;
-            width: 100%;
-        }
-        .summary-item {
-            display: table-cell;
-            width: 25%;
-            text-align: center;
-            padding: 10px;
-        }
-        .summary-item .label {
-            font-size: 11px;
-            color: #6b7280;
-            margin-bottom: 5px;
-        }
-        .summary-item .value {
-            font-size: 20px;
-            font-weight: bold;
-            color: #059669;
-        }
-        .notes {
-            margin-top: 30px;
-            padding: 15px;
-            background: #fef3c7;
-            border-left: 4px solid #f59e0b;
-            border-radius: 5px;
-        }
-        .notes strong {
-            color: #92400e;
-        }
-        .footer {
-            margin-top: 50px;
-            padding-top: 20px;
-            border-top: 2px solid #e5e7eb;
-            text-align: center;
-            font-size: 10px;
-            color: #6b7280;
-        }
-        .weight-badge {
-            display: inline-block;
-            padding: 2px 8px;
-            background: #dbeafe;
-            color: #1e40af;
-            border-radius: 4px;
-            font-size: 10px;
-            font-weight: bold;
-        }
-        .batch-details {
-            font-size: 10px;
-            color: #6b7280;
-            margin-top: 2px;
-        }
-    </style>
-</head>
-<body>
-<div class="header">
-    <div style="display: table; width: 100%;">
-        <div style="display: table-cell; width: 50%;">
-            <div class="company-info">
-                <h2>Your Company Name</h2>
-                <p>123 Business Street</p>
-                <p>Skopje, North Macedonia</p>
-                <p>Email: info@company.com</p>
-                <p>Phone: +389 XX XXX XXX</p>
-            </div>
-        </div>
-        <div style="display: table-cell; width: 50%; text-align: right;">
-            <h1>PACKING LIST</h1>
-            <div class="packing-details">
-                <p><strong>Packing List #:</strong> {{ $packingListNumber }}</p>
-                <p><strong>Date:</strong> {{ $packingDate }}</p>
-                <p><strong>Order ID:</strong> {{ $order->id }}</p>
-                <p><strong>Order Date:</strong> {{ $order->date->format('Y-m-d') }}</p>
-            </div>
-        </div>
-    </div>
-</div>
-
-<div class="two-column">
-    <div class="column">
-        <div class="section-title">Shipper (From)</div>
-        <div class="info-box">
-            <p><strong>{{ $order->buyer->name }}</strong></p>
-            <p>{{ $order->buyer->address ?? 'N/A' }}</p>
-            <p>{{ $order->buyer->city ?? '' }}, {{ $order->buyer->country ?? '' }}</p>
-            <p>Contact: {{ $order->buyer->phone ?? 'N/A' }}</p>
-            <p>Email: {{ $order->buyer->email ?? 'N/A' }}</p>
-        </div>
-    </div>
-    <div class="column">
-        <div class="section-title">Consignee (To)</div>
-        <div class="info-box">
-            <p><strong>{{ $order->receiver->name }}</strong></p>
-            <p>{{ $order->receiver->address ?? 'N/A' }}</p>
-            <p>{{ $order->receiver->city ?? '' }}, {{ $order->receiver->country ?? '' }}</p>
-            <p>Contact: {{ $order->receiver->phone ?? 'N/A' }}</p>
-            <p>Email: {{ $order->receiver->email ?? 'N/A' }}</p>
-        </div>
-    </div>
-</div>
-
-@if($order->transport)
-    <div class="section">
-        <div class="section-title">Transport Information</div>
-        <div class="info-box">
-            <p><strong>Transport Company:</strong> {{ $order->transport->name }}</p>
-            @if(isset($order->transport->vehicle_type))
-                <p><strong>Vehicle Type:</strong> {{ $order->transport->vehicle_type }}</p>
-            @endif
-            @if(isset($order->transport->driver))
-                <p><strong>Driver:</strong> {{ $order->transport->driver }}</p>
-            @endif
-            @if(isset($order->transport->contact))
-                <p><strong>Contact:</strong> {{ $order->transport->contact }}</p>
-            @endif
-        </div>
-    </div>
-@endif
-
-<div class="section">
-    <div class="section-title">Package Contents</div>
-    <table>
-        <thead>
-        <tr>
-            <th>Package #</th>
-            <th>Batch Code</th>
-            <th>Product Description</th>
-            <th class="text-center">Quantity</th>
-            <th class="text-right">Net Weight (kg)</th>
-            <th class="text-right">Gross Weight (kg)</th>
-        </tr>
-        </thead>
-        <tbody>
-        @foreach($order->batches as $index => $batch)
-            <tr>
-                <td><strong>{{ $index + 1 }}</strong></td>
-                <td>
-                    <strong>{{ $batch->batch_code }}</strong>
-                    <div class="batch-details">
-                        Prod: {{ \Carbon\Carbon::parse($batch->production_date)->format('Y-m-d') }}
-                        | Exp: {{ \Carbon\Carbon::parse($batch->expiration_date)->format('Y-m-d') }}
-                    </div>
-                </td>
-                <td>
-                    <strong>{{ $batch->product->name ?? 'N/A' }}</strong>
-                    @if(isset($batch->product->description))
-                        <div class="batch-details">{{ $batch->product->description }}</div>
-                    @endif
-                </td>
-                <td class="text-center">
-                    <span class="weight-badge">{{ $batch->pivot->quantity }} units</span>
-                </td>
-                <td class="text-right">{{ number_format($batch->net_weight, 2) }}</td>
-                <td class="text-right">{{ number_format($batch->gross_weight, 2) }}</td>
-            </tr>
-        @endforeach
-        </tbody>
-        <tfoot>
-        <tr style="background: #f0fdf4; font-weight: bold;">
-            <td colspan="3" class="text-right"><strong>TOTALS:</strong></td>
-            <td class="text-center">{{ $totalUnits }} units</td>
-            <td class="text-right">{{ $totalNetWeight }} kg</td>
-            <td class="text-right">{{ $totalGrossWeight }} kg</td>
-        </tr>
-        </tfoot>
-    </table>
-</div>
-
-<div class="summary-section">
-    <div class="summary-grid">
-        <div class="summary-item">
-            <div class="label">Total Packages</div>
-            <div class="value">{{ $totalPackages }}</div>
-        </div>
-        <div class="summary-item">
-            <div class="label">Total Units</div>
-            <div class="value">{{ $totalUnits }}</div>
-        </div>
-        <div class="summary-item">
-            <div class="label">Net Weight</div>
-            <div class="value">{{ $totalNetWeight }} kg</div>
-        </div>
-        <div class="summary-item">
-            <div class="label">Gross Weight</div>
-            <div class="value">{{ $totalGrossWeight }} kg</div>
-        </div>
-    </div>
-</div>
-
-<div class="notes">
-    <strong>⚠ Handling Instructions:</strong>
-    <ul style="margin-left: 20px; margin-top: 10px;">
-        <li>Handle with care - fragile contents</li>
-        <li>Keep dry and store in cool place</li>
-        <li>Do not stack more than 3 pallets high</li>
-        <li>Check batch codes and expiration dates upon receipt</li>
-        <li>Report any damage or discrepancies immediately</li>
-    </ul>
-</div>
-
-<div style="margin-top: 50px; border-top: 1px solid #e5e7eb; padding-top: 20px;">
-    <div style="display: table; width: 100%;">
-        <div style="display: table-cell; width: 50%;">
-            <p><strong>Prepared By:</strong></p>
-            <p style="margin-top: 30px; border-top: 1px solid #333; width: 200px; padding-top: 5px;">Signature</p>
-            <p>Date: {{ $packingDate }}</p>
-        </div>
-        <div style="display: table-cell; width: 50%;">
-            <p><strong>Received By:</strong></p>
-            <p style="margin-top: 30px; border-top: 1px solid #333; width: 200px; padding-top: 5px;">Signature</p>
-            <p>Date: _______________</p>
-        </div>
-    </div>
-</div>
-
-<div class="footer">
-    <p>This packing list is for reference purposes only and does not serve as a commercial invoice.</p>
-    <p>For any discrepancies or questions, please contact us immediately at info@company.com</p>
-</div>
-</body>
-</html>
Index: routes/auth.php
===================================================================
--- routes/auth.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
+++ routes/auth.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -0,0 +1,59 @@
+<?php
+
+use App\Http\Controllers\Auth\AuthenticatedSessionController;
+use App\Http\Controllers\Auth\ConfirmablePasswordController;
+use App\Http\Controllers\Auth\EmailVerificationNotificationController;
+use App\Http\Controllers\Auth\EmailVerificationPromptController;
+use App\Http\Controllers\Auth\NewPasswordController;
+use App\Http\Controllers\Auth\PasswordController;
+use App\Http\Controllers\Auth\PasswordResetLinkController;
+use App\Http\Controllers\Auth\RegisteredUserController;
+use App\Http\Controllers\Auth\VerifyEmailController;
+use Illuminate\Support\Facades\Route;
+
+Route::middleware('guest')->group(function () {
+    Route::get('register', [RegisteredUserController::class, 'create'])
+        ->name('register');
+
+    Route::post('register', [RegisteredUserController::class, 'store']);
+
+    Route::get('login', [AuthenticatedSessionController::class, 'create'])
+        ->name('login');
+
+    Route::post('login', [AuthenticatedSessionController::class, 'store']);
+
+    Route::get('forgot-password', [PasswordResetLinkController::class, 'create'])
+        ->name('password.request');
+
+    Route::post('forgot-password', [PasswordResetLinkController::class, 'store'])
+        ->name('password.email');
+
+    Route::get('reset-password/{token}', [NewPasswordController::class, 'create'])
+        ->name('password.reset');
+
+    Route::post('reset-password', [NewPasswordController::class, 'store'])
+        ->name('password.store');
+});
+
+Route::middleware('auth')->group(function () {
+    Route::get('verify-email', EmailVerificationPromptController::class)
+        ->name('verification.notice');
+
+    Route::get('verify-email/{id}/{hash}', VerifyEmailController::class)
+        ->middleware(['signed', 'throttle:6,1'])
+        ->name('verification.verify');
+
+    Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store'])
+        ->middleware('throttle:6,1')
+        ->name('verification.send');
+
+    Route::get('confirm-password', [ConfirmablePasswordController::class, 'show'])
+        ->name('password.confirm');
+
+    Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
+
+    Route::put('password', [PasswordController::class, 'update'])->name('password.update');
+
+    Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
+        ->name('logout');
+});
Index: routes/web.php
===================================================================
--- routes/web.php	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ routes/web.php	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,87 +1,27 @@
 <?php
 
-use App\Http\Controllers\OrderController;
+use App\Http\Controllers\ProfileController;
+use Illuminate\Foundation\Application;
 use Illuminate\Support\Facades\Route;
-use App\Http\Controllers\GenericModelController;
-use App\Http\Controllers\DashboardController;
-use App\Http\Controllers\AuthController;
-use Illuminate\Http\Request;
+use Inertia\Inertia;
 
-Route::middleware('guest')->group(function () {
-    Route::get('/login', [AuthController::class, 'login'])->name('login');
-    Route::post('/login', [AuthController::class, 'storeLogin'])->name('storeLogin');
+Route::get('/', function () {
+    return Inertia::render('Welcome', [
+        'canLogin' => Route::has('login'),
+        'canRegister' => Route::has('register'),
+        'laravelVersion' => Application::VERSION,
+        'phpVersion' => PHP_VERSION,
+    ]);
 });
 
+Route::get('/dashboard', function () {
+    return Inertia::render('Dashboard');
+})->middleware(['auth', 'verified'])->name('dashboard');
+
 Route::middleware('auth')->group(function () {
-    Route::redirect('/', '/dashboard');
-    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
-    Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
+    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
+    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
+    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
+});
 
-    // Users routes with admin middleware
-    Route::prefix('users')->middleware('admin')->group(function () {
-        Route::get('/', function (Request $request) {
-            return app(GenericModelController::class)->index($request, 'users');
-        })->name('users.index');
-
-        Route::post('/', function (Request $request) {
-            return app(GenericModelController::class)->store($request, 'users');
-        })->name('users.store');
-
-        Route::put('/{id}', function (Request $request, $id) {
-            return app(GenericModelController::class)->update($request, 'users', $id);
-        })->name('users.update');
-
-        Route::delete('/{id}', function (Request $request, $id) {
-            return app(GenericModelController::class)->destroy('users', $id);
-        })->name('users.destroy');
-    });
-
-    // Order-specific routes (MUST come BEFORE generic routes)
-    Route::prefix('orders')->group(function () {
-        // Batch operations for select options (no order parameter) - MUST BE FIRST
-        Route::get('batches/select-options', [OrderController::class, 'getBatchesForSelect'])
-            ->name('orders.batches.select-options');
-
-        // CRUD operations for orders
-        Route::get('/', [OrderController::class, 'index'])->name('orders.index');
-        Route::post('/', [OrderController::class, 'store'])->name('orders.store');
-
-        // Order-specific operations (with order parameter)
-        Route::post('{order}/create-payment', [OrderController::class, 'createPayment'])
-            ->name('orders.create-payment');
-
-        Route::post('{order}/add-batch', [OrderController::class, 'addBatch'])
-            ->name('orders.add-batch');
-
-        Route::delete('{order}/remove-batch/{batch}', [OrderController::class, 'removeBatch'])
-            ->name('orders.remove-batch');
-
-        Route::get('{order}/available-batches', [OrderController::class, 'getAvailableBatches'])
-            ->name('orders.available-batches');
-
-        // PDF generation routes
-        Route::get('{order}/generate-invoice', [OrderController::class, 'generateInvoice'])
-            ->name('orders.generate-invoice');
-
-        Route::get('{order}/generate-packing-list', [OrderController::class, 'generatePackingList'])
-            ->name('orders.generate-packing-list');
-
-        // Preview routes (GET)
-        Route::get('{order}/preview-invoice', [OrderController::class, 'previewInvoice'])
-            ->name('orders.preview-invoice');
-
-        Route::get('{order}/preview-packing-list', [OrderController::class, 'previewPackingList'])
-            ->name('orders.preview-packing-list');
-        // Update and Delete (must come after specific routes to avoid conflicts)
-        Route::put('{order}', [OrderController::class, 'update'])->name('orders.update');
-        Route::delete('{order}', [OrderController::class, 'destroy'])->name('orders.destroy');
-    });
-
-    // Generic model routes (MUST come LAST as catch-all)
-    Route::prefix('{model}')->group(function () {
-        Route::get('/', [GenericModelController::class, 'index'])->name('generic.index');
-        Route::post('/', [GenericModelController::class, 'store'])->name('generic.store');
-        Route::put('/{id}', [GenericModelController::class, 'update'])->name('generic.update');
-        Route::delete('/{id}', [GenericModelController::class, 'destroy'])->name('generic.destroy');
-    });
-});
+require __DIR__.'/auth.php';
Index: tailwind.config.ts
===================================================================
--- tailwind.config.ts	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ tailwind.config.ts	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -1,4 +1,3 @@
 export default {
-    darkMode: 'class',
   content: [
       "./vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php",
Index: tsconfig.json
===================================================================
--- tsconfig.json	(revision f9ebee39ffcf79b81c47bf1f3f6d25eb6dffb52a)
+++ tsconfig.json	(revision 9c87bfe6f28523ce9f5aa6774d2ec0d896e38389)
@@ -2,7 +2,4 @@
     "compilerOptions": {
         "allowJs": true,
-        "lib": [
-            "es5", "es6", "dom", "dom.iterable"
-        ],
         "module": "ESNext",
         "moduleResolution": "bundler",
@@ -20,5 +17,5 @@
 
             "ziggy-js": ["./vendor/tightenco/ziggy"]
-        },
+        }
     },
     "include": ["vite.config.ts", "resources/**/*.ts", "resources/**/*.vue"]
