diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php index 307e949..f2526d0 100644 --- a/app/Http/Controllers/Auth/RegisteredUserController.php +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -10,6 +10,7 @@ use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Validation\Rules; +use Illuminate\Validation\ValidationException; use Inertia\Inertia; use Inertia\Response; @@ -26,13 +27,13 @@ public function create(): Response /** * Handle an incoming registration request. * - * @throws \Illuminate\Validation\ValidationException + * @throws ValidationException */ public function store(Request $request): RedirectResponse { $request->validate([ 'name' => 'required|string|max:255', - 'email' => 'required|string|lowercase|email|max:255|unique:' . User::class, + 'email' => 'required|string|lowercase|email|max:255|unique:'.User::class, 'password' => ['required', 'confirmed', Rules\Password::defaults()], ]); diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php index aed2efd..784765e 100644 --- a/app/Http/Controllers/Auth/VerifyEmailController.php +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -15,13 +15,13 @@ class VerifyEmailController extends Controller public function __invoke(EmailVerificationRequest $request): RedirectResponse { if ($request->user()->hasVerifiedEmail()) { - return redirect()->intended(route('dashboard', absolute: false) . '?verified=1'); + 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'); + return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); } } diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php index c1b3a3e..2b92f65 100644 --- a/app/Http/Requests/Auth/LoginRequest.php +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -80,6 +80,6 @@ public function ensureIsNotRateLimited(): void */ public function throttleKey(): string { - return Str::transliterate(Str::lower($this->string('email')) . '|' . $this->ip()); + return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); } } diff --git a/app/Models/User.php b/app/Models/User.php index 323553d..58bb2a6 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -53,6 +53,6 @@ protected function casts(): array protected function avatar($size = 200): string { - return 'https://www.gravatar.com/avatar/' . md5(strtolower(trim($this->email))) . '?s=' . $size . '&d=mp'; + return 'https://www.gravatar.com/avatar/'.md5(strtolower(trim($this->email))).'?s='.$size.'&d=mp'; } } diff --git a/bootstrap/app.php b/bootstrap/app.php index 8e473ba..113955b 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -6,8 +6,8 @@ return Application::configure(basePath: dirname(__DIR__)) ->withRouting( - web: __DIR__ . '/../routes/web.php', - commands: __DIR__ . '/../routes/console.php', + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { diff --git a/bun.lockb b/bun.lockb index cd2b7db..b74f310 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/composer.json b/composer.json index 7ca3136..b5a3590 100644 --- a/composer.json +++ b/composer.json @@ -13,10 +13,9 @@ "inertiajs/inertia-laravel": "^2.0", "laravel/framework": "^11.9", "laravel/sanctum": "^4.0", - "laravel/tinker": "^2.9", + "laravel/tinker": "^2.10", "spatie/laravel-data": "^4.7", "spatie/laravel-typescript-transformer": "^2.4", - "tightenco/duster": "^3.0", "tightenco/ziggy": "^2.0" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 2fa2f06..f0d8a3b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8e818d0458333ec1a467d9486c82218c", + "content-hash": "72d294b1cef577fa32c4247972033d01", "packages": [ { "name": "amphp/amp", - "version": "v3.0.2", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "138801fb68cfc9c329da8a7b39d01ce7291ee4b0" + "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/138801fb68cfc9c329da8a7b39d01ce7291ee4b0", - "reference": "138801fb68cfc9c329da8a7b39d01ce7291ee4b0", + "url": "https://api.github.com/repos/amphp/amp/zipball/7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", + "reference": "7cf7fef3d667bfe4b2560bc87e67d5387a7bcde9", "shasum": "" }, "require": { @@ -71,7 +71,7 @@ ], "support": { "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v3.0.2" + "source": "https://github.com/amphp/amp/tree/v3.1.0" }, "funding": [ { @@ -79,7 +79,7 @@ "type": "github" } ], - "time": "2024-05-10T21:37:46+00:00" + "time": "2025-01-26T16:07:39+00:00" }, { "name": "amphp/byte-stream", @@ -1684,16 +1684,16 @@ }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", "shasum": "" }, "require": { @@ -1745,7 +1745,7 @@ "keywords": ["guzzlehttp", "uri-template"], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" }, "funding": [ { @@ -1761,7 +1761,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T19:50:20+00:00" + "time": "2025-02-03T10:55:03+00:00" }, { "name": "inertiajs/inertia-laravel", @@ -1879,16 +1879,16 @@ }, { "name": "laravel/framework", - "version": "v11.38.2", + "version": "v11.41.3", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "9d290aa90fcad44048bedca5219d2b872e98772a" + "reference": "3ef433d5865f30a19b6b1be247586068399b59cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/9d290aa90fcad44048bedca5219d2b872e98772a", - "reference": "9d290aa90fcad44048bedca5219d2b872e98772a", + "url": "https://api.github.com/repos/laravel/framework/zipball/3ef433d5865f30a19b6b1be247586068399b59cc", + "reference": "3ef433d5865f30a19b6b1be247586068399b59cc", "shasum": "" }, "require": { @@ -1914,7 +1914,7 @@ "league/flysystem-local": "^3.25.1", "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.4", + "nesbot/carbon": "^2.72.6|^3.8.4", "nunomaduro/termwind": "^2.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", @@ -1989,6 +1989,7 @@ "fakerphp/faker": "^1.24", "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^2.4", + "laravel/pint": "^1.18", "league/flysystem-aws-s3-v3": "^3.25.1", "league/flysystem-ftp": "^3.25.1", "league/flysystem-path-prefixing": "^3.25.1", @@ -2084,20 +2085,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-01-15T00:06:46+00:00" + "time": "2025-01-30T13:25:22+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.3", + "version": "v0.3.4", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea" + "reference": "abeaa2ba4294247d5409490d1ca1bc6248087011" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", - "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", + "url": "https://api.github.com/repos/laravel/prompts/zipball/abeaa2ba4294247d5409490d1ca1bc6248087011", + "reference": "abeaa2ba4294247d5409490d1ca1bc6248087011", "shasum": "" }, "require": { @@ -2111,7 +2112,7 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { - "illuminate/collections": "^10.0|^11.0", + "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", @@ -2137,38 +2138,38 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.3" + "source": "https://github.com/laravel/prompts/tree/v0.3.4" }, - "time": "2024-12-30T15:53:31+00:00" + "time": "2025-01-24T15:41:01+00:00" }, { "name": "laravel/sanctum", - "version": "v4.0.7", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "698064236a46df016e64a7eb059b1414e0b281df" + "reference": "ec1dd9ddb2ab370f79dfe724a101856e0963f43c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/698064236a46df016e64a7eb059b1414e0b281df", - "reference": "698064236a46df016e64a7eb059b1414e0b281df", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/ec1dd9ddb2ab370f79dfe724a101856e0963f43c", + "reference": "ec1dd9ddb2ab370f79dfe724a101856e0963f43c", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/database": "^11.0", - "illuminate/support": "^11.0", + "illuminate/console": "^11.0|^12.0", + "illuminate/contracts": "^11.0|^12.0", + "illuminate/database": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", "php": "^8.2", "symfony/console": "^7.0" }, "require-dev": { "mockery/mockery": "^1.6", - "orchestra/testbench": "^9.0", + "orchestra/testbench": "^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -2195,29 +2196,29 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2024-12-11T16:40:21+00:00" + "time": "2025-01-26T19:34:36+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.1", + "version": "v2.0.2", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8" + "reference": "2e1a362527783bcab6c316aad51bf36c5513ae44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/613b2d4998f85564d40497e05e89cb6d9bd1cbe8", - "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/2e1a362527783bcab6c316aad51bf36c5513ae44", + "reference": "2e1a362527783bcab6c316aad51bf36c5513ae44", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36", + "pestphp/pest": "^2.36|^3.0", "phpstan/phpstan": "^2.0", "symfony/var-dumper": "^6.2.0|^7.0.0" }, @@ -2250,26 +2251,26 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-12-16T15:26:28+00:00" + "time": "2025-01-24T15:42:37+00:00" }, { "name": "laravel/tinker", - "version": "v2.10.0", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.11.1|^0.12.0", "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" @@ -2277,10 +2278,10 @@ "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." }, "type": "library", "extra": { @@ -2305,9 +2306,9 @@ "keywords": ["REPL", "Tinker", "laravel", "psysh"], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.1" }, - "time": "2024-09-23T13:32:56+00:00" + "time": "2025-01-27T14:24:01+00:00" }, { "name": "league/commonmark", @@ -4291,16 +4292,16 @@ }, { "name": "spatie/laravel-data", - "version": "4.11.1", + "version": "4.13.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-data.git", - "reference": "df5b58baebae34475ca35338b4e9a131c9e2a8e0" + "reference": "64fe3024b668c2f0d0ce2ecf666edccc8f8bd55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-data/zipball/df5b58baebae34475ca35338b4e9a131c9e2a8e0", - "reference": "df5b58baebae34475ca35338b4e9a131c9e2a8e0", + "url": "https://api.github.com/repos/spatie/laravel-data/zipball/64fe3024b668c2f0d0ce2ecf666edccc8f8bd55f", + "reference": "64fe3024b668c2f0d0ce2ecf666edccc8f8bd55f", "shasum": "" }, "require": { @@ -4314,10 +4315,10 @@ "fakerphp/faker": "^1.14", "friendsofphp/php-cs-fixer": "^3.0", "inertiajs/inertia-laravel": "^1.2", + "larastan/larastan": "^2.7", "livewire/livewire": "^3.0", "mockery/mockery": "^1.6", "nesbot/carbon": "^2.63", - "nunomaduro/larastan": "^2.0", "orchestra/testbench": "^8.0|^9.0", "pestphp/pest": "^2.31", "pestphp/pest-plugin-laravel": "^2.0", @@ -4355,7 +4356,7 @@ "keywords": ["laravel", "laravel-data", "spatie"], "support": { "issues": "https://github.com/spatie/laravel-data/issues", - "source": "https://github.com/spatie/laravel-data/tree/4.11.1" + "source": "https://github.com/spatie/laravel-data/tree/4.13.0" }, "funding": [ { @@ -4363,31 +4364,31 @@ "type": "github" } ], - "time": "2024-10-23T07:14:53+00:00" + "time": "2025-01-24T15:20:19+00:00" }, { "name": "spatie/laravel-package-tools", - "version": "1.18.2", + "version": "1.19.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "d41c44a7eab604c3eb0cad93210612d4c1429c20" + "reference": "1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d41c44a7eab604c3eb0cad93210612d4c1429c20", - "reference": "d41c44a7eab604c3eb0cad93210612d4c1429c20", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa", + "reference": "1c9c30ac6a6576b8d15c6c37b6cf23d748df2faa", "shasum": "" }, "require": { - "illuminate/contracts": "^9.28|^10.0|^11.0", + "illuminate/contracts": "^9.28|^10.0|^11.0|^12.0", "php": "^8.0" }, "require-dev": { "mockery/mockery": "^1.5", - "orchestra/testbench": "^7.7|^8.0|^9.0", - "pestphp/pest": "^1.22|^2", - "phpunit/phpunit": "^9.5.24|^10.5", + "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0", + "pestphp/pest": "^1.23|^2.1|^3.1", + "phpunit/phpunit": "^9.5.24|^10.5|^11.5", "spatie/pest-plugin-test-time": "^1.1|^2.2" }, "type": "library", @@ -4410,7 +4411,7 @@ "keywords": ["laravel-package-tools", "spatie"], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.18.2" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.19.0" }, "funding": [ { @@ -4418,7 +4419,7 @@ "type": "github" } ], - "time": "2025-01-20T14:14:17+00:00" + "time": "2025-02-06T14:58:20+00:00" }, { "name": "spatie/laravel-typescript-transformer", @@ -4906,16 +4907,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.2.1", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "6150b89186573046167796fa5f3f76601d5145f8" + "reference": "959a74d044a6db21f4caa6d695648dcb5584cb49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/6150b89186573046167796fa5f3f76601d5145f8", - "reference": "6150b89186573046167796fa5f3f76601d5145f8", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/959a74d044a6db21f4caa6d695648dcb5584cb49", + "reference": "959a74d044a6db21f4caa6d695648dcb5584cb49", "shasum": "" }, "require": { @@ -4955,7 +4956,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.2.1" + "source": "https://github.com/symfony/error-handler/tree/v7.2.3" }, "funding": [ { @@ -4971,7 +4972,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:50:44+00:00" + "time": "2025-01-07T09:39:55+00:00" }, { "name": "symfony/event-dispatcher", @@ -5178,16 +5179,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.2.2", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588" + "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62d1a43796ca3fea3f83a8470dfe63a4af3bc588", - "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee1b504b8926198be89d05e5b6fc4c3810c090f0", + "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0", "shasum": "" }, "require": { @@ -5232,7 +5233,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.2.2" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.3" }, "funding": [ { @@ -5248,20 +5249,20 @@ "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.2.2", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306" + "reference": "caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3c432966bd8c7ec7429663105f5a02d7e75b4306", - "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b", + "reference": "caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b", "shasum": "" }, "require": { @@ -5342,7 +5343,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.2.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.3" }, "funding": [ { @@ -5358,20 +5359,20 @@ "type": "tidelift" } ], - "time": "2024-12-31T14:59:40+00:00" + "time": "2025-01-29T07:40:13+00:00" }, { "name": "symfony/mailer", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3", + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3", "shasum": "" }, "require": { @@ -5418,7 +5419,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.2.0" + "source": "https://github.com/symfony/mailer/tree/v7.2.3" }, "funding": [ { @@ -5434,20 +5435,20 @@ "type": "tidelift" } ], - "time": "2024-11-25T15:21:05+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/mime", - "version": "v7.2.1", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283" + "reference": "2fc3b4bd67e4747e45195bc4c98bea4628476204" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7f9617fcf15cb61be30f8b252695ed5e2bfac283", - "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283", + "url": "https://api.github.com/repos/symfony/mime/zipball/2fc3b4bd67e4747e45195bc4c98bea4628476204", + "reference": "2fc3b4bd67e4747e45195bc4c98bea4628476204", "shasum": "" }, "require": { @@ -5495,7 +5496,7 @@ "homepage": "https://symfony.com", "keywords": ["mime", "mime-type"], "support": { - "source": "https://github.com/symfony/mime/tree/v7.2.1" + "source": "https://github.com/symfony/mime/tree/v7.2.3" }, "funding": [ { @@ -5511,7 +5512,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:50:44+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6123,16 +6124,16 @@ }, { "name": "symfony/routing", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", "shasum": "" }, "require": { @@ -6175,7 +6176,7 @@ "homepage": "https://symfony.com", "keywords": ["router", "routing", "uri", "url"], "support": { - "source": "https://github.com/symfony/routing/tree/v7.2.0" + "source": "https://github.com/symfony/routing/tree/v7.2.3" }, "funding": [ { @@ -6191,7 +6192,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T11:08:51+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/service-contracts", @@ -6563,16 +6564,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", "shasum": "" }, "require": { @@ -6615,7 +6616,7 @@ "homepage": "https://symfony.com", "keywords": ["debug", "dump"], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" }, "funding": [ { @@ -6631,78 +6632,20 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:48:14+00:00" - }, - { - "name": "tightenco/duster", - "version": "v3.1.0", - "source": { - "type": "git", - "url": "https://github.com/tighten/duster.git", - "reference": "687ef98dc5c348162ba418012e6277d520c71178" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tighten/duster/zipball/687ef98dc5c348162ba418012e6277d520c71178", - "reference": "687ef98dc5c348162ba418012e6277d520c71178", - "shasum": "" - }, - "require": { - "php": "^8.2.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.65", - "laravel-zero/framework": "^11.0", - "laravel/pint": "^1.18", - "nunomaduro/termwind": "^2.0", - "spatie/invade": "^1.1", - "squizlabs/php_codesniffer": "^3.11", - "tightenco/tlint": "^9.4" - }, - "bin": ["builds/duster"], - "type": "project", - "autoload": { - "psr-4": { - "App\\": "app/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": ["MIT"], - "authors": [ - { - "name": "Matt Stauffer", - "email": "matt@tighten.com", - "homepage": "https://tighten.com", - "role": "Developer" - }, - { - "name": "Anthony Clark", - "email": "anthony@tighten.com", - "homepage": "https://tighten.com", - "role": "Developer" - } - ], - "description": "Automatic configuration for Laravel apps to apply Tighten's standard linting & code standards.", - "homepage": "https://github.com/tighten/duster", - "keywords": ["Code style", "duster", "laravel", "php", "tightenco"], - "support": { - "issues": "https://github.com/tighten/duster/issues", - "source": "https://github.com/tighten/duster" - }, - "time": "2024-12-06T22:30:18+00:00" + "time": "2025-01-17T11:39:41+00:00" }, { "name": "tightenco/ziggy", - "version": "v2.4.2", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/tighten/ziggy.git", - "reference": "6612c8c9b2d5b3e74fd67c58c11465df1273f384" + "reference": "40df446f6053787edb245381c3b3d80b031b5fc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tighten/ziggy/zipball/6612c8c9b2d5b3e74fd67c58c11465df1273f384", - "reference": "6612c8c9b2d5b3e74fd67c58c11465df1273f384", + "url": "https://api.github.com/repos/tighten/ziggy/zipball/40df446f6053787edb245381c3b3d80b031b5fc0", + "reference": "40df446f6053787edb245381c3b3d80b031b5fc0", "shasum": "" }, "require": { @@ -6748,9 +6691,9 @@ "keywords": ["Ziggy", "javascript", "laravel", "routes"], "support": { "issues": "https://github.com/tighten/ziggy/issues", - "source": "https://github.com/tighten/ziggy/tree/v2.4.2" + "source": "https://github.com/tighten/ziggy/tree/v2.5.1" }, - "time": "2025-01-02T20:06:52+00:00" + "time": "2025-01-31T19:23:01+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7201,16 +7144,16 @@ }, { "name": "filp/whoops", - "version": "2.16.0", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + "reference": "075bc0c26631110584175de6523ab3f1652eb28e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e", + "reference": "075bc0c26631110584175de6523ab3f1652eb28e", "shasum": "" }, "require": { @@ -7251,7 +7194,7 @@ "keywords": ["error", "exception", "handling", "library", "throwable", "whoops"], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.16.0" + "source": "https://github.com/filp/whoops/tree/2.17.0" }, "funding": [ { @@ -7259,7 +7202,7 @@ "type": "github" } ], - "time": "2024-09-25T12:00:00+00:00" + "time": "2025-01-25T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -7416,28 +7359,28 @@ }, { "name": "laravel/sail", - "version": "v1.40.0", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "237e70656d8eface4839de51d101284bd5d0cf71" + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/237e70656d8eface4839de51d101284bd5d0cf71", - "reference": "237e70656d8eface4839de51d101284bd5d0cf71", + "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", "shasum": "" }, "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0", - "illuminate/support": "^9.52.16|^10.0|^11.0", + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0", "symfony/yaml": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10" }, "bin": ["bin/sail"], @@ -7466,7 +7409,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2025-01-13T16:57:11+00:00" + "time": "2025-01-24T15:45:36+00:00" }, { "name": "mockery/mockery", @@ -9279,16 +9222,16 @@ }, { "name": "symfony/yaml", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22" + "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec", + "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec", "shasum": "" }, "require": { @@ -9325,7 +9268,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.0" + "source": "https://github.com/symfony/yaml/tree/v7.2.3" }, "funding": [ { @@ -9341,7 +9284,7 @@ "type": "tidelift" } ], - "time": "2024-10-23T06:56:12+00:00" + "time": "2025-01-07T12:55:42+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", diff --git a/config/cache.php b/config/cache.php index 2dbc452..925f7d2 100644 --- a/config/cache.php +++ b/config/cache.php @@ -103,6 +103,6 @@ | */ - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache_'), + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'), ]; diff --git a/config/database.php b/config/database.php index 25e064c..125949e 100644 --- a/config/database.php +++ b/config/database.php @@ -147,7 +147,7 @@ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), ], 'default' => [ diff --git a/config/filesystems.php b/config/filesystems.php index 8009a25..c5f244d 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -39,7 +39,7 @@ 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), - 'url' => env('APP_URL') . '/storage', + 'url' => env('APP_URL').'/storage', 'visibility' => 'public', 'throw' => false, ], diff --git a/config/logging.php b/config/logging.php index 54bb171..8d94292 100644 --- a/config/logging.php +++ b/config/logging.php @@ -89,7 +89,7 @@ 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), - 'connectionString' => 'tls://' . env('PAPERTRAIL_URL') . ':' . env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), ], 'processors' => [PsrLogMessageProcessor::class], ], diff --git a/config/session.php b/config/session.php index 4683a9b..f0b6541 100644 --- a/config/session.php +++ b/config/session.php @@ -129,7 +129,7 @@ 'cookie' => env( 'SESSION_COOKIE', - Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' + Str::slug(env('APP_NAME', 'laravel'), '_').'_session' ), /* diff --git a/package.json b/package.json index 2da7914..ce94f48 100644 --- a/package.json +++ b/package.json @@ -9,40 +9,40 @@ "preview": "tsc && npm run build && php artisan inertia:start-ssr" }, "devDependencies": { - "@commitlint/cli": "^19.6.1", - "@commitlint/config-conventional": "^19.6.0", - "@inertiajs/react": "^2.0.2", + "@commitlint/cli": "^19.7.1", + "@commitlint/config-conventional": "^19.7.1", + "@inertiajs/react": "^2.0.3", "@release-it/bumper": "^6.0.1", "@release-it/conventional-changelog": "^9.0.4", - "@types/react": "^19.0.7", + "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", "axios": "^1.7.9", "husky": "^9.1.7", - "laravel-vite-plugin": "^1.1.1", + "laravel-vite-plugin": "^1.2.0", "prettier": "^3.4.2", "prettier-plugin-organize-imports": "^4.1.0", - "prettier-plugin-tailwindcss": "^0.6.10", + "prettier-plugin-tailwindcss": "^0.6.11", "release-it": "^17.11.0", - "tailwindcss": "^4.0.0-beta.9", + "tailwindcss": "^4.0.4", "typescript": "^5.7.3", "vite-plugin-watch": "^0.3.1" }, "dependencies": { - "@tailwindcss/vite": "^4.0.0-beta.9", - "@types/node": "^22.10.7", + "@tailwindcss/vite": "^4.0.4", + "@types/node": "^22.13.1", "clsx": "^2.1.1", - "justd-icons": "^1.10.21", - "motion": "^12.0.0", + "justd-icons": "^1.10.24", + "motion": "^12.4.0", "react": "^19.0.0", "react-aria-components": "^1.6.0", "react-dom": "^19.0.0", - "sonner": "^1.7.2", + "sonner": "^1.7.4", "tailwind-merge": "^2.6.0", "tailwind-variants": "^0.3.1", "tailwindcss-animate": "^1.0.7", - "vite": "^6.0.11" + "vite": "^6.1.0" }, "version": "1.3.14" } diff --git a/public/index.php b/public/index.php index 74a0960..947d989 100644 --- a/public/index.php +++ b/public/index.php @@ -5,13 +5,13 @@ define('LARAVEL_START', microtime(true)); // Determine if the application is in maintenance mode... -if (file_exists($maintenance = __DIR__ . '/../storage/framework/maintenance.php')) { +if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) { require $maintenance; } // Register the Composer autoloader... -require __DIR__ . '/../vendor/autoload.php'; +require __DIR__.'/../vendor/autoload.php'; // Bootstrap Laravel and handle the request... -(require_once __DIR__ . '/../bootstrap/app.php') +(require_once __DIR__.'/../bootstrap/app.php') ->handleRequest(Request::capture()); diff --git a/resources/css/app.css b/resources/css/app.css index c42577a..970fb0e 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -4,9 +4,7 @@ @variant dark (&:is(.dark *)); @theme { - --font-sans: 'var(--font-sans)', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol', 'Noto Color Emoji'; - --font-mono: var(--font-mono), ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + --font-sans: 'Figtree', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; --color-border: var(--border); @@ -52,66 +50,52 @@ --color-chart-3: var(--chart-3); --color-chart-4: var(--chart-4); --color-chart-5: var(--chart-5); - - --animate-blink: blink 1.4s both infinite; - - @keyframes blink { - 0% { - opacity: 0.2; - } - 20% { - opacity: 1; - } - 100% { - opacity: 0.2; - } - } } @layer base { :root { - --bg: oklch(1 0 0); - --fg: oklch(0.141 0.005 285.823); + --bg: var(--color-white); + --fg: var(--color-zinc-950); - --primary: oklch(0.546 0.245 262.881); - --primary-fg: oklch(1 0 0); + --primary: var(--color-blue-600); + --primary-fg: var(--color-white); - --secondary: oklch(0.92 0.004 286.32); - --secondary-fg: oklch(0.141 0.005 285.823); + --secondary: var(--color-zinc-100); + --secondary-fg: var(--color-zinc-950); - --overlay: oklch(1 0 0); - --overlay-fg: oklch(0.141 0.005 285.823); + --overlay: var(--color-white); + --overlay-fg: var(--color-zinc-950); - --accent: oklch(0.546 0.245 262.881); - --accent-fg: oklch(1 0 0); + --accent: var(--color-blue-600); + --accent-fg: var(--color-white); - --muted: oklch(0.967 0.001 286.375); - --muted-fg: oklch(0.552 0.016 285.938); + --muted: var(--color-zinc-100); + --muted-fg: var(--color-zinc-600); - --success: oklch(0.596 0.145 163.225); - --success-fg: oklch(1 0 0); + --success: var(--color-emerald-600); + --success-fg: var(--color-white); - --warning: oklch(0.828 0.189 84.429); - --warning-fg: oklch(0.279 0.077 45.635); + --warning: var(--color-amber-400); + --warning-fg: var(--color-amber-950); - --danger: oklch(0.577 0.245 27.325); - --danger-fg: oklch(0.971 0.013 17.38); + --danger: var(--color-red-600); + --danger-fg: var(--color-red-50); - --border: oklch(0.911 0.006 286.286); - --input: oklch(0.871 0.006 286.286); - --ring: oklch(0.546 0.245 262.881); + --border: var(--color-zinc-200); + --input: var(--color-zinc-300); + --ring: var(--color-blue-600); - --navbar: oklch(0.967 0.001 286.375); - --navbar-fg: oklch(0.141 0.005 285.823); + --navbar: var(--color-zinc-50); + --navbar-fg: var(--color-zinc-950); - --sidebar: oklch(0.967 0.001 286.375); - --sidebar-fg: oklch(0.141 0.005 285.823); + --sidebar: var(--color-zinc-50); + --sidebar-fg: var(--color-zinc-950); - --chart-1: oklch(0.546 0.245 262.881); - --chart-2: oklch(0.707 0.165 254.624); - --chart-3: oklch(0.809 0.105 251.813); - --chart-4: oklch(0.882 0.059 254.128); - --chart-5: oklch(0.932 0.032 255.585); + --chart-1: var(--color-blue-600); + --chart-2: var(--color-blue-400); + --chart-3: var(--color-blue-300); + --chart-4: var(--color-blue-200); + --chart-5: var(--color-blue-100); --radius-lg: 0.5rem; --radius-xs: calc(var(--radius-lg) * 0.5); @@ -124,48 +108,48 @@ } .dark { - --bg: oklch(0.091 0.005 285.823); - --fg: oklch(0.985 0 0); + --bg: var(--color-zinc-950); + --fg: var(--color-zinc-50); - --primary: oklch(0.546 0.245 262.881); - --primary-fg: oklch(1 0 0); + --primary: var(--color-blue-600); + --primary-fg: var(--color-white); - --secondary: oklch(0.234 0.006 286.033); - --secondary-fg: oklch(0.985 0 0); + --secondary: oklch(0.244 0.006 286.033); + --secondary-fg: var(--color-zinc-50); - --accent: oklch(0.546 0.245 262.881); - --accent-fg: oklch(1 0 0); + --accent: var(--color-blue-600); + --accent-fg: var(--color-white); - --muted: oklch(0.21 0.006 285.885); - --muted-fg: oklch(0.705 0.015 286.067); + --muted: var(--color-zinc-900); + --muted-fg: var(--color-zinc-400); --overlay: oklch(0.17 0.006 285.885); - --overlay-fg: oklch(0.985 0 0); + --overlay-fg: var(--color-zinc-50); - --success: oklch(0.596 0.145 163.225); - --success-fg: oklch(1 0 0); + --success: var(--color-emerald-600); + --success-fg: var(--color-white); - --warning: oklch(0.828 0.189 84.429); - --warning-fg: oklch(0.279 0.077 45.635); + --warning: var(--color-amber-400); + --warning-fg: var(--color-amber-950); - --danger: oklch(0.577 0.245 27.325); - --danger-fg: oklch(0.971 0.013 17.38); + --danger: var(--color-red-600); + --danger-fg: var(--color-red-50); - --border: oklch(0.274 0.006 286.033); - --input: oklch(0.274 0.006 286.033); - --ring: oklch(0.546 0.245 262.881); + --border: oklch(0.27 0.013 285.805); + --input: oklch(0.29 0.013 285.805); + --ring: var(--color-blue-600); --navbar: oklch(0.17 0.006 285.885); - --navbar-fg: oklch(0.985 0 0); + --navbar-fg: var(--color-zinc-50); --sidebar: oklch(0.16 0.006 285.885); - --sidebar-fg: oklch(0.985 0 0); + --sidebar-fg: var(--color-zinc-50); - --chart-1: oklch(0.488 0.243 264.376); - --chart-2: oklch(0.623 0.214 259.815); - --chart-3: oklch(0.707 0.165 254.624); - --chart-4: oklch(0.809 0.105 251.813); - --chart-5: oklch(0.882 0.059 254.128); + --chart-1: var(--color-blue-700); + --chart-2: var(--color-blue-500); + --chart-3: var(--color-blue-400); + --chart-4: var(--color-blue-300); + --chart-5: var(--color-blue-200); } } diff --git a/resources/js/app.tsx b/resources/js/app.tsx index dbab5b7..9ee4d5c 100644 --- a/resources/js/app.tsx +++ b/resources/js/app.tsx @@ -1,9 +1,9 @@ import '../css/app.css'; import './bootstrap'; +import { Providers } from '@/components/providers'; import { Ziggy } from '@/ziggy'; import { createInertiaApp } from '@inertiajs/react'; -import { Providers } from 'components/providers'; import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers'; import { createRoot, hydrateRoot } from 'react-dom/client'; import { useRoute } from 'ziggy-js'; diff --git a/resources/js/components/footer.tsx b/resources/js/components/footer.tsx index b2f81d7..4dee121 100644 --- a/resources/js/components/footer.tsx +++ b/resources/js/components/footer.tsx @@ -1,4 +1,4 @@ -import { ThemeToggle } from 'components/theme-toggle'; +import { ThemeSwitcher } from '@/components/theme-switcher'; import { SVGProps } from 'react'; import { Button, Link, TextField } from 'ui'; @@ -161,6 +161,7 @@ export function Footer() {

- +
diff --git a/resources/js/components/providers.tsx b/resources/js/components/providers.tsx index 7d70585..dc5b4be 100644 --- a/resources/js/components/providers.tsx +++ b/resources/js/components/providers.tsx @@ -1,5 +1,5 @@ +import { ThemeProvider } from '@/components/theme-provider'; import { router } from '@inertiajs/react'; -import { ThemeProvider } from 'components/theme-provider'; import React from 'react'; import { RouterProvider } from 'react-aria-components'; diff --git a/resources/js/components/theme-switcher.tsx b/resources/js/components/theme-switcher.tsx index 242598c..1e4034f 100644 --- a/resources/js/components/theme-switcher.tsx +++ b/resources/js/components/theme-switcher.tsx @@ -1,19 +1,31 @@ -import { useTheme } from 'components/theme-provider'; -import { IconMoon, IconSun } from 'justd-icons'; -import { Button } from 'ui'; +import { useTheme } from '@/components/theme-provider'; +import { IconDeviceDesktop2, IconMoon, IconSun } from 'justd-icons'; +import { Button, composeTailwindRenderProps } from 'ui'; -export function ThemeSwitcher() { +export function ThemeSwitcher({ + shape = 'square', + appearance = 'plain', + className, + ...props +}: React.ComponentProps) { const { theme, setTheme } = useTheme(); + + const toggleTheme = () => { + const nextTheme = theme === 'light' ? 'dark' : theme === 'dark' ? 'system' : 'light'; + setTheme(nextTheme); + }; + return ( ); } diff --git a/resources/js/components/theme-toggle.tsx b/resources/js/components/theme-toggle.tsx deleted file mode 100644 index 5319d10..0000000 --- a/resources/js/components/theme-toggle.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { cn } from '@/utils/classes'; -import { useTheme } from 'components/theme-provider'; -import { IconDeviceDesktop, IconMoon, IconSun } from 'justd-icons'; -import { Button } from 'ui'; - -export function ThemeToggle() { - const { theme, setTheme } = useTheme(); - - return ( -
- - - -
- ); -} diff --git a/resources/js/components/ui/avatar.tsx b/resources/js/components/ui/avatar.tsx index 70da228..3d0eda8 100644 --- a/resources/js/components/ui/avatar.tsx +++ b/resources/js/components/ui/avatar.tsx @@ -1,4 +1,4 @@ -import { type VariantProps, tv } from 'tailwind-variants'; +import { tv, type VariantProps } from 'tailwind-variants'; const avatar = tv({ base: [ diff --git a/resources/js/components/ui/dropdown.tsx b/resources/js/components/ui/dropdown.tsx index a2b3458..4898dfa 100644 --- a/resources/js/components/ui/dropdown.tsx +++ b/resources/js/components/ui/dropdown.tsx @@ -2,6 +2,7 @@ import { cn } from '@/utils/classes'; import { IconCheck } from 'justd-icons'; import { Collection, + composeRenderProps, Header, ListBoxItem as ListBoxItemPrimitive, type ListBoxItemProps, @@ -10,8 +11,7 @@ import { Separator, type SeparatorProps, Text, - type TextProps, - composeRenderProps + type TextProps } from 'react-aria-components'; import { tv } from 'tailwind-variants'; import { Keyboard } from './keyboard'; @@ -19,9 +19,9 @@ import { Keyboard } from './keyboard'; const dropdownItemStyles = tv({ base: [ 'col-span-full grid grid-cols-[auto_1fr_1.5rem_0.5rem_auto] not-has-data-[slot=dropdown-item-details]:items-center has-data-[slot=dropdown-item-details]:**:data-[slot=checked-icon]:mt-[1.5px] supports-[grid-template-columns:subgrid]:grid-cols-subgrid', - 'group relative cursor-default select-none rounded-[calc(var(--radius-lg)-1px)] px-2.5 py-1.5 forced-color:text-[Highlight] text-base text-fg outline outline-0 forced-color-adjust-none sm:text-sm/6 forced-colors:text-[LinkText]', + 'group relative cursor-default select-none rounded-[calc(var(--radius-lg)-1px)] px-[calc(var(--spacing)*2.3)] py-[calc(var(--spacing)*1.3)] forced-color:text-[Highlight] text-base text-fg outline-0 forced-color-adjust-none sm:text-sm/6 forced-colors:text-[LinkText]', '**:data-[slot=avatar]:*:mr-2 **:data-[slot=avatar]:*:size-6 **:data-[slot=avatar]:mr-2 **:data-[slot=avatar]:size-6 sm:**:data-[slot=avatar]:*:size-5 sm:**:data-[slot=avatar]:size-5', - 'data-danger:**:data-[slot=icon]:text-danger/70 **:data-[slot=icon]:size-4 **:data-[slot=icon]:shrink-0 **:data-[slot=icon]:text-muted-fg data-focused:data-danger:**:data-[slot=icon]:text-danger-fg', + 'data-danger:**:data-[slot=icon]:text-danger/60 **:data-[slot=icon]:size-4 **:data-[slot=icon]:shrink-0 **:data-[slot=icon]:text-muted-fg data-focused:data-danger:**:data-[slot=icon]:text-danger', 'data-[slot=menu-radio]:*:data-[slot=icon]:size-3 *:data-[slot=icon]:mr-2', 'forced-colors:**:data-[slot=icon]:text-[CanvasText] forced-colors:group-data-focused:**:data-[slot=icon]:text-[Canvas] ', '[&>[slot=label]+[data-slot=icon]]:absolute [&>[slot=label]+[data-slot=icon]]:right-0' @@ -38,7 +38,7 @@ const dropdownItemStyles = tv({ true: [ '**:data-[slot=icon]:text-accent-fg **:[kbd]:text-accent-fg', 'bg-accent text-accent-fg forced-colors:bg-[Highlight] forced-colors:text-[HighlightText]', - 'data-danger:bg-danger data-danger:text-danger-fg', + 'data-danger:bg-danger/10 data-danger:text-danger', 'data-[slot=description]:text-accent-fg data-[slot=label]:text-accent-fg [&_.text-muted-fg]:text-accent-fg/80' ] } @@ -47,10 +47,8 @@ const dropdownItemStyles = tv({ const dropdownSectionStyles = tv({ slots: { - section: - "first:-mt-[5px] xss3 col-span-full grid grid-cols-[auto_1fr] gap-y-0.5 after:block after:h-[4px] after:content-['']", - header: - '-top-[5px] -mb-0.5 -mx-1.5 sticky z-10 col-span-full min-w-(--trigger-width) truncate border-y bg-bg px-4 py-2 font-medium text-muted-fg text-sm supports-[-moz-appearance:none]:bg-bg [&+*]:mt-1' + section: 'col-span-full grid grid-cols-[auto_1fr]', + header: 'col-span-full px-2.5 py-1 font-medium text-muted-fg text-sm sm:text-xs' } }); @@ -84,7 +82,7 @@ const DropdownItem = ({ className, ...props }: DropdownItemProps) => { {composeRenderProps(props.children, (children, { isSelected }) => ( <> {isSelected && } - {children} + {typeof children === 'string' ? {children} : children} ))} @@ -147,11 +145,11 @@ const DropdownKeyboard = ({ className, ...props }: React.ComponentProps, VariantProps { - className?: string; - debug?: boolean; -} - -const Grid = ({ className, gap, gapX, gapY, flow, columns, rows, ...props }: GridProps) => { - return ( -
- {props.children} -
- ); -}; - -const gridItemStyles = tv( - { - base: 'grid-cell data-focused:outline-hidden', - variants: { - colSpan: { - auto: 'col-auto', - 1: 'col-span-1', - 2: 'col-span-2', - 3: 'col-span-3', - 4: 'col-span-4', - 5: 'col-span-5', - 6: 'col-span-6', - 7: 'col-span-7', - 8: 'col-span-8', - 9: 'col-span-9', - 10: 'col-span-10', - 11: 'col-span-11', - 12: 'col-span-12', - full: 'col-span-full' - }, - colStart: { - 1: 'col-start-1', - 2: 'col-start-2', - 3: 'col-start-3', - 4: 'col-start-4', - 5: 'col-start-5', - 6: 'col-start-6', - 7: 'col-start-7', - 8: 'col-start-8', - 9: 'col-start-9', - 10: 'col-start-10', - 11: 'col-start-11', - 12: 'col-start-12', - 13: 'col-start-13', - auto: 'col-start-auto' - }, - colEnd: { - 1: 'col-end-1', - 2: 'col-end-2', - 3: 'col-end-3', - 4: 'col-end-4', - 5: 'col-end-5', - 6: 'col-end-6', - 7: 'col-end-7', - 8: 'col-end-8', - 9: 'col-end-9', - 10: 'col-end-10', - 11: 'col-end-11', - 12: 'col-end-12', - 13: 'col-end-13', - auto: 'col-end-auto' - }, - rowSpan: { - auto: 'row-auto', - 1: 'row-span-1', - 2: 'row-span-2', - 3: 'row-span-3', - 4: 'row-span-4', - 5: 'row-span-5', - 6: 'row-span-6', - 7: 'row-span-7', - 8: 'row-span-8', - 9: 'row-span-9', - 10: 'row-span-10', - 11: 'row-span-11', - 12: 'row-span-12', - full: 'row-span-full' - }, - rowStart: { - 1: 'row-start-1', - 2: 'row-start-2', - 3: 'row-start-3', - 4: 'row-start-4', - 5: 'row-start-5', - 6: 'row-start-6', - 7: 'row-start-7', - 8: 'row-start-8', - 9: 'row-start-9', - 10: 'row-start-10', - 11: 'row-start-11', - 12: 'row-start-12', - 13: 'row-start-13', - auto: 'row-start-auto' - }, - rowEnd: { - 1: 'row-end-1', - 2: 'row-end-2', - 3: 'row-end-3', - 4: 'row-end-4', - 5: 'row-end-5', - 6: 'row-end-6', - 7: 'row-end-7', - 8: 'row-end-8', - 9: 'row-end-9', - 10: 'row-end-10', - 11: 'row-end-11', - 12: 'row-end-12', - 13: 'row-end-13', - auto: 'row-end-auto' - } - } - }, - { - responsiveVariants: ['sm', 'md', 'lg', 'xl', '2xl'] - } -); - -interface GridItemProps extends React.HTMLAttributes, VariantProps { - className?: string; -} - -const GridItem = ({ - children, - className, - colSpan, - rowSpan, - colStart, - colEnd, - rowStart, - rowEnd, - ...props -}: GridItemProps) => { - return ( -
- {children} -
- ); -}; - -Grid.Item = GridItem; - -export { Grid, gridItemStyles, gridStyles }; diff --git a/resources/js/components/ui/index.ts b/resources/js/components/ui/index.ts index 14b13de..01a66c0 100644 --- a/resources/js/components/ui/index.ts +++ b/resources/js/components/ui/index.ts @@ -7,7 +7,6 @@ export * from './dialog'; export * from './dropdown'; export * from './field'; export * from './form'; -export * from './grid'; export * from './heading'; export * from './keyboard'; export * from './link'; diff --git a/resources/js/components/ui/link.tsx b/resources/js/components/ui/link.tsx index 4fe65c2..117e0b1 100644 --- a/resources/js/components/ui/link.tsx +++ b/resources/js/components/ui/link.tsx @@ -1,4 +1,4 @@ -import { Link as LinkPrimitive, type LinkProps as LinkPrimitiveProps, composeRenderProps } from 'react-aria-components'; +import { composeRenderProps, Link as LinkPrimitive, type LinkProps as LinkPrimitiveProps } from 'react-aria-components'; import { tv } from 'tailwind-variants'; import { focusButtonStyles } from './primitive'; diff --git a/resources/js/components/ui/list-box.tsx b/resources/js/components/ui/list-box.tsx index 900614b..1e460ea 100644 --- a/resources/js/components/ui/list-box.tsx +++ b/resources/js/components/ui/list-box.tsx @@ -1,6 +1,6 @@ import { IconCheck, IconHamburger } from 'justd-icons'; import type { ListBoxItemProps as ListBoxItemPrimitiveProps, ListBoxProps } from 'react-aria-components'; -import { ListBoxItem, ListBox as ListBoxPrimitive, composeRenderProps } from 'react-aria-components'; +import { composeRenderProps, ListBoxItem, ListBox as ListBoxPrimitive } from 'react-aria-components'; import { tv } from 'tailwind-variants'; import { cn } from '@/utils/classes'; diff --git a/resources/js/components/ui/menu.tsx b/resources/js/components/ui/menu.tsx index 48dc403..59e67ad 100644 --- a/resources/js/components/ui/menu.tsx +++ b/resources/js/components/ui/menu.tsx @@ -12,13 +12,13 @@ import type { import { Button, Collection, + composeRenderProps, Header, - MenuItem, + MenuItem as MenuItemPrimitive, Menu as MenuPrimitive, - MenuSection, + MenuSection as MenuSectionPrimitive, MenuTrigger as MenuTriggerPrimitive, - SubmenuTrigger as SubmenuTriggerPrimitive, - composeRenderProps + SubmenuTrigger as SubmenuTriggerPrimitive } from 'react-aria-components'; import type { VariantProps } from 'tailwind-variants'; import { tv } from 'tailwind-variants'; @@ -26,11 +26,11 @@ import { tv } from 'tailwind-variants'; import { cn } from '@/utils/classes'; import { DropdownItemDetails, + dropdownItemStyles, DropdownKeyboard, DropdownLabel, - DropdownSeparator, - dropdownItemStyles, - dropdownSectionStyles + dropdownSectionStyles, + DropdownSeparator } from './dropdown'; import { Popover } from './popover'; @@ -52,7 +52,7 @@ const Menu = ({ respectScreen = true, ...props }: MenuProps) => { ); }; -const SubMenu = ({ delay = 0, ...props }) => ( +const MenuSubMenu = ({ delay = 0, ...props }) => ( {props.children} @@ -60,11 +60,9 @@ const SubMenu = ({ delay = 0, ...props }) => ( const menuStyles = tv({ slots: { - menu: 'grid max-h-[calc(var(--visual-viewport-height)-10rem)] grid-cols-[auto_1fr] overflow-auto rounded-xl p-1 outline-hidden [clip-path:inset(0_0_0_0_round_calc(var(--radius-lg)-2px))] sm:max-h-[inherit]', + menu: "grid max-h-[calc(var(--visual-viewport-height)-10rem)] grid-cols-[auto_1fr] overflow-auto rounded-xl p-1 outline-hidden [clip-path:inset(0_0_0_0_round_calc(var(--radius-lg)-2px))] sm:max-h-[inherit] *:[[role='group']+[role=group]]:mt-4 *:[[role='group']+[role=separator]]:mt-1", popover: 'z-50 p-0 shadow-xs outline-hidden sm:min-w-40', - trigger: [ - 'relative inline text-left data-focused:outline-hidden data-pressed:outline-hidden data-focus-visible:ring-1 data-focus-visible:ring-primary' - ] + trigger: ['relative inline text-left outline-hidden data-focus-visible:ring-1 data-focus-visible:ring-primary'] } }); @@ -113,16 +111,16 @@ interface MenuItemProps extends MenuItemPrimitiveProps, VariantProps { +const MenuItem = ({ className, isDanger = false, children, ...props }: MenuItemProps) => { const textValue = props.textValue || (typeof children === 'string' ? children : undefined); return ( - dropdownItemStyles({ ...renderProps, className: renderProps.hasSubmenu ? cn([ - 'data-open:data-danger:bg-danger/20 data-open:data-danger:text-danger', + 'data-open:data-danger:bg-danger/10 data-open:data-danger:text-danger', 'data-open:bg-accent data-open:text-accent-fg data-open:*:data-[slot=icon]:text-accent-fg data-open:*:[.text-muted-fg]:text-accent-fg', className ]) @@ -140,7 +138,7 @@ const Item = ({ className, isDanger = false, children, ...props }: MenuItemProps {values.selectionMode === 'single' && ( @@ -156,7 +154,7 @@ const Item = ({ className, isDanger = false, children, ...props }: MenuItemProps {values.hasSubmenu && } )} - + ); }; @@ -168,7 +166,7 @@ const MenuHeader = ({ className, separator = false, ...props }: MenuHeaderProps)
extends MenuSectionPrimitiveProps { title?: string; } -const Section = ({ className, ref, ...props }: MenuSectionProps) => { +const MenuSection = ({ className, ref, ...props }: MenuSectionProps) => { return ( - + {'title' in props &&
{props.title}
} {props.children} -
+ ); }; -Menu.Keyboard = DropdownKeyboard; -Menu.Primitive = MenuPrimitive; +const MenuSeparator = DropdownSeparator; +const MenuItemDetails = DropdownItemDetails; +const MenuKeyboard = DropdownKeyboard; +const MenuLabel = DropdownLabel; + +Menu.Keyboard = MenuKeyboard; Menu.Content = MenuContent; Menu.Header = MenuHeader; -Menu.Item = Item; -Menu.Content = MenuContent; -Menu.Section = Section; -Menu.Separator = DropdownSeparator; +Menu.Item = MenuItem; +Menu.Section = MenuSection; +Menu.Separator = MenuSeparator; +Menu.ItemDetails = MenuItemDetails; +Menu.Label = MenuLabel; Menu.Trigger = MenuTrigger; -Menu.ItemDetails = DropdownItemDetails; -Menu.Submenu = SubMenu; -Menu.Label = DropdownLabel; +Menu.Submenu = MenuSubMenu; export { Menu }; export type { MenuContentProps, MenuItemProps, MenuProps, MenuSectionProps, MenuTriggerProps }; diff --git a/resources/js/components/ui/modal.tsx b/resources/js/components/ui/modal.tsx index bed58cc..1bc88a0 100644 --- a/resources/js/components/ui/modal.tsx +++ b/resources/js/components/ui/modal.tsx @@ -1,6 +1,6 @@ import type { DialogProps, DialogTriggerProps, ModalOverlayProps } from 'react-aria-components'; -import { DialogTrigger, ModalOverlay, Modal as ModalPrimitive, composeRenderProps } from 'react-aria-components'; -import { type VariantProps, tv } from 'tailwind-variants'; +import { composeRenderProps, DialogTrigger, ModalOverlay, Modal as ModalPrimitive } from 'react-aria-components'; +import { tv, type VariantProps } from 'tailwind-variants'; import { Dialog } from './dialog'; diff --git a/resources/js/components/ui/navbar.tsx b/resources/js/components/ui/navbar.tsx index 4025809..de9478a 100644 --- a/resources/js/components/ui/navbar.tsx +++ b/resources/js/components/ui/navbar.tsx @@ -3,8 +3,8 @@ import { createContext, use, useCallback, useId, useMemo, useState } from 'react import { IconHamburger } from 'justd-icons'; import { LayoutGroup, motion } from 'motion/react'; import type { LinkProps } from 'react-aria-components'; -import { Link, composeRenderProps } from 'react-aria-components'; -import { type VariantProps, tv } from 'tailwind-variants'; +import { composeRenderProps, Link } from 'react-aria-components'; +import { tv, type VariantProps } from 'tailwind-variants'; import { cn } from '@/utils/classes'; import { useMediaQuery } from '@/utils/use-media-query'; diff --git a/resources/js/components/ui/pagination.tsx b/resources/js/components/ui/pagination.tsx index e7a24a5..dc214aa 100644 --- a/resources/js/components/ui/pagination.tsx +++ b/resources/js/components/ui/pagination.tsx @@ -6,7 +6,7 @@ import { IconDotsHorizontal } from 'justd-icons'; import type { ListBoxItemProps, ListBoxProps, ListBoxSectionProps } from 'react-aria-components'; -import { ListBox, ListBoxItem, ListBoxSection, Separator, composeRenderProps } from 'react-aria-components'; +import { composeRenderProps, ListBox, ListBoxItem, ListBoxSection, Separator } from 'react-aria-components'; import { cn } from '@/utils/classes'; import { tv } from 'tailwind-variants'; diff --git a/resources/js/components/ui/popover.tsx b/resources/js/components/ui/popover.tsx index 9de920b..30e93b7 100644 --- a/resources/js/components/ui/popover.tsx +++ b/resources/js/components/ui/popover.tsx @@ -4,6 +4,7 @@ import type { PopoverProps as PopoverPrimitiveProps } from 'react-aria-components'; import { + composeRenderProps, type DialogProps, DialogTrigger, Modal, @@ -11,7 +12,6 @@ import { OverlayArrow, PopoverContext, Popover as PopoverPrimitive, - composeRenderProps, useSlottedContext } from 'react-aria-components'; import { tv } from 'tailwind-variants'; diff --git a/resources/js/components/ui/select.tsx b/resources/js/components/ui/select.tsx index 849870e..67055a9 100644 --- a/resources/js/components/ui/select.tsx +++ b/resources/js/components/ui/select.tsx @@ -1,6 +1,6 @@ import { IconChevronLgDown } from 'justd-icons'; import type { ListBoxProps, SelectProps as SelectPrimitiveProps, ValidationResult } from 'react-aria-components'; -import { Button, Select as SelectPrimitive, SelectValue, composeRenderProps } from 'react-aria-components'; +import { Button, composeRenderProps, Select as SelectPrimitive, SelectValue } from 'react-aria-components'; import { tv } from 'tailwind-variants'; import type { Placement } from '@react-types/overlays'; diff --git a/resources/js/components/ui/sheet.tsx b/resources/js/components/ui/sheet.tsx index 8823aad..d5966c3 100644 --- a/resources/js/components/ui/sheet.tsx +++ b/resources/js/components/ui/sheet.tsx @@ -1,6 +1,6 @@ import type { DialogProps, DialogTriggerProps, ModalOverlayProps } from 'react-aria-components'; -import { DialogTrigger, Modal, ModalOverlay, composeRenderProps } from 'react-aria-components'; -import { type VariantProps, tv } from 'tailwind-variants'; +import { composeRenderProps, DialogTrigger, Modal, ModalOverlay } from 'react-aria-components'; +import { tv, type VariantProps } from 'tailwind-variants'; import { Dialog } from './dialog'; diff --git a/resources/js/components/ui/table.tsx b/resources/js/components/ui/table.tsx index 83d47b3..b3a9393 100644 --- a/resources/js/components/ui/table.tsx +++ b/resources/js/components/ui/table.tsx @@ -16,12 +16,12 @@ import { Collection, Column, ColumnResizer as ColumnResizerPrimitive, + composeRenderProps, ResizableTableContainer, Row, TableBody, TableHeader, Table as TablePrimitive, - composeRenderProps, useTableOptions } from 'react-aria-components'; import { tv } from 'tailwind-variants'; diff --git a/resources/js/layouts/app-layout.tsx b/resources/js/layouts/app-layout.tsx index 7b8eb4e..eb2e94d 100644 --- a/resources/js/layouts/app-layout.tsx +++ b/resources/js/layouts/app-layout.tsx @@ -1,9 +1,9 @@ +import { FlashMessage } from '@/components/flash-message'; +import { Footer } from '@/components/footer'; import { AppNavbar } from '@/layouts/app-navbar'; -import { FlashMessage } from 'components/flash-message'; -import { Footer } from 'components/footer'; import { PropsWithChildren } from 'react'; -export function AppLayout({ children }: PropsWithChildren) { +export default function AppLayout({ children }: PropsWithChildren) { return (
diff --git a/resources/js/layouts/app-navbar.tsx b/resources/js/layouts/app-navbar.tsx index 7563df2..c672518 100644 --- a/resources/js/layouts/app-navbar.tsx +++ b/resources/js/layouts/app-navbar.tsx @@ -1,20 +1,20 @@ +import { useTheme } from '@/components/theme-provider'; +import { ThemeSwitcher } from '@/components/theme-switcher'; import { PagePropsData } from '@/types'; import { usePage } from '@inertiajs/react'; -import { useTheme } from 'components/theme-provider'; -import { ThemeSwitcher } from 'components/theme-switcher'; import { IconArrowUpRight, IconBrandJustd, IconBrandLaravel, - IconChevronDown, - IconColors, + IconChevronLgDown, + IconColorPalette, IconColorSwatch, - IconPackage, + IconLogout, IconSettings } from 'justd-icons'; import React from 'react'; import { Selection } from 'react-aria-components'; -import { Avatar, Button, Menu, Navbar, Separator } from 'ui'; +import { Avatar, buttonStyles, Link, Menu, Navbar, Separator } from 'ui'; const navigations = [ { @@ -49,28 +49,43 @@ export function AppNavbar({ children, ...props }: React.ComponentProps Resources... - + - - + + + Blocks + + + + + Premium Blocks + + + + Basic Blocks + + + + + Components - + - - - Icons - + + + Colors + - - + + Themes - + - - - Colors - + + + Laravel + @@ -82,7 +97,10 @@ export function AppNavbar({ children, ...props }: React.ComponentProps ) : ( <> - Login + + + Login + Register )} @@ -99,7 +117,18 @@ export function AppNavbar({ children, ...props }: React.ComponentProps {!auth.user && } - {auth.user ? : } + {auth.user ? ( + + ) : ( + <> + + Login + + + )} @@ -115,23 +144,35 @@ function UserMenu() { const [selectedTheme, setSelectedTheme] = React.useState(new Set([currentTheme])); return ( - - + + +
+ {auth.user.name} + {auth.user.email} +
+
- +
{auth.user.name}
{auth.user.email}
- Dashboard + + Dashboard + - Settings + Settings - Preferences + + Preferences + {(item) => ( - {item.name} + {item.name} )} - - - Documentation - - - - Components - - - - Colors - - + - Logout + Logout +
); } -function LoginMenu() { +export function IconBrandJustdBlocks() { return ( - - - - Login - Register - - + + + + + + + + + + + + + + + + + + + + + ); } diff --git a/resources/js/layouts/guest-layout.tsx b/resources/js/layouts/guest-layout.tsx index b6c53c2..569c57c 100644 --- a/resources/js/layouts/guest-layout.tsx +++ b/resources/js/layouts/guest-layout.tsx @@ -1,6 +1,6 @@ -import { FlashMessage } from 'components/flash-message'; -import { Logo } from 'components/logo'; -import { Card } from 'components/ui/card'; +import { FlashMessage } from '@/components/flash-message'; +import { Logo } from '@/components/logo'; +import { Card } from '@/components/ui/card'; import { PropsWithChildren, ReactNode } from 'react'; import { Link } from 'ui'; @@ -9,7 +9,11 @@ interface GuestLayoutProps { description?: string | ReactNode | null; } -export function GuestLayout({ description = null, header = null, children }: PropsWithChildren) { +export default function GuestLayout({ + description = null, + header = null, + children +}: PropsWithChildren) { return (
@@ -19,11 +23,9 @@ export function GuestLayout({ description = null, header = null, children }: Pro
- -
- {header} - {description} -
+ + {header} + {description} {children}
diff --git a/resources/js/layouts/index.ts b/resources/js/layouts/index.ts deleted file mode 100644 index 948598c..0000000 --- a/resources/js/layouts/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './app-layout'; -export * from './guest-layout'; diff --git a/resources/js/pages/about.tsx b/resources/js/pages/about.tsx index 3f33884..7af1231 100644 --- a/resources/js/pages/about.tsx +++ b/resources/js/pages/about.tsx @@ -1,6 +1,6 @@ +import { Header } from '@/components/header'; +import AppLayout from '@/layouts/app-layout'; import { Head } from '@inertiajs/react'; -import { Header } from 'components/header'; -import { AppLayout } from 'layouts'; import React from 'react'; import { Card, Container } from 'ui'; diff --git a/resources/js/pages/auth/confirm-password.tsx b/resources/js/pages/auth/confirm-password.tsx index 65bb657..4a7aec7 100644 --- a/resources/js/pages/auth/confirm-password.tsx +++ b/resources/js/pages/auth/confirm-password.tsx @@ -1,5 +1,5 @@ +import GuestLayout from '@/layouts/guest-layout'; import { Head, useForm } from '@inertiajs/react'; -import { GuestLayout } from 'layouts'; import { useEffect } from 'react'; import { Button, Form, TextField } from 'ui'; diff --git a/resources/js/pages/auth/forgot-password.tsx b/resources/js/pages/auth/forgot-password.tsx index 535c9a6..48a7a09 100644 --- a/resources/js/pages/auth/forgot-password.tsx +++ b/resources/js/pages/auth/forgot-password.tsx @@ -1,5 +1,5 @@ +import GuestLayout from '@/layouts/guest-layout'; import { Head, useForm } from '@inertiajs/react'; -import { GuestLayout } from 'layouts'; import { Button, Form, TextField } from 'ui'; interface ForgotPasswordProps { diff --git a/resources/js/pages/auth/login.tsx b/resources/js/pages/auth/login.tsx index 6313a07..e8b4389 100644 --- a/resources/js/pages/auth/login.tsx +++ b/resources/js/pages/auth/login.tsx @@ -1,7 +1,7 @@ +import GuestLayout from '@/layouts/guest-layout'; import { Head, useForm } from '@inertiajs/react'; -import { GuestLayout } from 'layouts'; import React, { useEffect } from 'react'; -import { Button, buttonStyles, Checkbox, Form, Link, TextField } from 'ui'; +import { Button, Checkbox, Form, Link, TextField } from 'ui'; interface LoginProps { status: string; @@ -34,7 +34,7 @@ export default function Login(args: LoginProps) { {status &&
{status}
} -
+ {canResetPassword && ( - + Forgot your password? )}
- -
- - Register + +
+ + Dont have account? Register - -
diff --git a/resources/js/pages/auth/register.tsx b/resources/js/pages/auth/register.tsx index 75a435c..8717f86 100644 --- a/resources/js/pages/auth/register.tsx +++ b/resources/js/pages/auth/register.tsx @@ -1,7 +1,7 @@ +import GuestLayout from '@/layouts/guest-layout'; import { Head, useForm } from '@inertiajs/react'; -import { GuestLayout } from 'layouts'; import React, { useEffect } from 'react'; -import { Button, buttonStyles, Checkbox, Form, Link, TextField } from 'ui'; +import { Button, Form, Link, TextField } from 'ui'; export default function Register() { const { data, setData, post, processing, errors, reset } = useForm({ @@ -23,18 +23,16 @@ export default function Register() { post('/register'); }; - console.log(import.meta.env.VITE_HAS_TERMS_AND_PRIVACY_POLICY_FEATURE); return ( <> -
+ setData('name', v)} @@ -46,57 +44,40 @@ export default function Register() { name="email" label="Email" value={data.email} - className="mt-1" autoComplete="username" onChange={(v) => setData('email', v)} errorMessage={errors.email} isRequired /> - setData('password', v)} - errorMessage={errors.password} - isRequired - /> - - setData('password_confirmation', v)} - errorMessage={errors.password_confirmation} - isRequired - /> - - {import.meta.env.VITE_HAS_TERMS_AND_PRIVACY_POLICY_FEATURE && ( -
- setData('terms', e)} isRequired> - I agree to the{' '} - - - terms of service - {' '} - and{' '} - - privacy policy - -
- )} +
+ setData('password', v)} + errorMessage={errors.password} + isRequired + /> -
- + setData('password_confirmation', v)} + errorMessage={errors.password_confirmation} + isRequired + /> +
+ +
+ Already registered? - -
diff --git a/resources/js/pages/auth/reset-password.tsx b/resources/js/pages/auth/reset-password.tsx index 396bb3d..f0d16fa 100644 --- a/resources/js/pages/auth/reset-password.tsx +++ b/resources/js/pages/auth/reset-password.tsx @@ -1,5 +1,5 @@ +import GuestLayout from '@/layouts/guest-layout'; import { Head, useForm } from '@inertiajs/react'; -import { GuestLayout } from 'layouts'; import { useEffect } from 'react'; import { Button, Form, TextField } from 'ui'; diff --git a/resources/js/pages/auth/verify-email.tsx b/resources/js/pages/auth/verify-email.tsx index 5f457b4..0913b26 100644 --- a/resources/js/pages/auth/verify-email.tsx +++ b/resources/js/pages/auth/verify-email.tsx @@ -1,4 +1,4 @@ -import { GuestLayout } from '@/layouts/guest-layout'; +import GuestLayout from '@/layouts/guest-layout'; import { Head, useForm } from '@inertiajs/react'; import { Button, Form, Link } from 'ui'; diff --git a/resources/js/pages/dashboard.tsx b/resources/js/pages/dashboard.tsx index c3bbbcc..46db103 100644 --- a/resources/js/pages/dashboard.tsx +++ b/resources/js/pages/dashboard.tsx @@ -1,6 +1,6 @@ +import AppLayout from '@/layouts/app-layout'; import { PagePropsData } from '@/types'; import { Head } from '@inertiajs/react'; -import { AppLayout } from 'layouts'; import { Card, Container } from 'ui'; export default function Dashboard({ auth }: PagePropsData) { diff --git a/resources/js/pages/home.tsx b/resources/js/pages/home.tsx index 0cfa79f..6b842eb 100644 --- a/resources/js/pages/home.tsx +++ b/resources/js/pages/home.tsx @@ -1,16 +1,10 @@ +import { Header } from '@/components/header'; +import { Logo } from '@/components/logo'; +import AppLayout from '@/layouts/app-layout'; +import { IconBrandJustdBlocks } from '@/layouts/app-navbar'; import { Head } from '@inertiajs/react'; -import { Header } from 'components/header'; -import { Logo } from 'components/logo'; -import { - IconBrandGithub, - IconBrandJustd, - IconBrandKarteil, - IconBrandParanoid, - IconBrandParsinta, - IconCube -} from 'justd-icons'; -import { AppLayout } from 'layouts'; -import { Card, Container, Grid, Link } from 'ui'; +import { IconBrandJustd, IconBrandParanoid, IconBrandParsinta, IconWindowVisitFill } from 'justd-icons'; +import { Card, Container, Link } from 'ui'; const items = [ { @@ -21,11 +15,11 @@ const items = [ ' Justd is a chill set of React components, built on top of React Aria Components, all about keeping the web accessible.' }, { - name: 'Inertia.ts', - url: 'https://github.com/irsyadadl/inertia.ts', - icon: IconBrandGithub, + name: 'Blocks', + url: 'https://blocks.getjustd.com', + icon: IconBrandJustdBlocks, description: - 'This project is developed by IrsyadAdl, if you want to contribute to this project, please visit the Github Repository.' + 'Create stunning, professional-grade layouts that not only save time but also elevate the quality of your projects.' }, { name: 'Icons', @@ -35,9 +29,9 @@ const items = [ 'A library of beautifully crafted react icons, perfect for enhancing the visual appeal and user experience of your web applications.' }, { - name: 'Next.js Template', - url: 'https://irsyad.co/s', - icon: IconCube, + name: 'Templates', + url: 'https://blocks.getjustd.com/templates', + icon: IconWindowVisitFill, description: 'Explore the next.js templates from web apps to design systems, all here.' }, { @@ -46,13 +40,6 @@ const items = [ icon: IconBrandParsinta, description: 'Improve your skills with Parsinta by pushing your skills to the next level, through the series here such as Laravel, Vue, React, Tailwind CSS and Much more.' - }, - { - name: 'Karteil', - url: 'https://karteil.com', - icon: IconBrandKarteil, - description: - 'Improve your skills with Karteil by pushing your skills to the next level, through the online books here such as Laravel, Vue, React, Tailwind CSS and Much more.' } ]; @@ -80,32 +67,24 @@ export default function Home() {
- - - {items.map((item) => ( - - - -
-
- -
+
+ {items.map((item) => ( +
+ + +
+
+
- - {item.name} - {item.description} - - - - ))} - - +
+ + {item.name} + {item.description} + +
+
+ ))} +
diff --git a/resources/js/pages/profile/edit.tsx b/resources/js/pages/profile/edit.tsx index 7c504dd..8b39626 100644 --- a/resources/js/pages/profile/edit.tsx +++ b/resources/js/pages/profile/edit.tsx @@ -1,6 +1,6 @@ +import { Header } from '@/components/header'; +import AppLayout from '@/layouts/app-layout'; import { Head } from '@inertiajs/react'; -import { Header } from 'components/header'; -import { AppLayout } from 'layouts'; import { Container } from 'ui'; import { DeleteUserForm, UpdatePasswordForm, UpdateProfileInformationForm } from './partials'; @@ -17,7 +17,7 @@ export default function Edit({ mustVerifyEmail, status }: Props) {
-
+
diff --git a/resources/js/pages/profile/partials/update-password-form.tsx b/resources/js/pages/profile/partials/update-password-form.tsx index 0b1e968..e17f338 100644 --- a/resources/js/pages/profile/partials/update-password-form.tsx +++ b/resources/js/pages/profile/partials/update-password-form.tsx @@ -46,7 +46,6 @@ export function UpdatePasswordForm() { setData('current_password', v)} type="password" autoComplete="current-password" @@ -69,7 +68,6 @@ export function UpdatePasswordForm() { label="Confirm Password" name="password_confirmation" value={data.password_confirmation} - className="mt-1" onChange={(v) => setData('password_confirmation', v)} errorMessage={errors.password_confirmation} isRequired diff --git a/resources/js/pages/profile/partials/update-profile-information-form.tsx b/resources/js/pages/profile/partials/update-profile-information-form.tsx index ac8c638..0222e8e 100644 --- a/resources/js/pages/profile/partials/update-profile-information-form.tsx +++ b/resources/js/pages/profile/partials/update-profile-information-form.tsx @@ -35,7 +35,6 @@ export function UpdateProfileInformationForm({ mustVerifyEmail, status, classNam label="Name" type="text" value={data.name} - className="mt-1" onChange={(v) => setData('name', v)} isRequired errorMessage={errors.name} @@ -47,7 +46,6 @@ export function UpdateProfileInformationForm({ mustVerifyEmail, status, classNam type="email" label="Email" value={data.email} - className="mt-1" onChange={(v) => setData('email', v)} isRequired errorMessage={errors.email} diff --git a/routes/web.php b/routes/web.php index a28f285..e17bd84 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,5 +15,5 @@ Route::delete('profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); }); -require __DIR__ . '/auth.php'; -require __DIR__ . '/dev.php'; +require __DIR__.'/auth.php'; +require __DIR__.'/dev.php'; diff --git a/tests/Feature/Auth/EmailVerificationTest.php b/tests/Feature/Auth/EmailVerificationTest.php index e8799b9..f282dff 100644 --- a/tests/Feature/Auth/EmailVerificationTest.php +++ b/tests/Feature/Auth/EmailVerificationTest.php @@ -28,7 +28,7 @@ Event::assertDispatched(Verified::class); expect($user->fresh()->hasVerifiedEmail())->toBeTrue(); - $response->assertRedirect(route('dashboard', absolute: false) . '?verified=1'); + $response->assertRedirect(route('dashboard', absolute: false).'?verified=1'); }); test('email is not verified with invalid hash', function () { diff --git a/tests/Feature/Auth/PasswordResetTest.php b/tests/Feature/Auth/PasswordResetTest.php index 25c7d24..0504276 100644 --- a/tests/Feature/Auth/PasswordResetTest.php +++ b/tests/Feature/Auth/PasswordResetTest.php @@ -28,7 +28,7 @@ $this->post('/forgot-password', ['email' => $user->email]); Notification::assertSentTo($user, ResetPassword::class, function ($notification) { - $response = $this->get('/reset-password/' . $notification->token); + $response = $this->get('/reset-password/'.$notification->token); $response->assertStatus(200); diff --git a/tsconfig.json b/tsconfig.json index 2de5b03..3cd29d2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,8 +14,6 @@ "noEmit": true, "paths": { "@/*": ["./resources/js/*"], - "components/*": ["./resources/js/components/*"], - "layouts": ["./resources/js/layouts/index.ts"], "ziggy-js": ["./vendor/tightenco/ziggy"], "ui": ["./resources/js/components/ui/index.ts"] } diff --git a/vite.config.js b/vite.config.js index 0460c48..7412280 100644 --- a/vite.config.js +++ b/vite.config.js @@ -26,8 +26,6 @@ export default defineConfig({ resolve: { alias: { ui: resolve('resources/js/components/ui/index.ts'), - layouts: resolve('resources/js/layouts/index.ts'), - components: resolve('resources/js/components'), 'ziggy-js': resolve('vendor/tightenco/ziggy') } }