diff --git a/.gitignore b/.gitignore index 2a462fc..c08e1c6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,9 @@ /public/storage /public/css /public/js +/resources/js/actions +/resources/js/routes +/resources/js/wayfinder /storage/*.key /vendor .env diff --git a/bun.lockb b/bun.lockb index b494bf5..20c24ba 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/composer.json b/composer.json index d763543..231fef2 100644 --- a/composer.json +++ b/composer.json @@ -12,14 +12,14 @@ "laravel/pulse": "^1.2", "laravel/sanctum": "^4.0", "laravel/tinker": "^2.9", + "laravel/wayfinder": "^0.1.5", "pxlrbt/filament-environment-indicator": "^2.0", "sentry/sentry-laravel": "^4.7", "spatie/laravel-health": "^1.31", "spatie/laravel-permission": "^6.9", "spatie/security-advisories-health-check": "^1.2", "symfony/http-client": "^7.2", - "symfony/postmark-mailer": "^7.2", - "tightenco/ziggy": "^2.3" + "symfony/postmark-mailer": "^7.2" }, "require-dev": { "barryvdh/laravel-debugbar": "^3.13", diff --git a/composer.lock b/composer.lock index 38aabbc..7bef112 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a6d1ac24f4aff2335df6b731d7fc23ba", + "content-hash": "fc0ff3a1d1bff130abfe2cd86d340fa3", "packages": [ { "name": "althinect/filament-spatie-roles-permissions", @@ -2903,6 +2903,68 @@ }, "time": "2025-01-27T14:24:01+00:00" }, + { + "name": "laravel/wayfinder", + "version": "v0.1.5", + "source": { + "type": "git", + "url": "https://github.com/laravel/wayfinder.git", + "reference": "c73e1ed968c801022509272c50fc78eb53805472" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/wayfinder/zipball/c73e1ed968c801022509272c50fc78eb53805472", + "reference": "c73e1ed968c801022509272c50fc78eb53805472", + "shasum": "" + }, + "require": { + "illuminate/console": "^11.0|^12.0", + "illuminate/filesystem": "^11.0|^12.0", + "illuminate/routing": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", + "php": "^8.2" + }, + "require-dev": { + "laravel/pint": "^1.21", + "orchestra/testbench": "^10.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Wayfinder\\WayfinderServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Wayfinder\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Generate TypeScript representations of your Laravel actions and routes.", + "homepage": "https://github.com/laravel/wayfinder", + "keywords": [ + "laravel", + "php", + "routes", + "typescript" + ], + "support": { + "issues": "https://github.com/laravel/wayfinder/issues", + "source": "https://github.com/laravel/wayfinder" + }, + "time": "2025-05-07T14:50:39+00:00" + }, { "name": "league/commonmark", "version": "2.7.0", @@ -8890,76 +8952,6 @@ ], "time": "2025-04-09T08:14:01+00:00" }, - { - "name": "tightenco/ziggy", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/tighten/ziggy.git", - "reference": "d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tighten/ziggy/zipball/d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c", - "reference": "d59dbb61dc0a1d9abb2130451b9e5e0f264bfe1c", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel/framework": ">=9.0", - "php": ">=8.1" - }, - "require-dev": { - "laravel/folio": "^1.1", - "orchestra/testbench": "^7.0 || ^8.0 || ^9.0 || ^10.0", - "pestphp/pest": "^2.26|^3.0", - "pestphp/pest-plugin-laravel": "^2.4|^3.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Tighten\\Ziggy\\ZiggyServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Tighten\\Ziggy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Coulbourne", - "email": "daniel@tighten.co" - }, - { - "name": "Jake Bathman", - "email": "jake@tighten.co" - }, - { - "name": "Jacob Baker-Kretzmar", - "email": "jacob@tighten.co" - } - ], - "description": "Use your Laravel named routes in JavaScript.", - "homepage": "https://github.com/tighten/ziggy", - "keywords": [ - "Ziggy", - "javascript", - "laravel", - "routes" - ], - "support": { - "issues": "https://github.com/tighten/ziggy/issues", - "source": "https://github.com/tighten/ziggy/tree/v2.5.2" - }, - "time": "2025-02-27T15:43:52+00:00" - }, { "name": "tijsverkoyen/css-to-inline-styles", "version": "v2.3.0", diff --git a/package.json b/package.json index f9b8a37..15be075 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "laravel-vite-plugin": "^1.2.0", "tailwindcss": "^4.1.6", "vite": "^6.3.5", + "vite-plugin-run": "^0.6.1", "vue": "^3.5.13" }, "private": true, diff --git a/resources/css/utilities.css b/resources/css/utilities.css index 56159e8..cf5195a 100644 --- a/resources/css/utilities.css +++ b/resources/css/utilities.css @@ -1,3 +1,3 @@ @utility text-link { - @apply underline hover:decoration-transparent transition-colors; + @apply underline cursor-pointer hover:decoration-transparent transition-colors; } diff --git a/resources/js/Components/Header.vue b/resources/js/Components/Header.vue index 7bfb630..f2cba5d 100644 --- a/resources/js/Components/Header.vue +++ b/resources/js/Components/Header.vue @@ -6,7 +6,7 @@
@@ -85,6 +85,8 @@ import { ref, onMounted } from "vue"; import { router } from '@inertiajs/vue3'; + import { index as home } from "@js/actions/App/Http/Controllers/DashboardController"; + import { Sparkles as SparklesIcon, Menu as MenuIcon, diff --git a/resources/js/Layouts/App.vue b/resources/js/Layouts/App.vue index 6d5f210..20fbaa1 100644 --- a/resources/js/Layouts/App.vue +++ b/resources/js/Layouts/App.vue @@ -21,50 +21,34 @@ diff --git a/resources/js/Pages/EmailVerification/Show.vue b/resources/js/Pages/EmailVerification/Show.vue index 631385b..d7bb9e8 100644 --- a/resources/js/Pages/EmailVerification/Show.vue +++ b/resources/js/Pages/EmailVerification/Show.vue @@ -21,6 +21,19 @@
+ +
+

+ + Logout + +

+
@@ -36,12 +49,14 @@ import { ref } from "vue"; import { router } from "@inertiajs/vue3"; + import LogoutController from "@js/actions/App/Http/Controllers/LogoutController"; + import { update } from "@js/actions/App/Http/Controllers/EmailVerificationController"; + const title = ref("Verify Your Email"); const resend = () => { - router.post(route('verification.send'), { + router.post(update().url, { preserveScroll: true, - preserveState: true, }); }; diff --git a/resources/js/Pages/Login/Show.vue b/resources/js/Pages/Login/Show.vue index cde9546..05f6a9b 100644 --- a/resources/js/Pages/Login/Show.vue +++ b/resources/js/Pages/Login/Show.vue @@ -35,7 +35,7 @@ Password @@ -79,7 +79,7 @@ Don't have an account?

@@ -100,6 +100,10 @@ import { ref } from "vue"; import { useForm } from "@inertiajs/vue3"; + import { show as forgotPassword } from "@js/actions/App/Http/Controllers/ResetPasswordController"; + import { show as register } from "@js/actions/App/Http/Controllers/RegisterController"; + import { store } from "@js/actions/App/Http/Controllers/LoginController"; + const props = defineProps({ email: String, password: String, @@ -116,6 +120,6 @@ }); const submitForm = () => { - loginForm.post(route("login.store")); + loginForm.submit(store()); }; diff --git a/resources/js/Pages/Register/Show.vue b/resources/js/Pages/Register/Show.vue index 9123225..0bf6364 100644 --- a/resources/js/Pages/Register/Show.vue +++ b/resources/js/Pages/Register/Show.vue @@ -91,7 +91,7 @@ Already have an account?

@@ -112,6 +112,9 @@ import { ref } from "vue"; import { useForm } from "@inertiajs/vue3"; + import { show as login } from "@js/actions/App/Http/Controllers/LoginController"; + import { store } from "@js/actions/App/Http/Controllers/RegisterController"; + const props = defineProps({ first_name: String, last_name: String, @@ -128,6 +131,6 @@ }); const submitForm = () => { - registerForm.post(route("register.store")); + registerForm.submit(store()); }; diff --git a/resources/js/Pages/ResetPassword/Edit.vue b/resources/js/Pages/ResetPassword/Edit.vue index fb877bd..c80ba3e 100644 --- a/resources/js/Pages/ResetPassword/Edit.vue +++ b/resources/js/Pages/ResetPassword/Edit.vue @@ -69,6 +69,8 @@ import { ref } from "vue"; import { useForm } from "@inertiajs/vue3"; + import { update } from "@js/actions/App/Http/Controllers/ResetPasswordController"; + const props = defineProps({ email: String, token: String, @@ -83,6 +85,6 @@ }); const submitForm = () => { - resetPasswordForm.patch(route("password.update")); + resetPasswordForm.submit(update()); }; diff --git a/resources/js/Pages/ResetPassword/Show.vue b/resources/js/Pages/ResetPassword/Show.vue index 2b66d90..aff4807 100644 --- a/resources/js/Pages/ResetPassword/Show.vue +++ b/resources/js/Pages/ResetPassword/Show.vue @@ -43,7 +43,7 @@ Remembered your password?

@@ -64,12 +64,15 @@ import { ref } from "vue"; import { useForm } from "@inertiajs/vue3"; + import { show as login } from "@js/actions/App/Http/Controllers/LoginController"; + import { store } from "@js/actions/App/Http/Controllers/ResetPasswordController"; + const title = ref("Forgot Password"); const forgotPasswordForm = useForm({ email: "", }); const submitForm = () => { - forgotPasswordForm.post(route("password.store")); + forgotPasswordForm.submit(store()); }; diff --git a/resources/js/app.js b/resources/js/app.js index 2b1debc..6c4e614 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1,7 +1,5 @@ import * as Sentry from "@sentry/vue"; -import { route, ZiggyVue } from 'ziggy-js'; - import { createApp, defineAsyncComponent, h } from 'vue'; import { createInertiaApp, Link, Head } from '@inertiajs/vue3'; @@ -28,8 +26,7 @@ createInertiaApp({ environment: import.meta.env.VITE_APP_ENV, }); - VueApp.use(plugin) - .use(ZiggyVue); + VueApp.use(plugin); VueApp.mixin({ methods: { userCan } }); diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php index 084a5df..4016dd7 100644 --- a/resources/views/app.blade.php +++ b/resources/views/app.blade.php @@ -5,8 +5,6 @@ - @routes - @vite(['resources/css/app.css', 'resources/js/app.js']) @inertiaHead diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..78bd9bf --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@js/*": ["resources/js/*"], + } + } +} diff --git a/vite.config.js b/vite.config.js index 02a90d7..31df8a6 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,5 +1,6 @@ import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; +import { run } from "vite-plugin-run"; import tailwindcss from "@tailwindcss/vite"; import vue from '@vitejs/plugin-vue'; @@ -23,11 +24,18 @@ export default defineConfig({ }, }, }), + + run([ + { + name: "wayfinder", + run: ["php", "artisan", "wayfinder:generate"], + pattern: ["routes/**/*.php", "app/**/Http/**/*.php"], + }, + ]), ], resolve: { alias: { - 'ziggy-js': '/vendor/tightenco/ziggy', '@': '/resources', '@fonts': '/public/fonts', '@img': '/public/img',