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 @@
+
+
@@ -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',