diff --git a/app/Http/Middleware/ApiToken.php b/app/Http/Middleware/ApiToken.php new file mode 100644 index 0000000..f2e4d9f --- /dev/null +++ b/app/Http/Middleware/ApiToken.php @@ -0,0 +1,39 @@ +api_token === env('API_KEY_1')) { + + $request->merge(["ability" => "key_1"]); + + } elseif ($request->api_token === env('API_KEY_2')) { + + $request->merge(["ability" => "key_2"]); + + } elseif ($request->api_token === env('API_KEY_3')) { + + $request->merge(["ability" => "key_3"]); + + } elseif ($request->api_token === env('API_KEY_4')) { + + $request->merge(["ability" => "key_4"]); + + } else { + return response()->json('Unauthorized', 401); + } + return $next($request); + } +} diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 8ce4eb0..d17c58d 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -26,8 +26,14 @@ class AdminPanelProvider extends PanelProvider return $panel ->default() ->id('admin') - ->path('admin') + ->path('') ->login() + ->registration() + ->passwordReset() + ->emailVerification() + ->emailChangeVerification() + ->profile() + ->databaseNotifications() ->colors([ 'primary' => Color::Amber, ]) @@ -39,7 +45,6 @@ class AdminPanelProvider extends PanelProvider ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\Filament\Widgets') ->widgets([ AccountWidget::class, - FilamentInfoWidget::class, ]) ->middleware([ EncryptCookies::class, @@ -54,6 +59,9 @@ class AdminPanelProvider extends PanelProvider ]) ->authMiddleware([ Authenticate::class, + ]) + ->plugins([ + \DiscoveryDesign\FilamentGaze\FilamentGazePlugin::make() ]); } } diff --git a/bootstrap/app.php b/bootstrap/app.php index 5c02a59..0e21cf2 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -7,6 +7,7 @@ use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) diff --git a/composer.json b/composer.json index 3398c73..4e9b3dd 100644 --- a/composer.json +++ b/composer.json @@ -7,6 +7,7 @@ "license": "MIT", "require": { "php": "^8.2", + "discoverydesign/filament-gaze": "^2.0", "filament/filament": "^4.0", "inertiajs/inertia-laravel": "^2.0", "laravel/framework": "^12.0", diff --git a/composer.lock b/composer.lock index bf47c37..76232f4 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": "4c4fa1ad6ac32d349ed330af73603676", + "content-hash": "6375e777f9979527cef02b3b0890bed0", "packages": [ { "name": "anourvalar/eloquent-serialize", @@ -690,6 +690,53 @@ }, "time": "2024-07-08T12:26:09+00:00" }, + { + "name": "discoverydesign/filament-gaze", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/discoverydesign/filament-gaze.git", + "reference": "1680911482c329e363825a125fe44df749f2aebc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/discoverydesign/filament-gaze/zipball/1680911482c329e363825a125fe44df749f2aebc", + "reference": "1680911482c329e363825a125fe44df749f2aebc", + "shasum": "" + }, + "require": { + "filament/filament": "^4.0", + "spatie/laravel-package-tools": "^1.15.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "DiscoveryDesign\\FilamentGaze\\FilamentGazeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "DiscoveryDesign\\FilamentGaze\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Discovery Design" + } + ], + "description": "See who's viewing a resource in Filament PHP.", + "support": { + "issues": "https://github.com/discoverydesign/filament-gaze/issues", + "source": "https://github.com/discoverydesign/filament-gaze/tree/2.0.1" + }, + "time": "2025-09-17T09:37:49+00:00" + }, { "name": "doctrine/inflector", "version": "2.1.0", diff --git a/package-lock.json b/package-lock.json index 0c948b1..472fef9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,9 @@ "requires": true, "packages": { "": { + "dependencies": { + "sass": "^1.93.2" + }, "devDependencies": { "@headlessui/react": "^2.0.0", "@inertiajs/react": "^2.0.0", @@ -984,6 +987,315 @@ "node": ">= 8" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2005,7 +2317,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2626,7 +2938,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -2894,6 +3206,12 @@ "node": ">= 0.4" } }, + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "license": "MIT" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2927,7 +3245,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2947,7 +3265,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -2960,7 +3278,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -3375,7 +3693,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -3495,6 +3813,13 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, "node_modules/node-releases": { "version": "2.0.21", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", @@ -3614,7 +3939,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -4021,6 +4346,54 @@ "tslib": "^2.1.0" } }, + "node_modules/sass": { + "version": "1.93.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", + "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -4170,7 +4543,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -4503,7 +4875,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" diff --git a/package.json b/package.json index 3f8950f..85bca2b 100644 --- a/package.json +++ b/package.json @@ -21,5 +21,8 @@ "react-dom": "^18.2.0", "tailwindcss": "^3.2.1", "vite": "^7.0.4" + }, + "dependencies": { + "sass": "^1.93.2" } } diff --git a/public/images/vbytes-logo.png b/public/images/vbytes-logo.png new file mode 100644 index 0000000..703898e Binary files /dev/null and b/public/images/vbytes-logo.png differ diff --git a/resources/css/app.css b/resources/css/app.css index b5c61c9..1c600ed 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,3 +1,8 @@ @tailwind base; @tailwind components; @tailwind utilities; + + +.fi-ta-cell .maybe { + background-color: red !important; +} \ No newline at end of file diff --git a/resources/js/Components/ApplicationLogo.jsx b/resources/js/Components/ApplicationLogo.jsx deleted file mode 100644 index 160fb62..0000000 --- a/resources/js/Components/ApplicationLogo.jsx +++ /dev/null @@ -1,11 +0,0 @@ -export default function ApplicationLogo(props) { - return ( - - - - ); -} diff --git a/resources/js/Components/Checkbox.jsx b/resources/js/Components/Checkbox.jsx deleted file mode 100644 index 34a31fe..0000000 --- a/resources/js/Components/Checkbox.jsx +++ /dev/null @@ -1,12 +0,0 @@ -export default function Checkbox({ className = '', ...props }) { - return ( - - ); -} diff --git a/resources/js/Components/DangerButton.jsx b/resources/js/Components/DangerButton.jsx deleted file mode 100644 index 482d6eb..0000000 --- a/resources/js/Components/DangerButton.jsx +++ /dev/null @@ -1,20 +0,0 @@ -export default function DangerButton({ - className = '', - disabled, - children, - ...props -}) { - return ( - - ); -} diff --git a/resources/js/Components/Dropdown.jsx b/resources/js/Components/Dropdown.jsx deleted file mode 100644 index 5f037ef..0000000 --- a/resources/js/Components/Dropdown.jsx +++ /dev/null @@ -1,107 +0,0 @@ -import { Transition } from '@headlessui/react'; -import { Link } from '@inertiajs/react'; -import { createContext, useContext, useState } from 'react'; - -const DropDownContext = createContext(); - -const Dropdown = ({ children }) => { - const [open, setOpen] = useState(false); - - const toggleOpen = () => { - setOpen((previousState) => !previousState); - }; - - return ( - -
{children}
-
- ); -}; - -const Trigger = ({ children }) => { - const { open, setOpen, toggleOpen } = useContext(DropDownContext); - - return ( - <> -
{children}
- - {open && ( -
setOpen(false)} - >
- )} - - ); -}; - -const Content = ({ - align = 'right', - width = '48', - contentClasses = 'py-1 bg-white', - children, -}) => { - const { open, setOpen } = useContext(DropDownContext); - - let alignmentClasses = 'origin-top'; - - if (align === 'left') { - alignmentClasses = 'ltr:origin-top-left rtl:origin-top-right start-0'; - } else if (align === 'right') { - alignmentClasses = 'ltr:origin-top-right rtl:origin-top-left end-0'; - } - - let widthClasses = ''; - - if (width === '48') { - widthClasses = 'w-48'; - } - - return ( - <> - -
setOpen(false)} - > -
- {children} -
-
-
- - ); -}; - -const DropdownLink = ({ className = '', children, ...props }) => { - return ( - - {children} - - ); -}; - -Dropdown.Trigger = Trigger; -Dropdown.Content = Content; -Dropdown.Link = DropdownLink; - -export default Dropdown; diff --git a/resources/js/Components/InputError.jsx b/resources/js/Components/InputError.jsx deleted file mode 100644 index cf8e9e1..0000000 --- a/resources/js/Components/InputError.jsx +++ /dev/null @@ -1,10 +0,0 @@ -export default function InputError({ message, className = '', ...props }) { - return message ? ( -

- {message} -

- ) : null; -} diff --git a/resources/js/Components/InputLabel.jsx b/resources/js/Components/InputLabel.jsx deleted file mode 100644 index 9364f9d..0000000 --- a/resources/js/Components/InputLabel.jsx +++ /dev/null @@ -1,18 +0,0 @@ -export default function InputLabel({ - value, - className = '', - children, - ...props -}) { - return ( - - ); -} diff --git a/resources/js/Components/Modal.jsx b/resources/js/Components/Modal.jsx deleted file mode 100644 index 7560cff..0000000 --- a/resources/js/Components/Modal.jsx +++ /dev/null @@ -1,65 +0,0 @@ -import { - Dialog, - DialogPanel, - Transition, - TransitionChild, -} from '@headlessui/react'; - -export default function Modal({ - children, - show = false, - maxWidth = '2xl', - closeable = true, - onClose = () => {}, -}) { - const close = () => { - if (closeable) { - onClose(); - } - }; - - const maxWidthClass = { - 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', - }[maxWidth]; - - return ( - - - -
- - - - - {children} - - -
-
- ); -} diff --git a/resources/js/Components/NavLink.jsx b/resources/js/Components/NavLink.jsx deleted file mode 100644 index ffe8b02..0000000 --- a/resources/js/Components/NavLink.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Link } from '@inertiajs/react'; - -export default function NavLink({ - active = false, - className = '', - children, - ...props -}) { - return ( - - {children} - - ); -} diff --git a/resources/js/Components/PrimaryButton.jsx b/resources/js/Components/PrimaryButton.jsx deleted file mode 100644 index 61e0bca..0000000 --- a/resources/js/Components/PrimaryButton.jsx +++ /dev/null @@ -1,20 +0,0 @@ -export default function PrimaryButton({ - className = '', - disabled, - children, - ...props -}) { - return ( - - ); -} diff --git a/resources/js/Components/ResponsiveNavLink.jsx b/resources/js/Components/ResponsiveNavLink.jsx deleted file mode 100644 index 47e0bca..0000000 --- a/resources/js/Components/ResponsiveNavLink.jsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Link } from '@inertiajs/react'; - -export default function ResponsiveNavLink({ - active = false, - className = '', - children, - ...props -}) { - return ( - - {children} - - ); -} diff --git a/resources/js/Components/SecondaryButton.jsx b/resources/js/Components/SecondaryButton.jsx deleted file mode 100644 index ce8b42d..0000000 --- a/resources/js/Components/SecondaryButton.jsx +++ /dev/null @@ -1,22 +0,0 @@ -export default function SecondaryButton({ - type = 'button', - className = '', - disabled, - children, - ...props -}) { - return ( - - ); -} diff --git a/resources/js/Components/TextInput.jsx b/resources/js/Components/TextInput.jsx deleted file mode 100644 index 6d9c3b7..0000000 --- a/resources/js/Components/TextInput.jsx +++ /dev/null @@ -1,30 +0,0 @@ -import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react'; - -export default forwardRef(function TextInput( - { type = 'text', className = '', isFocused = false, ...props }, - ref, -) { - const localRef = useRef(null); - - useImperativeHandle(ref, () => ({ - focus: () => localRef.current?.focus(), - })); - - useEffect(() => { - if (isFocused) { - localRef.current?.focus(); - } - }, [isFocused]); - - return ( - - ); -}); diff --git a/resources/js/Layouts/AuthenticatedLayout.jsx b/resources/js/Layouts/AuthenticatedLayout.jsx deleted file mode 100644 index db7e353..0000000 --- a/resources/js/Layouts/AuthenticatedLayout.jsx +++ /dev/null @@ -1,176 +0,0 @@ -import ApplicationLogo from '@/Components/ApplicationLogo'; -import Dropdown from '@/Components/Dropdown'; -import NavLink from '@/Components/NavLink'; -import ResponsiveNavLink from '@/Components/ResponsiveNavLink'; -import { Link, usePage } from '@inertiajs/react'; -import { useState } from 'react'; - -export default function AuthenticatedLayout({ header, children }) { - const user = usePage().props.auth.user; - - const [showingNavigationDropdown, setShowingNavigationDropdown] = - useState(false); - - return ( -
- - - {header && ( -
-
- {header} -
-
- )} - -
{children}
-
- ); -} diff --git a/resources/js/Layouts/GuestLayout.jsx b/resources/js/Layouts/GuestLayout.jsx deleted file mode 100644 index aaf6135..0000000 --- a/resources/js/Layouts/GuestLayout.jsx +++ /dev/null @@ -1,18 +0,0 @@ -import ApplicationLogo from '@/Components/ApplicationLogo'; -import { Link } from '@inertiajs/react'; - -export default function GuestLayout({ children }) { - return ( -
-
- - - -
- -
- {children} -
-
- ); -} diff --git a/resources/js/Pages/Auth/ConfirmPassword.jsx b/resources/js/Pages/Auth/ConfirmPassword.jsx deleted file mode 100644 index 8dc63ce..0000000 --- a/resources/js/Pages/Auth/ConfirmPassword.jsx +++ /dev/null @@ -1,55 +0,0 @@ -import InputError from '@/Components/InputError'; -import InputLabel from '@/Components/InputLabel'; -import PrimaryButton from '@/Components/PrimaryButton'; -import TextInput from '@/Components/TextInput'; -import GuestLayout from '@/Layouts/GuestLayout'; -import { Head, useForm } from '@inertiajs/react'; - -export default function ConfirmPassword() { - const { data, setData, post, processing, errors, reset } = useForm({ - password: '', - }); - - const submit = (e) => { - e.preventDefault(); - - post(route('password.confirm'), { - onFinish: () => reset('password'), - }); - }; - - return ( - - - -
- This is a secure area of the application. Please confirm your - password before continuing. -
- -
-
- - - setData('password', e.target.value)} - /> - - -
- -
- - Confirm - -
-
-
- ); -} diff --git a/resources/js/Pages/Auth/ForgotPassword.jsx b/resources/js/Pages/Auth/ForgotPassword.jsx deleted file mode 100644 index ab27b28..0000000 --- a/resources/js/Pages/Auth/ForgotPassword.jsx +++ /dev/null @@ -1,55 +0,0 @@ -import InputError from '@/Components/InputError'; -import PrimaryButton from '@/Components/PrimaryButton'; -import TextInput from '@/Components/TextInput'; -import GuestLayout from '@/Layouts/GuestLayout'; -import { Head, useForm } from '@inertiajs/react'; - -export default function ForgotPassword({ status }) { - const { data, setData, post, processing, errors } = useForm({ - email: '', - }); - - const submit = (e) => { - e.preventDefault(); - - post(route('password.email')); - }; - - return ( - - - -
- 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. -
- - {status && ( -
- {status} -
- )} - -
- setData('email', e.target.value)} - /> - - - -
- - Email Password Reset Link - -
- -
- ); -} diff --git a/resources/js/Pages/Auth/Login.jsx b/resources/js/Pages/Auth/Login.jsx deleted file mode 100644 index 18a1d45..0000000 --- a/resources/js/Pages/Auth/Login.jsx +++ /dev/null @@ -1,100 +0,0 @@ -import Checkbox from '@/Components/Checkbox'; -import InputError from '@/Components/InputError'; -import InputLabel from '@/Components/InputLabel'; -import PrimaryButton from '@/Components/PrimaryButton'; -import TextInput from '@/Components/TextInput'; -import GuestLayout from '@/Layouts/GuestLayout'; -import { Head, Link, useForm } from '@inertiajs/react'; - -export default function Login({ status, canResetPassword }) { - const { data, setData, post, processing, errors, reset } = useForm({ - email: '', - password: '', - remember: false, - }); - - const submit = (e) => { - e.preventDefault(); - - post(route('login'), { - onFinish: () => reset('password'), - }); - }; - - return ( - - - - {status && ( -
- {status} -
- )} - -
-
- - - setData('email', e.target.value)} - /> - - -
- -
- - - setData('password', e.target.value)} - /> - - -
- -
- -
- -
- {canResetPassword && ( - - Forgot your password? - - )} - - - Log in - -
-
-
- ); -} diff --git a/resources/js/Pages/Auth/Register.jsx b/resources/js/Pages/Auth/Register.jsx deleted file mode 100644 index 4cd27d6..0000000 --- a/resources/js/Pages/Auth/Register.jsx +++ /dev/null @@ -1,120 +0,0 @@ -import InputError from '@/Components/InputError'; -import InputLabel from '@/Components/InputLabel'; -import PrimaryButton from '@/Components/PrimaryButton'; -import TextInput from '@/Components/TextInput'; -import GuestLayout from '@/Layouts/GuestLayout'; -import { Head, Link, useForm } from '@inertiajs/react'; - -export default function Register() { - const { data, setData, post, processing, errors, reset } = useForm({ - name: '', - email: '', - password: '', - password_confirmation: '', - }); - - const submit = (e) => { - e.preventDefault(); - - post(route('register'), { - onFinish: () => reset('password', 'password_confirmation'), - }); - }; - - return ( - - - -
-
- - - setData('name', e.target.value)} - required - /> - - -
- -
- - - setData('email', e.target.value)} - required - /> - - -
- -
- - - setData('password', e.target.value)} - required - /> - - -
- -
- - - - setData('password_confirmation', e.target.value) - } - required - /> - - -
- -
- - Already registered? - - - - Register - -
-
-
- ); -} diff --git a/resources/js/Pages/Auth/ResetPassword.jsx b/resources/js/Pages/Auth/ResetPassword.jsx deleted file mode 100644 index c2a7a03..0000000 --- a/resources/js/Pages/Auth/ResetPassword.jsx +++ /dev/null @@ -1,94 +0,0 @@ -import InputError from '@/Components/InputError'; -import InputLabel from '@/Components/InputLabel'; -import PrimaryButton from '@/Components/PrimaryButton'; -import TextInput from '@/Components/TextInput'; -import GuestLayout from '@/Layouts/GuestLayout'; -import { Head, useForm } from '@inertiajs/react'; - -export default function ResetPassword({ token, email }) { - const { data, setData, post, processing, errors, reset } = useForm({ - token: token, - email: email, - password: '', - password_confirmation: '', - }); - - const submit = (e) => { - e.preventDefault(); - - post(route('password.store'), { - onFinish: () => reset('password', 'password_confirmation'), - }); - }; - - return ( - - - -
-
- - - setData('email', e.target.value)} - /> - - -
- -
- - - setData('password', e.target.value)} - /> - - -
- -
- - - - setData('password_confirmation', e.target.value) - } - /> - - -
- -
- - Reset Password - -
-
-
- ); -} diff --git a/resources/js/Pages/Auth/VerifyEmail.jsx b/resources/js/Pages/Auth/VerifyEmail.jsx deleted file mode 100644 index e4a97cb..0000000 --- a/resources/js/Pages/Auth/VerifyEmail.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import PrimaryButton from '@/Components/PrimaryButton'; -import GuestLayout from '@/Layouts/GuestLayout'; -import { Head, Link, useForm } from '@inertiajs/react'; - -export default function VerifyEmail({ status }) { - const { post, processing } = useForm({}); - - const submit = (e) => { - e.preventDefault(); - - post(route('verification.send')); - }; - - return ( - - - -
- 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. -
- - {status === 'verification-link-sent' && ( -
- A new verification link has been sent to the email address - you provided during registration. -
- )} - -
-
- - Resend Verification Email - - - - Log Out - -
-
-
- ); -} diff --git a/resources/js/Pages/Dashboard.jsx b/resources/js/Pages/Dashboard.jsx deleted file mode 100644 index 8f50580..0000000 --- a/resources/js/Pages/Dashboard.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'; -import { Head } from '@inertiajs/react'; - -export default function Dashboard() { - return ( - - Dashboard - - } - > - - -
-
-
-
- You're logged in! -
-
-
-
-
- ); -} diff --git a/resources/js/Pages/Profile/Edit.jsx b/resources/js/Pages/Profile/Edit.jsx deleted file mode 100644 index b3a1a9f..0000000 --- a/resources/js/Pages/Profile/Edit.jsx +++ /dev/null @@ -1,39 +0,0 @@ -import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'; -import { Head } from '@inertiajs/react'; -import DeleteUserForm from './Partials/DeleteUserForm'; -import UpdatePasswordForm from './Partials/UpdatePasswordForm'; -import UpdateProfileInformationForm from './Partials/UpdateProfileInformationForm'; - -export default function Edit({ mustVerifyEmail, status }) { - return ( - - Profile - - } - > - - -
-
-
- -
- -
- -
- -
- -
-
-
-
- ); -} diff --git a/resources/js/Pages/Profile/Partials/DeleteUserForm.jsx b/resources/js/Pages/Profile/Partials/DeleteUserForm.jsx deleted file mode 100644 index 350f9da..0000000 --- a/resources/js/Pages/Profile/Partials/DeleteUserForm.jsx +++ /dev/null @@ -1,120 +0,0 @@ -import DangerButton from '@/Components/DangerButton'; -import InputError from '@/Components/InputError'; -import InputLabel from '@/Components/InputLabel'; -import Modal from '@/Components/Modal'; -import SecondaryButton from '@/Components/SecondaryButton'; -import TextInput from '@/Components/TextInput'; -import { useForm } from '@inertiajs/react'; -import { useRef, useState } from 'react'; - -export default function DeleteUserForm({ className = '' }) { - const [confirmingUserDeletion, setConfirmingUserDeletion] = useState(false); - const passwordInput = useRef(); - - const { - data, - setData, - delete: destroy, - processing, - reset, - errors, - clearErrors, - } = useForm({ - password: '', - }); - - const confirmUserDeletion = () => { - setConfirmingUserDeletion(true); - }; - - const deleteUser = (e) => { - e.preventDefault(); - - destroy(route('profile.destroy'), { - preserveScroll: true, - onSuccess: () => closeModal(), - onError: () => passwordInput.current.focus(), - onFinish: () => reset(), - }); - }; - - const closeModal = () => { - setConfirmingUserDeletion(false); - - clearErrors(); - reset(); - }; - - return ( -
-
-

- Delete Account -

- -

- 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. -

-
- - - Delete Account - - - -
-

- Are you sure you want to delete your account? -

- -

- 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. -

- -
- - - - setData('password', e.target.value) - } - className="mt-1 block w-3/4" - isFocused - placeholder="Password" - /> - - -
- -
- - Cancel - - - - Delete Account - -
-
-
-
- ); -} diff --git a/resources/js/Pages/Profile/Partials/UpdatePasswordForm.jsx b/resources/js/Pages/Profile/Partials/UpdatePasswordForm.jsx deleted file mode 100644 index fa2c44a..0000000 --- a/resources/js/Pages/Profile/Partials/UpdatePasswordForm.jsx +++ /dev/null @@ -1,142 +0,0 @@ -import InputError from '@/Components/InputError'; -import InputLabel from '@/Components/InputLabel'; -import PrimaryButton from '@/Components/PrimaryButton'; -import TextInput from '@/Components/TextInput'; -import { Transition } from '@headlessui/react'; -import { useForm } from '@inertiajs/react'; -import { useRef } from 'react'; - -export default function UpdatePasswordForm({ className = '' }) { - const passwordInput = useRef(); - const currentPasswordInput = useRef(); - - const { - data, - setData, - errors, - put, - reset, - processing, - recentlySuccessful, - } = useForm({ - current_password: '', - password: '', - password_confirmation: '', - }); - - const updatePassword = (e) => { - e.preventDefault(); - - put(route('password.update'), { - preserveScroll: true, - onSuccess: () => reset(), - onError: (errors) => { - if (errors.password) { - reset('password', 'password_confirmation'); - passwordInput.current.focus(); - } - - if (errors.current_password) { - reset('current_password'); - currentPasswordInput.current.focus(); - } - }, - }); - }; - - return ( -
-
-

- Update Password -

- -

- Ensure your account is using a long, random password to stay - secure. -

-
- -
-
- - - - setData('current_password', e.target.value) - } - type="password" - className="mt-1 block w-full" - autoComplete="current-password" - /> - - -
- -
- - - setData('password', e.target.value)} - type="password" - className="mt-1 block w-full" - autoComplete="new-password" - /> - - -
- -
- - - - setData('password_confirmation', e.target.value) - } - type="password" - className="mt-1 block w-full" - autoComplete="new-password" - /> - - -
- -
- Save - - -

- Saved. -

-
-
-
-
- ); -} diff --git a/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.jsx b/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.jsx deleted file mode 100644 index d90fd74..0000000 --- a/resources/js/Pages/Profile/Partials/UpdateProfileInformationForm.jsx +++ /dev/null @@ -1,113 +0,0 @@ -import InputError from '@/Components/InputError'; -import InputLabel from '@/Components/InputLabel'; -import PrimaryButton from '@/Components/PrimaryButton'; -import TextInput from '@/Components/TextInput'; -import { Transition } from '@headlessui/react'; -import { Link, useForm, usePage } from '@inertiajs/react'; - -export default function UpdateProfileInformation({ - mustVerifyEmail, - status, - className = '', -}) { - const user = usePage().props.auth.user; - - const { data, setData, patch, errors, processing, recentlySuccessful } = - useForm({ - name: user.name, - email: user.email, - }); - - const submit = (e) => { - e.preventDefault(); - - patch(route('profile.update')); - }; - - return ( -
-
-

- Profile Information -

- -

- Update your account's profile information and email address. -

-
- -
-
- - - setData('name', e.target.value)} - required - isFocused - autoComplete="name" - /> - - -
- -
- - - setData('email', e.target.value)} - required - autoComplete="username" - /> - - -
- - {mustVerifyEmail && user.email_verified_at === null && ( -
-

- Your email address is unverified. - - Click here to re-send the verification email. - -

- - {status === 'verification-link-sent' && ( -
- A new verification link has been sent to your - email address. -
- )} -
- )} - -
- Save - - -

- Saved. -

-
-
-
-
- ); -} diff --git a/resources/js/Pages/Welcome.jsx b/resources/js/Pages/Welcome.jsx deleted file mode 100644 index c3abba2..0000000 --- a/resources/js/Pages/Welcome.jsx +++ /dev/null @@ -1,361 +0,0 @@ -import { Head, Link } from '@inertiajs/react'; - -export default function Welcome({ auth, laravelVersion, phpVersion }) { - const 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'); - }; - - return ( - <> - -
- -
-
-
-
- - - -
- -
- -
-
- -
- Laravel documentation screenshot - Laravel documentation screenshot -
-
- -
-
-
- - - - -
- -
-

- Documentation -

- -

- 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. -

-
-
- - - - -
-
- - -
- - - - - -
- -
-

- Laracasts -

- -

- 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. -

-
- - - - -
- - -
- - - - - - - -
- -
-

- Laravel News -

- -

- 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. -

-
- - - - -
- -
-
- - - - - -
- -
-

- Vibrant Ecosystem -

- -

- Laravel's robust library of - first-party tools and libraries, - such as{' '} - - Forge - - ,{' '} - - Vapor - - ,{' '} - - Nova - - ,{' '} - - Envoyer - - , and{' '} - - Herd - {' '} - help you take your projects to the - next level. Pair them with powerful - open source libraries like{' '} - - Cashier - - ,{' '} - - Dusk - - ,{' '} - - Echo - - ,{' '} - - Horizon - - ,{' '} - - Sanctum - - ,{' '} - - Telescope - - , and more. -

-
-
-
-
- - -
-
-
- - ); -} diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..eb10405 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1 @@ +import './bootstrap'; \ No newline at end of file diff --git a/resources/js/app.jsx b/resources/js/app.jsx deleted file mode 100644 index 9f00218..0000000 --- a/resources/js/app.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import '../css/app.css'; -import './bootstrap'; - -import { createInertiaApp } from '@inertiajs/react'; -import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'; -import { createRoot } from 'react-dom/client'; - -const appName = import.meta.env.VITE_APP_NAME || 'Laravel'; - -createInertiaApp({ - title: (title) => `${title} - ${appName}`, - resolve: (name) => - resolvePageComponent( - `./Pages/${name}.jsx`, - import.meta.glob('./Pages/**/*.jsx'), - ), - setup({ el, App, props }) { - const root = createRoot(el); - - root.render(); - }, - progress: { - color: '#4B5563', - }, -}); diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..99a372d --- /dev/null +++ b/routes/api.php @@ -0,0 +1,21 @@ +user(); +//})->middleware('auth:sanctum'); + +Route::get('/data/{api_token}', [ParticipantController::class, 'index'] )->middleware([ApiToken::class]); + +Route::get('/version/{api_token}', [VersionController::class, 'index'] )->middleware([ApiToken::class]); + +Route::post('/participant/{api_token}', [ParticipantController::class, 'store'] )->middleware([ApiToken::class]); + +Route::post('/volunteer/{api_token}', [VolunteerController::class, 'store'] )->middleware([ApiToken::class]); diff --git a/routes/auth.php b/routes/auth.php index 3926ecf..2e46926 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -11,49 +11,49 @@ 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::middleware('guest')->group(function () { +// Route::get('register', [RegisteredUserController::class, 'create']) +// ->name('register'); - Route::post('register', [RegisteredUserController::class, 'store']); +// Route::post('register', [RegisteredUserController::class, 'store']); - Route::get('login', [AuthenticatedSessionController::class, 'create']) - ->name('login'); +// Route::get('login', [AuthenticatedSessionController::class, 'create']) +// ->name('login'); - Route::post('login', [AuthenticatedSessionController::class, 'store']); +// Route::post('login', [AuthenticatedSessionController::class, 'store']); - Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) - ->name('password.request'); +// Route::get('forgot-password', [PasswordResetLinkController::class, 'create']) +// ->name('password.request'); - Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) - ->name('password.email'); +// Route::post('forgot-password', [PasswordResetLinkController::class, 'store']) +// ->name('password.email'); - Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) - ->name('password.reset'); +// Route::get('reset-password/{token}', [NewPasswordController::class, 'create']) +// ->name('password.reset'); - Route::post('reset-password', [NewPasswordController::class, 'store']) - ->name('password.store'); -}); +// 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::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::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::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::get('confirm-password', [ConfirmablePasswordController::class, 'show']) +// ->name('password.confirm'); - Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); +// Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']); - Route::put('password', [PasswordController::class, 'update'])->name('password.update'); +// Route::put('password', [PasswordController::class, 'update'])->name('password.update'); - Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) - ->name('logout'); -}); +// Route::post('logout', [AuthenticatedSessionController::class, 'destroy']) +// ->name('logout'); +//}); diff --git a/routes/web.php b/routes/web.php index 067c4f5..cde0e7a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -5,23 +5,6 @@ use Illuminate\Foundation\Application; use Illuminate\Support\Facades\Route; use Inertia\Inertia; -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::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'); -}); require __DIR__.'/auth.php';