From 473bdd627b4836e2bc8e97841a47c1e3543391ab Mon Sep 17 00:00:00 2001 From: sampanna Date: Wed, 10 Jun 2026 10:46:22 +0545 Subject: [PATCH] first commit --- .editorconfig | 18 + .env.example | 65 + .gitattributes | 11 + .gitignore | 24 + .htaccess | 25 + README.md | 59 + .../Auth/AuthenticatedSessionController.php | 47 + .../Auth/ConfirmablePasswordController.php | 40 + ...mailVerificationNotificationController.php | 24 + .../EmailVerificationPromptController.php | 21 + .../Auth/NewPasswordController.php | 63 + .../Controllers/Auth/PasswordController.php | 29 + .../Auth/PasswordResetLinkController.php | 45 + .../Auth/RegisteredUserController.php | 51 + .../Auth/VerifyEmailController.php | 27 + app/Http/Controllers/CommentController.php | 49 + app/Http/Controllers/Controller.php | 8 + app/Http/Controllers/HomeController.php | 123 + app/Http/Controllers/ProfileController.php | 60 + .../Controllers/RegistrationController.php | 315 + app/Http/Controllers/ScoreboardController.php | 63 + app/Http/Requests/Auth/LoginRequest.php | 86 + app/Http/Requests/ProfileUpdateRequest.php | 31 + app/Models/Comment.php | 39 + app/Models/GameSession.php | 59 + app/Models/GameShot.php | 38 + app/Models/Registration.php | 48 + app/Models/User.php | 60 + app/Providers/AppServiceProvider.php | 24 + app/View/Components/AppLayout.php | 17 + app/View/Components/GuestLayout.php | 17 + artisan | 18 + bootstrap/app.php | 18 + bootstrap/cache/.gitignore | 2 + bootstrap/providers.php | 7 + composer.json | 88 + composer.lock | 8740 +++++++++++++++++ config/app.php | 126 + config/auth.php | 117 + config/cache.php | 117 + config/database.php | 184 + config/filesystems.php | 80 + config/logging.php | 132 + config/mail.php | 118 + config/queue.php | 129 + config/services.php | 38 + config/session.php | 217 + database/.gitignore | 1 + database/factories/UserFactory.php | 45 + .../0001_01_01_000000_create_users_table.php | 49 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 57 + ..._06_09_062637_add_roles_to_users_table.php | 30 + ...6_09_100719_create_registrations_table.php | 35 + ...6_09_100724_create_game_sessions_table.php | 35 + ...6_06_09_100810_create_game_shots_table.php | 33 + ...026_06_09_183551_create_comments_table.php | 32 + database/seeders/DatabaseSeeder.php | 25 + package-lock.json | 3312 +++++++ package.json | 21 + phpunit.xml | 36 + postcss.config.js | 6 + public/.htaccess | 25 + public/assets/js/registrations.js | 72 + public/assets/rosetta-logo.png | Bin 0 -> 13628 bytes public/assets/stadium-bg.png | Bin 0 -> 2836070 bytes public/assets/wcup.png | Bin 0 -> 1685200 bytes public/favicon.ico | 0 public/index.php | 20 + public/robots.txt | 2 + resources/css/app.css | 3 + resources/js/app.js | 7 + resources/js/bootstrap.js | 4 + .../views/auth/confirm-password.blade.php | 27 + .../views/auth/forgot-password.blade.php | 25 + resources/views/auth/login.blade.php | 47 + resources/views/auth/register.blade.php | 52 + resources/views/auth/reset-password.blade.php | 39 + resources/views/auth/verify-email.blade.php | 31 + .../components/application-logo.blade.php | 3 + .../components/auth-session-status.blade.php | 7 + .../views/components/danger-button.blade.php | 3 + .../views/components/dropdown-link.blade.php | 1 + resources/views/components/dropdown.blade.php | 35 + .../views/components/input-error.blade.php | 9 + .../views/components/input-label.blade.php | 5 + resources/views/components/modal.blade.php | 78 + resources/views/components/nav-link.blade.php | 11 + .../views/components/primary-button.blade.php | 3 + .../components/responsive-nav-link.blade.php | 11 + .../components/secondary-button.blade.php | 3 + .../views/components/text-input.blade.php | 3 + resources/views/dashboard.blade.php | 17 + resources/views/dashboard/admin.blade.php | 778 ++ resources/views/dashboard/counselor.blade.php | 349 + resources/views/layouts/app.blade.php | 0 resources/views/layouts/footer.blade.php | 24 + resources/views/layouts/guest.blade.php | 30 + resources/views/layouts/header.blade.php | 63 + resources/views/layouts/master.blade.php | 58 + resources/views/layouts/navigation.blade.php | 100 + resources/views/leaderboard.blade.php | 161 + resources/views/profile/edit.blade.php | 29 + .../partials/delete-user-form.blade.php | 55 + .../partials/update-password-form.blade.php | 48 + .../update-profile-information-form.blade.php | 64 + resources/views/registrations.blade.php | 79 + resources/views/scoreboard.blade.php | 289 + resources/views/welcome.blade.php | 277 + routes/auth.php | 59 + routes/console.php | 8 + routes/web.php | 51 + server.php | 21 + storage/app/.gitignore | 4 + storage/app/private/.gitignore | 2 + storage/app/public/.gitignore | 2 + storage/debugbar/.gitignore | 2 + storage/framework/.gitignore | 9 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tailwind.config.js | 21 + tests/Feature/Auth/AuthenticationTest.php | 54 + tests/Feature/Auth/EmailVerificationTest.php | 58 + .../Feature/Auth/PasswordConfirmationTest.php | 44 + tests/Feature/Auth/PasswordResetTest.php | 73 + tests/Feature/Auth/PasswordUpdateTest.php | 51 + tests/Feature/Auth/RegistrationTest.php | 31 + tests/Feature/ExampleTest.php | 19 + tests/Feature/ProfileTest.php | 99 + tests/TestCase.php | 10 + tests/Unit/ExampleTest.php | 16 + vite.config.js | 11 + 136 files changed, 19074 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .htaccess create mode 100644 README.md create mode 100644 app/Http/Controllers/Auth/AuthenticatedSessionController.php create mode 100644 app/Http/Controllers/Auth/ConfirmablePasswordController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationNotificationController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationPromptController.php create mode 100644 app/Http/Controllers/Auth/NewPasswordController.php create mode 100644 app/Http/Controllers/Auth/PasswordController.php create mode 100644 app/Http/Controllers/Auth/PasswordResetLinkController.php create mode 100644 app/Http/Controllers/Auth/RegisteredUserController.php create mode 100644 app/Http/Controllers/Auth/VerifyEmailController.php create mode 100644 app/Http/Controllers/CommentController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 app/Http/Controllers/ProfileController.php create mode 100644 app/Http/Controllers/RegistrationController.php create mode 100644 app/Http/Controllers/ScoreboardController.php create mode 100644 app/Http/Requests/Auth/LoginRequest.php create mode 100644 app/Http/Requests/ProfileUpdateRequest.php create mode 100644 app/Models/Comment.php create mode 100644 app/Models/GameSession.php create mode 100644 app/Models/GameShot.php create mode 100644 app/Models/Registration.php create mode 100644 app/Models/User.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/View/Components/AppLayout.php create mode 100644 app/View/Components/GuestLayout.php create mode 100644 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 bootstrap/providers.php create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/cache.php create mode 100644 config/database.php create mode 100644 config/filesystems.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/queue.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 database/.gitignore create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 database/migrations/2026_06_09_062637_add_roles_to_users_table.php create mode 100644 database/migrations/2026_06_09_100719_create_registrations_table.php create mode 100644 database/migrations/2026_06_09_100724_create_game_sessions_table.php create mode 100644 database/migrations/2026_06_09_100810_create_game_shots_table.php create mode 100644 database/migrations/2026_06_09_183551_create_comments_table.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 phpunit.xml create mode 100644 postcss.config.js create mode 100644 public/.htaccess create mode 100644 public/assets/js/registrations.js create mode 100644 public/assets/rosetta-logo.png create mode 100644 public/assets/stadium-bg.png create mode 100644 public/assets/wcup.png create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/robots.txt create mode 100644 resources/css/app.css create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js create mode 100644 resources/views/auth/confirm-password.blade.php create mode 100644 resources/views/auth/forgot-password.blade.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/auth/register.blade.php create mode 100644 resources/views/auth/reset-password.blade.php create mode 100644 resources/views/auth/verify-email.blade.php create mode 100644 resources/views/components/application-logo.blade.php create mode 100644 resources/views/components/auth-session-status.blade.php create mode 100644 resources/views/components/danger-button.blade.php create mode 100644 resources/views/components/dropdown-link.blade.php create mode 100644 resources/views/components/dropdown.blade.php create mode 100644 resources/views/components/input-error.blade.php create mode 100644 resources/views/components/input-label.blade.php create mode 100644 resources/views/components/modal.blade.php create mode 100644 resources/views/components/nav-link.blade.php create mode 100644 resources/views/components/primary-button.blade.php create mode 100644 resources/views/components/responsive-nav-link.blade.php create mode 100644 resources/views/components/secondary-button.blade.php create mode 100644 resources/views/components/text-input.blade.php create mode 100644 resources/views/dashboard.blade.php create mode 100644 resources/views/dashboard/admin.blade.php create mode 100644 resources/views/dashboard/counselor.blade.php create mode 100644 resources/views/layouts/app.blade.php create mode 100644 resources/views/layouts/footer.blade.php create mode 100644 resources/views/layouts/guest.blade.php create mode 100644 resources/views/layouts/header.blade.php create mode 100644 resources/views/layouts/master.blade.php create mode 100644 resources/views/layouts/navigation.blade.php create mode 100644 resources/views/leaderboard.blade.php create mode 100644 resources/views/profile/edit.blade.php create mode 100644 resources/views/profile/partials/delete-user-form.blade.php create mode 100644 resources/views/profile/partials/update-password-form.blade.php create mode 100644 resources/views/profile/partials/update-profile-information-form.blade.php create mode 100644 resources/views/registrations.blade.php create mode 100644 resources/views/scoreboard.blade.php create mode 100644 resources/views/welcome.blade.php create mode 100644 routes/auth.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 server.php create mode 100644 storage/app/.gitignore create mode 100644 storage/app/private/.gitignore create mode 100644 storage/app/public/.gitignore create mode 100644 storage/debugbar/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 storage/logs/.gitignore create mode 100644 tailwind.config.js create mode 100644 tests/Feature/Auth/AuthenticationTest.php create mode 100644 tests/Feature/Auth/EmailVerificationTest.php create mode 100644 tests/Feature/Auth/PasswordConfirmationTest.php create mode 100644 tests/Feature/Auth/PasswordResetTest.php create mode 100644 tests/Feature/Auth/PasswordUpdateTest.php create mode 100644 tests/Feature/Auth/RegistrationTest.php create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/Feature/ProfileTest.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/ExampleTest.php create mode 100644 vite.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a186cd2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[compose.yaml] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c0660ea --- /dev/null +++ b/.env.example @@ -0,0 +1,65 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +# PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=sqlite +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b71b1ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +*.log +.DS_Store +.env +.env.backup +.env.production +.phpactor.json +.phpunit.result.cache +/.fleet +/.idea +/.nova +/.phpunit.cache +/.vscode +/.zed +/auth.json +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/storage/pail +/vendor +Homestead.json +Homestead.yaml +Thumbs.db diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..7522942 --- /dev/null +++ b/.htaccess @@ -0,0 +1,25 @@ + + + Options -MultiViews + + + RewriteEngine On + + RewriteCond %{REQUEST_FILENAME} -d [OR] + RewriteCond %{REQUEST_FILENAME} -f + RewriteRule ^ ^$1 [N] + + RewriteCond %{REQUEST_URI} (\.\w+$) [NC] + RewriteRule ^(.*)$ public/$1 + + # Add a RewriteCond to exclude fix-storage.php from redirection + RewriteCond %{REQUEST_URI} !^/fix-storage\.php$ + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ server.php + +# php -- BEGIN cPanel-generated handler, do not edit +# Set the “ea-php82” package as the default “PHP” programming language. + +# php -- END cPanel-generated handler, do not edit diff --git a/README.md b/README.md new file mode 100644 index 0000000..0165a77 --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +

Laravel Logo

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## About Laravel + +Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: + +- [Simple, fast routing engine](https://laravel.com/docs/routing). +- [Powerful dependency injection container](https://laravel.com/docs/container). +- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. +- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). +- Database agnostic [schema migrations](https://laravel.com/docs/migrations). +- [Robust background job processing](https://laravel.com/docs/queues). +- [Real-time event broadcasting](https://laravel.com/docs/broadcasting). + +Laravel is accessible, powerful, and provides tools required for large, robust applications. + +## Learning Laravel + +Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. You can also check out [Laravel Learn](https://laravel.com/learn), where you will be guided through building a modern Laravel application. + +If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. + +## Laravel Sponsors + +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). + +### Premium Partners + +- **[Vehikl](https://vehikl.com)** +- **[Tighten Co.](https://tighten.co)** +- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** +- **[64 Robots](https://64robots.com)** +- **[Curotec](https://www.curotec.com/services/technologies/laravel)** +- **[DevSquad](https://devsquad.com/hire-laravel-developers)** +- **[Redberry](https://redberry.international/laravel-development)** +- **[Active Logic](https://activelogic.com)** + +## Contributing + +Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed. + +## License + +The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php new file mode 100644 index 0000000..ca4196b --- /dev/null +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,47 @@ +authenticate(); + + $request->session()->regenerate(); + + return redirect()->intended(route('home', absolute: false)); + } + + /** + * Destroy an authenticated session. + */ + public function destroy(Request $request): RedirectResponse + { + Auth::guard('web')->logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + return redirect('/'); + } +} diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php new file mode 100644 index 0000000..712394a --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -0,0 +1,40 @@ +validate([ + 'email' => $request->user()->email, + 'password' => $request->password, + ])) { + throw ValidationException::withMessages([ + 'password' => __('auth.password'), + ]); + } + + $request->session()->put('auth.password_confirmed_at', time()); + + return redirect()->intended(route('dashboard', absolute: false)); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php new file mode 100644 index 0000000..f64fa9b --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -0,0 +1,24 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard', absolute: false)); + } + + $request->user()->sendEmailVerificationNotification(); + + return back()->with('status', 'verification-link-sent'); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php new file mode 100644 index 0000000..ee3cb6f --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationPromptController.php @@ -0,0 +1,21 @@ +user()->hasVerifiedEmail() + ? redirect()->intended(route('dashboard', absolute: false)) + : view('auth.verify-email'); + } +} diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php new file mode 100644 index 0000000..fc16e14 --- /dev/null +++ b/app/Http/Controllers/Auth/NewPasswordController.php @@ -0,0 +1,63 @@ + $request]); + } + + /** + * Handle an incoming new password request. + * + * @throws ValidationException + */ + public function store(Request $request): RedirectResponse + { + $request->validate([ + 'token' => ['required'], + 'email' => ['required', 'email'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function (User $user) use ($request) { + $user->forceFill([ + 'password' => Hash::make($request->password), + 'remember_token' => Str::random(60), + ])->save(); + + event(new PasswordReset($user)); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + return $status == Password::PASSWORD_RESET + ? redirect()->route('login')->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php new file mode 100644 index 0000000..6916409 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,29 @@ +validateWithBag('updatePassword', [ + 'current_password' => ['required', 'current_password'], + 'password' => ['required', Password::defaults(), 'confirmed'], + ]); + + $request->user()->update([ + 'password' => Hash::make($validated['password']), + ]); + + return back()->with('status', 'password-updated'); + } +} diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php new file mode 100644 index 0000000..1bc9c11 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordResetLinkController.php @@ -0,0 +1,45 @@ +validate([ + 'email' => ['required', 'email'], + ]); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $status = Password::sendResetLink( + $request->only('email') + ); + + return $status == Password::RESET_LINK_SENT + ? back()->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php new file mode 100644 index 0000000..44a3930 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,51 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + ]); + + event(new Registered($user)); + + Auth::login($user); + + return redirect(route('dashboard', absolute: false)); + } +} diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php new file mode 100644 index 0000000..784765e --- /dev/null +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -0,0 +1,27 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + } +} diff --git a/app/Http/Controllers/CommentController.php b/app/Http/Controllers/CommentController.php new file mode 100644 index 0000000..ee1c61c --- /dev/null +++ b/app/Http/Controllers/CommentController.php @@ -0,0 +1,49 @@ +validate(['registration_id' => 'required|exists:registrations,id']); + + $comments = Comment::where('registration_id', $request->registration_id) + ->orderBy('created_at', 'asc') + ->get() + ->map(fn($c) => [ + 'comment' => $c->comment, + 'author' => auth()->user()->name, + 'created_at_human' => $c->created_at->diffForHumans(), + ]); + + return response()->json(['comments' => $comments]); + } + + public function store(Request $request) + { + $request->validate([ + 'registration_id' => 'required|exists:registrations,id', + 'comment' => 'required|string|max:1000', + ]); + + Registration::findOrFail($request->registration_id); + + $comment = Comment::create([ + 'registration_id' => $request->registration_id, + 'comment' => $request->comment, + ]); + + return response()->json([ + 'comment' => [ + 'comment' => $comment->comment, + 'author' => auth()->user()->name, + 'created_at_human' => $comment->created_at->diffForHumans(), + ] + ]); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..8677cd5 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ +user(); + + return match ($user->role) { + 'admin' => $this->adminDashboard(), + 'counselor' => $this->counselorDashboard(), + default => abort(403, 'Unauthorized action.'), + }; + } + + public function adminDashboard() + { + $today = Carbon::today(); + + $query = Registration::with([ + 'sessions' => function ($q) use ($today) { + $q->whereDate('play_date', $today)->with('shots'); + } + ]) + ->whereHas('sessions', function ($q) use ($today) { + $q->whereDate('play_date', $today); + }) + ->orderBy('created_at', 'desc') + ->paginate(10); + + $registrations = $query->getCollection()->map(function ($student) { + + $todaySession = $student->sessions->first(); + + $todayGoals = null; + + if ($todaySession) { + $todayGoals = $todaySession->shots + ->sortBy('shot_number') + ->map(fn($shot) => (bool) $shot->result) + ->values() + ->toArray(); + } + + return [ + 'id' => $student->id, + 'name' => $student->name, + 'phone' => $student->phone, + 'email' => $student->email, + 'today_goals' => $todayGoals, + 'total_score' => $student->total_score, + 'session_id' => $todaySession?->id, + ]; + }); + + $query->setCollection($registrations); + + $data['registrations'] = $query; + $data['total'] = Registration::count(); + $data['played'] = $registrations->filter(fn($r) => !empty($r['today_goals']) && count($r['today_goals']) >= 3)->count(); + $data['topScore'] = $registrations->max('total_score') ?? 0; + + return view('dashboard.admin', $data); + } + + public function counselorDashboard() + { + $today = Carbon::today(); + + $query = Registration::with([ + 'sessions' => function ($q) use ($today) { + $q->whereDate('play_date', $today)->with('shots'); + }, + 'comments' + ]) + ->whereHas('sessions', function ($q) use ($today) { + $q->whereDate('play_date', $today); + }) + ->orderBy('created_at', 'desc') + ->paginate(10); + + $registrations = $query->getCollection()->map(function ($student) { + + $todaySession = $student->sessions->first(); + + $todayGoals = null; + + if ($todaySession) { + $todayGoals = $todaySession->shots + ->sortBy('shot_number') + ->map(fn($shot) => (bool) $shot->result) + ->values() + ->toArray(); + } + + return [ + 'id' => $student->id, + 'name' => $student->name, + 'phone' => $student->phone, + 'email' => $student->email, + 'today_goals' => $todayGoals, + 'total_score' => $student->total_score, + 'session_id' => $todaySession?->id, + 'comment_count' => $student->comments->count(), + ]; + }); + + $query->setCollection($registrations); + + $data['registrations'] = $query; + $data['total'] = Registration::count(); + $data['played'] = $registrations->filter(fn($r) => !empty($r['today_goals']) && count($r['today_goals']) >= 3)->count(); + $data['topScore'] = $registrations->max('total_score') ?? 0; + + return view('dashboard.counselor', $data); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php new file mode 100644 index 0000000..a48eb8d --- /dev/null +++ b/app/Http/Controllers/ProfileController.php @@ -0,0 +1,60 @@ + $request->user(), + ]); + } + + /** + * Update the user's profile information. + */ + public function update(ProfileUpdateRequest $request): RedirectResponse + { + $request->user()->fill($request->validated()); + + if ($request->user()->isDirty('email')) { + $request->user()->email_verified_at = null; + } + + $request->user()->save(); + + return Redirect::route('profile.edit')->with('status', 'profile-updated'); + } + + /** + * Delete the user's account. + */ + public function destroy(Request $request): RedirectResponse + { + $request->validateWithBag('userDeletion', [ + 'password' => ['required', 'current_password'], + ]); + + $user = $request->user(); + + Auth::logout(); + + $user->delete(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return Redirect::to('/'); + } +} diff --git a/app/Http/Controllers/RegistrationController.php b/app/Http/Controllers/RegistrationController.php new file mode 100644 index 0000000..e3b9615 --- /dev/null +++ b/app/Http/Controllers/RegistrationController.php @@ -0,0 +1,315 @@ +paginate(20); + + return view('registrations', compact('registrations')); + } + + public function create() + { + return view('registrations.create'); + } + + /* + |------------------------------------------------- + | STORE (ONLY USED AFTER OTP FOR NEW USERS) + |------------------------------------------------- + */ + public function store(Request $request) + { + $request->validate([ + 'phone' => 'required', + 'name' => 'required', + 'email' => 'nullable|email' + ]); + + $registration = Registration::create([ + 'name' => $request->name, + 'email' => $request->email, + 'phone' => $request->phone, + 'total_score' => 0 + ]); + + $session = GameSession::create([ + 'registration_id' => $registration->id, + 'play_date' => today(), + 'score' => 0, + ]); + + return response()->json([ + 'status' => 'session_created', + 'registration' => [ + 'id' => $registration->id, + 'name' => $registration->name, + 'email' => $registration->email, + 'phone' => $registration->phone, + 'total_score' => 0, + 'today_goals' => [], + 'session_id' => $session->id, + ] + ]); + } + + /* + |------------------------------------------------- + | SEND OTP + |------------------------------------------------- + */ + public function sendOtp(Request $request) + { + $request->validate([ + 'phone' => 'required' + ]); + + $phone = $request->phone; + + $otp = rand(100000, 999999); + + Cache::put("otp_$phone", $otp, now()->addMinutes(2)); + + return response()->json([ + 'status' => true, + 'otp' => $otp // remove in production + ]); + } + + /* + |------------------------------------------------- + | VERIFY OTP (CORE LOGIC) + |------------------------------------------------- + */ + public function verifyOtp(Request $request) + { + $request->validate([ + 'phone' => 'required', + 'otp' => 'required' + ]); + + $phone = $request->phone; + + $cachedOtp = Cache::get("otp_$phone"); + + if (!$cachedOtp || $cachedOtp != $request->otp) { + return response()->json([ + 'status' => 'invalid_otp', + 'message' => 'Invalid OTP' + ], 422); + } + + Cache::forget("otp_$phone"); + + $registration = Registration::where('phone', $phone)->first(); + + /* + | CASE 1: NEW USER + */ + if (!$registration) { + return response()->json([ + 'status' => 'needs_registration', + 'phone' => $phone + ]); + } + + /* + | CASE 2: ALREADY PLAYED TODAY + */ + $todaySession = $registration->sessions() + ->whereDate('play_date', today()) + ->first(); + + if ($todaySession && $todaySession->isComplete()) { + return response()->json([ + 'status' => 'blocked', + 'message' => 'This student has already completed today\'s session.', + ], 409); + } + + // Session exists but shots not recorded yet — return it + if ($todaySession) { + return response()->json([ + 'status' => 'session_created', + 'registration' => [ + 'id' => $registration->id, + 'name' => $registration->name, + 'email' => $registration->email, + 'phone' => $registration->phone, + 'total_score' => $registration->total_score, + 'today_goals' => $todaySession->getShotArray(), + 'session_id' => $todaySession->id, + ] + ]); + } + /* + | CASE 3: CREATE SESSION IMMEDIATELY + */ + $session = GameSession::create([ + 'registration_id' => $registration->id, + 'play_date' => today(), + 'score' => 0, + ]); + + return response()->json([ + 'status' => 'session_created', + 'registration' => [ + 'id' => $registration->id, + 'name' => $registration->name, + 'email' => $registration->email, + 'phone' => $registration->phone, + 'total_score' => $registration->total_score, + 'today_goals' => [], + 'session_id' => $session->id, + ] + ]); + } + + public function resendOtp(Request $request) + { + $request->validate([ + 'phone' => 'required' + ]); + + $phone = $request->phone; + + $cooldownKey = 'otp_cooldown_' . $phone; + + if (Cache::has($cooldownKey)) { + return response()->json([ + 'status' => false, + 'message' => 'Please wait before resending OTP' + ], 429); + } + + $otp = rand(100000, 999999); + + Cache::put("otp_$phone", $otp, now()->addMinutes(2)); + Cache::put($cooldownKey, true, now()->addSeconds(30)); + + return response()->json([ + 'status' => true, + 'message' => 'OTP resent successfully', + 'otp' => $otp + ]); + } + + public function getRegistrationJson($id) + { + $registration = Registration::with('sessions.shots')->findOrFail($id); + + return response()->json([ + 'registration' => [ + 'id' => $registration->id, + 'name' => $registration->name, + 'email' => $registration->email, + 'phone' => $registration->phone, + 'total_score' => $registration->total_score, + 'today_goals' => optional( + $registration->sessions()->whereDate('play_date', today())->first() + )?->getShotArray() + ] + ]); + } + + public function recordShot(Request $request) + { + $request->validate([ + 'session_id' => 'required|exists:game_sessions,id', + 'shot_number' => 'required|integer|in:1,2,3', + 'result' => 'required|boolean', + ]); + + $session = GameSession::with('registration')->findOrFail($request->session_id); + + if ($session->shots()->where('shot_number', $request->shot_number)->exists()) { + return response()->json(['status' => 'error', 'message' => 'Shot already recorded.'], 409); + } + + GameShot::create([ + 'game_session_id' => $session->id, + 'shot_number' => $request->shot_number, + 'result' => $request->result, + ]); + + $sessionScore = $session->calculateScore(); + $session->update(['score' => $sessionScore]); + + $registration = $session->registration; + $registration->update(['total_score' => $registration->sessions()->sum('score')]); + + return response()->json([ + 'status' => 'ok', + 'total_score' => $registration->fresh()->total_score, + ]); + } + + public function recordShots(Request $request) + { + $request->validate([ + 'session_id' => 'required|exists:game_sessions,id', + 'shots' => 'required|array|size:3', + 'shots.*' => 'boolean', + ]); + + $session = GameSession::with('registration')->findOrFail($request->session_id); + + // Prevent re-recording + if ($session->isComplete()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Shots already recorded for this session.' + ], 409); + } + + // Store the 3 shots + foreach ($request->shots as $index => $result) { + GameShot::create([ + 'game_session_id' => $session->id, + 'shot_number' => $index + 1, + 'result' => $result, + ]); + } + + // Recalculate and update scores + $sessionScore = $session->calculateScore(); + $session->update(['score' => $sessionScore]); + + $registration = $session->registration; + $registration->increment('total_score', $sessionScore); + + return response()->json([ + 'status' => 'ok', + 'session_score' => $sessionScore, + 'total_score' => $registration->fresh()->total_score, + ]); + } + + //Leaderboard + public function leaderboard() + { + $students = Registration::withCount('sessions') + ->orderByDesc('total_score') + ->orderBy('name') + ->paginate(20); + + $maxScore = Registration::max('total_score') ?? 0; + $total = Registration::count(); + + $data['students'] = $students; + $data['maxScore'] = $maxScore; + $data['total'] = $total; + + return view('leaderboard', $data); + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/ScoreboardController.php b/app/Http/Controllers/ScoreboardController.php new file mode 100644 index 0000000..979513b --- /dev/null +++ b/app/Http/Controllers/ScoreboardController.php @@ -0,0 +1,63 @@ +validate(['registration_id' => 'required|exists:registrations,id']); + session(['scoreboard_player_id' => $request->registration_id]); + return response()->json(['status' => 'ok']); + } + + public function state() + { + $id = session('scoreboard_player_id'); + + if (!$id) { + return response()->json(['player' => null, 'leaderboard' => $this->leaderboard()]); + } + + $reg = Registration::with([ + 'sessions' => fn($q) => $q->whereDate('play_date', today())->with('shots') + ])->findOrFail($id); + + $todaySession = $reg->sessions->first(); + $shots = $todaySession + ? $todaySession->shots->sortBy('shot_number')->map(fn($s) => (bool)$s->result)->values()->toArray() + : []; + + return response()->json([ + 'player' => [ + 'id' => $reg->id, + 'name' => $reg->name, + 'total_score' => $reg->total_score, + 'shots' => $shots, + 'session_score' => $todaySession?->calculateScore() ?? 0, + ], + 'leaderboard' => $this->leaderboard(), + ]); + } + + private function leaderboard(): array + { + return Registration::orderByDesc('total_score') + ->limit(5) + ->get(['id', 'name', 'total_score']) + ->map(fn($r, $i) => [ + 'rank' => $i + 1, + 'name' => $r->name, + 'total_score' => $r->total_score, + ]) + ->toArray(); + } +} diff --git a/app/Http/Requests/Auth/LoginRequest.php b/app/Http/Requests/Auth/LoginRequest.php new file mode 100644 index 0000000..711e0a1 --- /dev/null +++ b/app/Http/Requests/Auth/LoginRequest.php @@ -0,0 +1,86 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => ['required', 'string', 'email'], + 'password' => ['required', 'string'], + ]; + } + + /** + * Attempt to authenticate the request's credentials. + * + * @throws ValidationException + */ + public function authenticate(): void + { + $this->ensureIsNotRateLimited(); + + if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the login request is not rate limited. + * + * @throws ValidationException + */ + public function ensureIsNotRateLimited(): void + { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout($this)); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the rate limiting throttle key for the request. + */ + public function throttleKey(): string + { + return Str::transliterate(Str::lower($this->string('email')).'|'.$this->ip()); + } +} diff --git a/app/Http/Requests/ProfileUpdateRequest.php b/app/Http/Requests/ProfileUpdateRequest.php new file mode 100644 index 0000000..e2202dd --- /dev/null +++ b/app/Http/Requests/ProfileUpdateRequest.php @@ -0,0 +1,31 @@ +|string> + */ + public function rules(): array + { + return [ + 'name' => ['required', 'string', 'max:255'], + 'email' => [ + 'required', + 'string', + 'lowercase', + 'email', + 'max:255', + Rule::unique(User::class)->ignore($this->user()->id), + ], + ]; + } +} diff --git a/app/Models/Comment.php b/app/Models/Comment.php new file mode 100644 index 0000000..4e3caf7 --- /dev/null +++ b/app/Models/Comment.php @@ -0,0 +1,39 @@ +belongsTo(Registration::class); + } + + /* + |--------------------------- + | Helper methods + |--------------------------- + */ + + // Optional: short preview for UI + public function getPreviewAttribute() + { + return strlen($this->comment) > 50 + ? substr($this->comment, 0, 50) . '...' + : $this->comment; + } +} \ No newline at end of file diff --git a/app/Models/GameSession.php b/app/Models/GameSession.php new file mode 100644 index 0000000..1870eb4 --- /dev/null +++ b/app/Models/GameSession.php @@ -0,0 +1,59 @@ +belongsTo(Registration::class); + } + + // Session has many shots (1 session = 3 shots) + public function shots() + { + return $this->hasMany(GameShot::class); + } + + /* + |--------------------------- + | Helper methods + |--------------------------- + */ + + // Get score as array like [1,0,1] + public function getShotArray() + { + return $this->shots() + ->orderBy('shot_number') + ->pluck('result') + ->toArray(); + } + + // Check if session is complete (3 shots done) + public function isComplete() + { + return $this->shots()->count() >= 3; + } + + // Calculate score from shots (reliable source) + public function calculateScore() + { + return $this->shots()->where('result', 1)->count(); + } +} diff --git a/app/Models/GameShot.php b/app/Models/GameShot.php new file mode 100644 index 0000000..932ee9a --- /dev/null +++ b/app/Models/GameShot.php @@ -0,0 +1,38 @@ +belongsTo(GameSession::class, 'game_session_id'); + } + + /* + |--------------------------- + | Helper methods + |--------------------------- + */ + + // Check if this shot is a goal + public function isGoal() + { + return (bool) $this->result; + } +} diff --git a/app/Models/Registration.php b/app/Models/Registration.php new file mode 100644 index 0000000..09b351f --- /dev/null +++ b/app/Models/Registration.php @@ -0,0 +1,48 @@ +hasMany(GameSession::class); + } + + // A student has many comments + public function comments() + { + return $this->hasMany(Comment::class); + } + + /* + |--------------------------- + | Helper methods + |--------------------------- + */ + + // Check if student already played today + public function playedToday(): bool + { + return $this->sessions() + ->whereDate('play_date', today()) + ->whereHas('shots', fn($q) => $q->havingRaw('COUNT(*) >= 3')) + ->exists(); + } +} \ No newline at end of file diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100644 index 0000000..33a0ef9 --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,60 @@ + */ + use HasFactory, Notifiable; + + /** + * The attributes that are mass assignable. + * + * @var list + */ + protected $fillable = [ + 'name', + 'role', + 'email', + 'password', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var list + */ + protected $hidden = [ + 'password', + 'remember_token', + ]; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + ]; + } + + public function isAdmin() + { + return $this->role === 'admin'; + } + + public function isCounselor() + { + return $this->role === 'counselor'; + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..452e6b6 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,24 @@ +handleCommand(new ArgvInput); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..c183276 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,18 @@ +withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + // + }) + ->withExceptions(function (Exceptions $exceptions): void { + // + })->create(); diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000..fc94ae6 --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,7 @@ +=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "shasum": "" + }, + "require": { + "php": "^8.2|^8.3|^8.4|^8.5" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2025-10-31T18:51:33+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" + }, + "require-dev": { + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-12-03T09:33:47+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.4", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:43:20+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.11.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "5af96f374e0ab4ebd747b8310888c99d3adb0a8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/5af96f374e0ab4ebd747b8310888c99d3adb0a8c", + "reference": "5af96f374e0ab4ebd747b8310888c99d3adb0a8c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^2.5", + "guzzlehttp/psr7": "^2.11", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.24" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "3.0.2", + "guzzlehttp/test-server": "^0.5", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.11.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2026-06-07T22:54:06+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "4360e982f87f5f258bf872d094647791db2f4c8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/4360e982f87f5f258bf872d094647791db2f4c8e", + "reference": "4360e982f87f5f258bf872d094647791db2f4c8e", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2026-06-02T12:23:43+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.11.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "bbb5e61349fa5cb822b3e87842b951088b76b81f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/bbb5e61349fa5cb822b3e87842b951088b76b81f", + "reference": "bbb5e61349fa5cb822b3e87842b951088b76b81f", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/polyfill-php80": "^1.24" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.52 || ^9.6.34" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.11.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2026-06-02T12:30:48+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.6", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "eef7f87bab6f204eba3c39224d8075c70c637946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/eef7f87bab6f204eba3c39224d8075c70c637946", + "reference": "eef7f87bab6f204eba3c39224d8075c70c637946", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.52 || ^9.6.34", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.6" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2026-05-23T22:00:21+00:00" + }, + { + "name": "laravel/framework", + "version": "v12.61.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "e8472ca9774452fe50841d9bdced060679f4d58d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/e8472ca9774452fe50841d9bdced060679f4d58d", + "reference": "e8472ca9774452fe50841d9bdced060679f4d58d", + "shasum": "" + }, + "require": { + "brick/math": "^0.11|^0.12|^0.13|^0.14", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.3.0", + "laravel/serializable-closure": "^1.3|^2.0", + "league/commonmark": "^2.8.1", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.2.0", + "symfony/error-handler": "^7.2.0", + "symfony/finder": "^7.2.0", + "symfony/http-foundation": "^7.2.0", + "symfony/http-kernel": "^7.2.0", + "symfony/mailer": "^7.2.0", + "symfony/mime": "^7.2.0", + "symfony/polyfill-php83": "^1.33", + "symfony/polyfill-php84": "^1.34", + "symfony/polyfill-php85": "^1.34", + "symfony/process": "^7.2.0", + "symfony/routing": "^7.2.0", + "symfony/uid": "^7.2.0", + "symfony/var-dumper": "^7.2.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/reflection": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "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", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^10.9.0", + "pda/pheanstalk": "^5.0.6|^7.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.1.41", + "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", + "predis/predis": "^2.3|^3.0", + "resend/resend-php": "^0.10.0|^1.0", + "symfony/cache": "^7.2.0", + "symfony/http-client": "^7.2.0", + "symfony/psr-http-message-bridge": "^7.2.0", + "symfony/translation": "^7.2.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.5.3|^12.0.1).", + "predis/predis": "Required to use the predis connector (^2.3|^3.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "12.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Reflection/helpers.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/", + "src/Illuminate/Reflection/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2026-06-04T14:22:52+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.18", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/a19af51bb144bf87f08397921fa619f85c7d4e72", + "reference": "a19af51bb144bf87f08397921fa619f85c7d4e72", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0|^8.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "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.18" + }, + "time": "2026-05-19T00:47:18+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.13", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "reference": "b566ee0dd251f3c4078bed003a7ce015f5ea6dce", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2026-04-16T14:03:50+00:00" + }, + { + "name": "laravel/tinker", + "version": "v2.11.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/c9f80cc835649b5c1842898fb043f8cc098dd741", + "reference": "c9f80cc835649b5c1842898fb043f8cc098dd741", + "shasum": "" + }, + "require": { + "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|^8.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "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|^12.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.11.1" + }, + "time": "2026-02-06T14:12:35+00:00" + }, + { + "name": "league/commonmark", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.9-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2026-03-19T13:16:38+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.34.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e", + "reference": "2daaac3b0d4c83ea7ed5d8586e786f5d00f3540e", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.34.0" + }, + "time": "2026-05-14T10:28:08+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.31.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" + }, + "time": "2026-01-23T15:30:45+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.16.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2024-09-21T08:32:55+00:00" + }, + { + "name": "league/uri", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "URN", + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc2141", + "rfc3986", + "rfc3987", + "rfc6570", + "rfc8141", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:22:25+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-08T20:05:35+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-01-02T08:56:05+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.11.4", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60", + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^v3.87.1", + "kylekatarnls/multi-tester": "^2.5.3", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbonphp.github.io/carbon/", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2026-04-07T09:57:54+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.5", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "require-dev": { + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.5" + }, + "time": "2026-02-23T03:47:12+00:00" + }, + { + "name": "nette/utils", + "version": "v4.1.4", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "reference": "7da6c396d7ebe142bc857c20479d5e70a5e1aac7", + "shasum": "" + }, + "require": { + "php": "8.2 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.5", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.1.4" + }, + "time": "2026-05-11T20:49:54+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.4.4 || ^8.0.4" + }, + "require-dev": { + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "It's like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2026-02-16T23:10:27+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:41:33+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.23", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4dcc0f08047d52bbde475eda481146fd8e27e1a4", + "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" + }, + "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "https://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.23" + }, + "time": "2026-05-23T13:41:31+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "8429c78ca35a09f27565311b98101e2826affde0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", + "reference": "8429c78ca35a09f27565311b98101e2826affde0", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.2" + }, + "time": "2025-12-14T04:43:48+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/674fa3b98e21531dd040e613479f5f6fa8f32111", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/console", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/85095d2573eaefaf35e40b9513a9bf09f72cd217", + "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2|^8.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-24T08:56:14+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "b75663ed96cf4756e28e3105476f220f92886cc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/b75663ed96cf4756e28e3105476f220f92886cc4", + "reference": "b75663ed96cf4756e28e3105476f220f92886cc4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-18T13:18:21+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-13T15:52:40+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", + "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e4a2e29753c7801f7a8340e066cfa788f3bc8101", + "reference": "e4a2e29753c7801f7a8340e066cfa788f3bc8101", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-18T13:18:21+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", + "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T13:30:16+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "e0be088d22278583a82da281886e8c3592fbf149" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", + "reference": "e0be088d22278583a82da281886e8c3592fbf149", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-24T13:12:05+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "bc354f47c62301e990b7874fa662326368508e2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/bc354f47c62301e990b7874fa662326368508e2c", + "reference": "bc354f47c62301e990b7874fa662326368508e2c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-24T11:20:33+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "9df847980c436451f4f51d1284491bb4356dd989" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9df847980c436451f4f51d1284491bb4356dd989", + "reference": "9df847980c436451f4f51d1284491bb4356dd989", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "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.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-27T08:31:43+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "5cefb712a25f320579615ba9e1942abaeade7dff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/5cefb712a25f320579615ba9e1942abaeade7dff", + "reference": "5cefb712a25f320579615ba9e1942abaeade7dff", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.4.12" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-20T07:20:23+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "a845722765c4f6b2ce88beaf4f4479975b186770" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/a845722765c4f6b2ce88beaf4f4479975b186770", + "reference": "a845722765c4f6b2ce88beaf4f4479975b186770", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T16:22:37+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", + "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T05:58:03+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "dc21118016c039a66235cf93d96b435ffb282412" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/dc21118016c039a66235cf93d96b435ffb282412", + "reference": "dc21118016c039a66235cf93d96b435ffb282412", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T15:22:23+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.38.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T13:48:31+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/14c5439eec4ccff081ac14eca2dc57feb2a66d92", + "reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "8339098cae28673c15cce00d80734af0453054e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/8339098cae28673c15cce00d80734af0453054e2", + "reference": "8339098cae28673c15cce00d80734af0453054e2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-26T02:25:22+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:19:22+00:00" + }, + { + "name": "symfony/process", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "f5804be144caceb570f6747519999636b664f24c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/f5804be144caceb570f6747519999636b664f24c", + "reference": "f5804be144caceb570f6747519999636b664f24c", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T16:05:06+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/3a162171bb008e5e0f15dce6581373a4c0e8390d", + "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-24T11:20:33+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-28T09:44:51+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/961683010db3b27ec6ebcd7308e6e1ee8fa7ffde", + "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-23T15:23:29+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.4.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "ada7578c30dd5feaa8259cff3e885069ea81ddde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/ada7578c30dd5feaa8259cff3e885069ea81ddde", + "reference": "ada7578c30dd5feaa8259cff3e885069ea81ddde", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5.3|^3.3" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.4.10" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-06T11:19:24+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0ab302977a952b42fd51475c4ebac81f8da0a95d", + "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-01-05T13:30:16+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "2676b524340abcfe4d6151ec698463cebafee439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/2676b524340abcfe4d6151ec698463cebafee439", + "reference": "2676b524340abcfe4d6151ec698463cebafee439", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.4.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-30T15:19:22+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.4.8" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-03-30T13:44:50+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" + }, + "time": "2025-12-02T11:56:42+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.4", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2025-12-27T19:49:13+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/8e1051fe39379367aecf014f41744ce7539a856f", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2026-04-26T05:33:54+00:00" + } + ], + "packages-dev": [ + { + "name": "barryvdh/laravel-debugbar", + "version": "v4.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/laravel-debugbar.git", + "reference": "3d76ea8d78b82225b92789de65fc630c1cd8e80c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/laravel-debugbar/zipball/3d76ea8d78b82225b92789de65fc630c1cd8e80c", + "reference": "3d76ea8d78b82225b92789de65fc630c1cd8e80c", + "shasum": "" + }, + "require": { + "illuminate/routing": "^11|^12|^13.0", + "illuminate/session": "^11|^12|^13.0", + "illuminate/support": "^11|^12|^13.0", + "php": "^8.2", + "php-debugbar/php-debugbar": "^3.7.2", + "php-debugbar/symfony-bridge": "^1.1" + }, + "require-dev": { + "larastan/larastan": "^3", + "laravel/octane": "^2", + "laravel/pennant": "^1", + "laravel/pint": "^1", + "laravel/telescope": "^5.16", + "livewire/livewire": "^3.7|^4", + "mockery/mockery": "^1.3.3", + "orchestra/testbench-dusk": "^9|^10|^11", + "php-debugbar/twig-bridge": "^2.0", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^11", + "shipmonk/phpstan-rules": "^4.3" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Debugbar": "Fruitcake\\LaravelDebugbar\\Facades\\Debugbar" + }, + "providers": [ + "Fruitcake\\LaravelDebugbar\\ServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Fruitcake\\LaravelDebugbar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "PHP Debugbar integration for Laravel", + "keywords": [ + "barryvdh", + "debug", + "debugbar", + "dev", + "laravel", + "profiler", + "webprofiler" + ], + "support": { + "issues": "https://github.com/fruitcake/laravel-debugbar/issues", + "source": "https://github.com/fruitcake/laravel-debugbar/tree/v4.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2026-06-04T07:54:01+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "laravel/breeze", + "version": "v2.4.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/breeze.git", + "reference": "4f20e7b2cc8d25daa85d8647241a89c8e0930305" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/breeze/zipball/4f20e7b2cc8d25daa85d8647241a89c8e0930305", + "reference": "4f20e7b2cc8d25daa85d8647241a89c8e0930305", + "shasum": "" + }, + "require": { + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/filesystem": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "illuminate/validation": "^11.0|^12.0|^13.0", + "php": "^8.2.0", + "symfony/console": "^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^11.0|^12.0|^13.0", + "orchestra/testbench-core": "^9.0|^10.0|^11.0", + "phpstan/phpstan": "^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Breeze\\BreezeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Breeze\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/breeze/issues", + "source": "https://github.com/laravel/breeze" + }, + "time": "2026-05-14T16:54:25+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0|^13.0", + "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", + "illuminate/log": "^10.24|^11.0|^12.0|^13.0", + "illuminate/process": "^10.24|^11.0|^12.0|^13.0", + "illuminate/support": "^10.24|^11.0|^12.0|^13.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0|^13.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", + "pestphp/pest": "^2.20|^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0|^8.0", + "symfony/yaml": "^6.3|^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-05-20T22:24:57+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.29.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/0770e9b7fafd50d4586881d456d6eb41c9247a80", + "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.95.1", + "illuminate/view": "^12.56.0", + "larastan/larastan": "^3.9.6", + "laravel-zero/framework": "^12.1.0", + "mockery/mockery": "^1.6.12", + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest": "^3.8.6", + "shipfastlabs/agent-detector": "^1.1.3" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "dev", + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2026-04-20T15:26:14+00:00" + }, + { + "name": "laravel/sail", + "version": "v1.62.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/sail.git", + "reference": "3aaeefc979f8ba6586fbc5b6e0b1b3638058f98e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/sail/zipball/3aaeefc979f8ba6586fbc5b6e0b1b3638058f98e", + "reference": "3aaeefc979f8ba6586fbc5b6e0b1b3638058f98e", + "shasum": "" + }, + "require": { + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0|^13.0", + "php": "^8.0", + "symfony/console": "^6.0|^7.0|^8.0", + "symfony/yaml": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0|^11.0", + "phpstan/phpstan": "^2.0" + }, + "bin": [ + "bin/sail" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sail\\SailServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Docker files for running a basic Laravel application.", + "keywords": [ + "docker", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/sail/issues", + "source": "https://github.com/laravel/sail" + }, + "time": "2026-05-27T04:02:01+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2024-05-16T03:13:13+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.4", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.8 || ^8.0.8" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.9.6", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0", + "laravel/pint": "^1.29.1", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1", + "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2026-04-21T14:04:20+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "php-debugbar/php-debugbar", + "version": "v3.7.6", + "source": { + "type": "git", + "url": "https://github.com/php-debugbar/php-debugbar.git", + "reference": "1690ee1728827f9deb4b60457fa387cf44672c56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/1690ee1728827f9deb4b60457fa387cf44672c56", + "reference": "1690ee1728827f9deb4b60457fa387cf44672c56", + "shasum": "" + }, + "require": { + "php": "^8.2", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6|^7|^8" + }, + "replace": { + "maximebf/debugbar": "self.version" + }, + "require-dev": { + "dbrekelmans/bdi": "^1.4", + "friendsofphp/php-cs-fixer": "^3.92", + "monolog/monolog": "^3.9", + "php-debugbar/doctrine-bridge": "^3@dev", + "php-debugbar/monolog-bridge": "^1@dev", + "php-debugbar/symfony-bridge": "^1@dev", + "php-debugbar/twig-bridge": "^2@dev", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^10", + "predis/predis": "^3.3", + "shipmonk/phpstan-rules": "^4.3", + "symfony/browser-kit": "^6.4|7.0", + "symfony/dom-crawler": "^6.4|^7", + "symfony/event-dispatcher": "^5.4|^6.4|^7.3|^8.0", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8.0", + "symfony/mailer": "^5.4|^6.4|^7.3|^8.0", + "symfony/panther": "^1|^2.1", + "twig/twig": "^3.11.2" + }, + "suggest": { + "php-debugbar/doctrine-bridge": "To integrate Doctrine with php-debugbar.", + "php-debugbar/monolog-bridge": "To integrate Monolog with php-debugbar.", + "php-debugbar/symfony-bridge": "To integrate Symfony with php-debugbar.", + "php-debugbar/twig-bridge": "To integrate Twig with php-debugbar." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Debug bar in the browser for php application", + "homepage": "https://github.com/php-debugbar/php-debugbar", + "keywords": [ + "debug", + "debug bar", + "debugbar", + "dev", + "profiler", + "toolbar" + ], + "support": { + "issues": "https://github.com/php-debugbar/php-debugbar/issues", + "source": "https://github.com/php-debugbar/php-debugbar/tree/v3.7.6" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2026-04-30T07:31:44+00:00" + }, + { + "name": "php-debugbar/symfony-bridge", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-debugbar/symfony-bridge.git", + "reference": "e37d2debe5d316408b00d0ab2688d9c2cf59b5ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-debugbar/symfony-bridge/zipball/e37d2debe5d316408b00d0ab2688d9c2cf59b5ad", + "reference": "e37d2debe5d316408b00d0ab2688d9c2cf59b5ad", + "shasum": "" + }, + "require": { + "php": "^8.2", + "php-debugbar/php-debugbar": "^3.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8.0" + }, + "require-dev": { + "dbrekelmans/bdi": "^1.4", + "phpunit/phpunit": "^10", + "symfony/browser-kit": "^6|^7", + "symfony/dom-crawler": "^6|^7", + "symfony/mailer": "^5.4|^6.4|^7.3|^8.0", + "symfony/panther": "^1|^2.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "DebugBar\\Bridge\\Symfony\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maxime Bouroumeau-Fuseau", + "email": "maxime.bouroumeau@gmail.com", + "homepage": "http://maximebf.com" + }, + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "Symfony bridge for PHP Debugbar", + "homepage": "https://github.com/php-debugbar/php-debugbar", + "keywords": [ + "debugbar", + "dev", + "symfony" + ], + "support": { + "issues": "https://github.com/php-debugbar/symfony-bridge/issues", + "source": "https://github.com/php-debugbar/symfony-bridge/tree/v1.1.0" + }, + "time": "2026-01-15T14:47:34+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "11.0.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.7.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.1", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.3.1" + }, + "require-dev": { + "phpunit/phpunit": "^11.5.46" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2025-12-24T07:01:01+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" + } + ], + "time": "2026-02-02T13:52:54+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "11.5.55", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00", + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.12", + "phpunit/php-file-iterator": "^5.1.1", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.3", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/recursion-context": "^6.0.3", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2026-02-18T12:37:06+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-19T07:56:08+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" + }, + { + "name": "sebastian/comparator", + "version": "6.3.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-01-24T09:26:40+00:00" + }, + { + "name": "sebastian/complexity", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" + }, + { + "name": "sebastian/diff", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:53:05+00:00" + }, + { + "name": "sebastian/environment", + "version": "7.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2025-05-21T11:55:47+00:00" + }, + { + "name": "sebastian/exporter", + "version": "6.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:12:51+00:00" + }, + { + "name": "sebastian/global-state", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:57:36+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:58:38+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:00:13+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:01:32+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:42:22+00:00" + }, + { + "name": "sebastian/type", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2025-08-09T06:55:48+00:00" + }, + { + "name": "sebastian/version", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-09T05:16:32+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.4.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "a7ec3b1156faf8815db7683ec7c1e7338e6f977c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a7ec3b1156faf8815db7683ec7c1e7338e6f977c", + "reference": "a7ec3b1156faf8815db7683ec7c1e7338e6f977c", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.4.13" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-05-25T06:06:12+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..423eed5 --- /dev/null +++ b/config/app.php @@ -0,0 +1,126 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', (string) env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..d7568ff --- /dev/null +++ b/config/auth.php @@ -0,0 +1,117 @@ + [ + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | which utilizes session storage plus the Eloquent user provider. + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | If you have multiple user tables or models you may configure multiple + | providers to represent the model / table. These providers may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => env('AUTH_MODEL', User::class), + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the number of seconds before a password confirmation + | window expires and users are asked to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..b32aead --- /dev/null +++ b/config/cache.php @@ -0,0 +1,117 @@ + env('CACHE_STORE', 'database'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "octane", + | "failover", "null" + | + */ + + 'stores' => [ + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + 'failover' => [ + 'driver' => 'failover', + 'stores' => [ + 'database', + 'array', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'), + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..64709ce --- /dev/null +++ b/config/database.php @@ -0,0 +1,184 @@ + env('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DB_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + 'transaction_mode' => 'DEFERRED', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + (PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + (PHP_VERSION_ID >= 80500 ? Mysql::ATTR_SSL_CA : PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => env('DB_SSLMODE', 'prefer'), + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..37d8fca --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,80 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. + | + | Supported drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app/private'), + 'serve' => true, + 'throw' => false, + 'report' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage', + 'visibility' => 'public', + 'throw' => false, + 'report' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + 'report' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..b09cb25 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,132 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. + | + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" + | + */ + + 'channels' => [ + + 'stack' => [ + 'driver' => 'stack', + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', env('APP_NAME', 'Laravel')), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'handler_with' => [ + 'stream' => 'php://stderr', + ], + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..e32e88d --- /dev/null +++ b/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'log'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" + | + */ + + 'mailers' => [ + + 'smtp' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'resend' => [ + 'transport' => 'resend', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + 'retry_after' => 60, + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', env('APP_NAME', 'Laravel')), + ], + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..79c2c0a --- /dev/null +++ b/config/queue.php @@ -0,0 +1,129 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", + | "deferred", "background", "failover", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), + 'block_for' => null, + 'after_commit' => false, + ], + + 'deferred' => [ + 'driver' => 'deferred', + ], + + 'background' => [ + 'driver' => 'background', + ], + + 'failover' => [ + 'driver' => 'failover', + 'connections' => [ + 'database', + 'deferred', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..6a90eb8 --- /dev/null +++ b/config/services.php @@ -0,0 +1,38 @@ + [ + 'key' => env('POSTMARK_API_KEY'), + ], + + 'resend' => [ + 'key' => env('RESEND_API_KEY'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..5b541b7 --- /dev/null +++ b/config/session.php @@ -0,0 +1,217 @@ + env('SESSION_DRIVER', 'database'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. + | + */ + + 'lifetime' => (int) env('SESSION_LIFETIME', 120), + + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. + | + */ + + 'encrypt' => env('SESSION_ENCRYPT', false), + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. + | + */ + + 'table' => env('SESSION_TABLE', 'sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. + | + | Affects: "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug((string) env('APP_NAME', 'laravel')).'-session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application, but you're free to change this when necessary. + | + */ + + 'path' => env('SESSION_PATH', '/'), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain without subdomains. Typically, this shouldn't be changed. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. It's unlikely you should disable this option. + | + */ + + 'http_only' => env('SESSION_HTTP_ONLY', true), + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..c4ceb07 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,45 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..05fb5d9 --- /dev/null +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,49 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..ed758bd --- /dev/null +++ b/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->integer('expiration')->index(); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->integer('expiration')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/database/migrations/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..425e705 --- /dev/null +++ b/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,57 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/2026_06_09_062637_add_roles_to_users_table.php b/database/migrations/2026_06_09_062637_add_roles_to_users_table.php new file mode 100644 index 0000000..bdf3be2 --- /dev/null +++ b/database/migrations/2026_06_09_062637_add_roles_to_users_table.php @@ -0,0 +1,30 @@ +enum('role', ['admin', 'counselor']) + ->default('counselor') + ->after('email'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('role'); + }); + } +}; diff --git a/database/migrations/2026_06_09_100719_create_registrations_table.php b/database/migrations/2026_06_09_100719_create_registrations_table.php new file mode 100644 index 0000000..aaedfd5 --- /dev/null +++ b/database/migrations/2026_06_09_100719_create_registrations_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('name'); + + $table->string('phone'); + + $table->string('email')->nullable(); + + $table->integer('total_score')->default(0); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('registrations'); + } +}; diff --git a/database/migrations/2026_06_09_100724_create_game_sessions_table.php b/database/migrations/2026_06_09_100724_create_game_sessions_table.php new file mode 100644 index 0000000..15d0b93 --- /dev/null +++ b/database/migrations/2026_06_09_100724_create_game_sessions_table.php @@ -0,0 +1,35 @@ +id(); + + $table->unsignedBigInteger('registration_id'); + + $table->date('play_date'); + $table->integer('score')->default(0); + + $table->timestamps(); + + $table->unique(['registration_id', 'play_date']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('game_sessions'); + } +}; diff --git a/database/migrations/2026_06_09_100810_create_game_shots_table.php b/database/migrations/2026_06_09_100810_create_game_shots_table.php new file mode 100644 index 0000000..5248d93 --- /dev/null +++ b/database/migrations/2026_06_09_100810_create_game_shots_table.php @@ -0,0 +1,33 @@ +id(); + + $table->unsignedBigInteger('game_session_id'); + + $table->unsignedTinyInteger('shot_number'); // 1–3 + $table->boolean('result'); // 1 = goal, 0 = miss + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('game_shots'); + } +}; diff --git a/database/migrations/2026_06_09_183551_create_comments_table.php b/database/migrations/2026_06_09_183551_create_comments_table.php new file mode 100644 index 0000000..8be35d5 --- /dev/null +++ b/database/migrations/2026_06_09_183551_create_comments_table.php @@ -0,0 +1,32 @@ +id(); + + $table->unsignedBigInteger('registration_id'); + + $table->text('comment'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('comments'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..6b901f8 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,25 @@ +create(); + + User::factory()->create([ + 'name' => 'Test User', + 'email' => 'test@example.com', + ]); + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..498c493 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3312 @@ +{ + "name": "score_and_win", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "@tailwindcss/vite": "^4.0.0", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.2", + "axios": "^1.11.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^2.0.0", + "postcss": "^8.4.31", + "tailwindcss": "^3.1.0", + "vite": "^7.0.7" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz", + "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz", + "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz", + "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz", + "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz", + "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz", + "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz", + "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz", + "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz", + "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz", + "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz", + "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz", + "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz", + "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz", + "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz", + "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz", + "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz", + "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz", + "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz", + "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz", + "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz", + "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz", + "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz", + "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz", + "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz", + "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz", + "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==", + "dev": true, + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", + "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", + "dev": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.21.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.0" + } + }, + "node_modules/@tailwindcss/node/node_modules/tailwindcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", + "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", + "dev": true + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", + "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", + "dev": true, + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-arm64": "4.3.0", + "@tailwindcss/oxide-darwin-x64": "4.3.0", + "@tailwindcss/oxide-freebsd-x64": "4.3.0", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", + "@tailwindcss/oxide-linux-x64-musl": "4.3.0", + "@tailwindcss/oxide-wasm32-wasi": "4.3.0", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", + "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", + "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", + "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", + "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", + "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", + "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", + "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", + "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", + "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", + "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.10.0", + "@emnapi/runtime": "^1.10.0", + "@emnapi/wasi-threads": "^1.2.1", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", + "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", + "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.0.tgz", + "integrity": "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==", + "dev": true, + "dependencies": { + "@tailwindcss/node": "4.3.0", + "@tailwindcss/oxide": "4.3.0", + "tailwindcss": "4.3.0" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tailwindcss/vite/node_modules/tailwindcss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", + "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true + }, + "node_modules/@vue/reactivity": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz", + "integrity": "sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==", + "dev": true, + "dependencies": { + "@vue/shared": "3.1.5" + } + }, + "node_modules/@vue/shared": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.1.5.tgz", + "integrity": "sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/alpinejs": { + "version": "3.15.12", + "resolved": "https://registry.npmjs.org/alpinejs/-/alpinejs-3.15.12.tgz", + "integrity": "sha512-nJvPAQVNPdZZ0NrExJ/kzQco3ijR8LwvCOadQecllESiqT4NyZ/57sN9V2XyvhlBGAbmlKYgeWZvYdKq99ij/Q==", + "dev": true, + "dependencies": { + "@vue/reactivity": "~3.1.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.34", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.34.tgz", + "integrity": "sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==", + "dev": true, + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001797", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz", + "integrity": "sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.368", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.368.tgz", + "integrity": "sha512-7RckJJK4uESJF9PxvfMWd3TGqIiieUTG4HxnKaKuIpGbcr+r2ZEB3g2gAhCP3Fqm42vJSzLfgab9eva/C4/XVw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.23.0.tgz", + "integrity": "sha512-yJN/BOOLxcOW2aQgeif9mSnaUB8KtvmMMp56oA1kx1CRfBKbhZm2pJ+NBY+3eOboHxix8lfjWpHE0Ei5U8RbSA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-2.1.0.tgz", + "integrity": "sha512-z+ck2BSV6KWtYcoIzk9Y5+p4NEjqM+Y4i8/H+VZRLq0OgNjW2DqyADquwYu5j8qRvaXwzNmfCWl1KrMlV1zpsg==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^7.0.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz", + "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.61.1", + "@rollup/rollup-android-arm64": "4.61.1", + "@rollup/rollup-darwin-arm64": "4.61.1", + "@rollup/rollup-darwin-x64": "4.61.1", + "@rollup/rollup-freebsd-arm64": "4.61.1", + "@rollup/rollup-freebsd-x64": "4.61.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.61.1", + "@rollup/rollup-linux-arm-musleabihf": "4.61.1", + "@rollup/rollup-linux-arm64-gnu": "4.61.1", + "@rollup/rollup-linux-arm64-musl": "4.61.1", + "@rollup/rollup-linux-loong64-gnu": "4.61.1", + "@rollup/rollup-linux-loong64-musl": "4.61.1", + "@rollup/rollup-linux-ppc64-gnu": "4.61.1", + "@rollup/rollup-linux-ppc64-musl": "4.61.1", + "@rollup/rollup-linux-riscv64-gnu": "4.61.1", + "@rollup/rollup-linux-riscv64-musl": "4.61.1", + "@rollup/rollup-linux-s390x-gnu": "4.61.1", + "@rollup/rollup-linux-x64-gnu": "4.61.1", + "@rollup/rollup-linux-x64-musl": "4.61.1", + "@rollup/rollup-openbsd-x64": "4.61.1", + "@rollup/rollup-openharmony-arm64": "4.61.1", + "@rollup/rollup-win32-arm64-msvc": "4.61.1", + "@rollup/rollup-win32-ia32-msvc": "4.61.1", + "@rollup/rollup-win32-x64-gnu": "4.61.1", + "@rollup/rollup-win32-x64-msvc": "4.61.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", + "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", + "dev": true, + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2ea7e1d --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://www.schemastore.org/package.json", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "@tailwindcss/vite": "^4.0.0", + "alpinejs": "^3.4.2", + "autoprefixer": "^10.4.2", + "axios": "^1.11.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^2.0.0", + "postcss": "^8.4.31", + "tailwindcss": "^3.1.0", + "vite": "^7.0.7" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..e7f0a48 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,36 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + + + + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..49c0612 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..b574a59 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,25 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Handle X-XSRF-Token Header + RewriteCond %{HTTP:x-xsrf-token} . + RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/assets/js/registrations.js b/public/assets/js/registrations.js new file mode 100644 index 0000000..3f7d7b5 --- /dev/null +++ b/public/assets/js/registrations.js @@ -0,0 +1,72 @@ +$(document).ready(function () { + + // MODAL OPEN + $('#newRegistrationBtn').click(() => { + $('#registrationModal').removeClass('hidden').addClass('flex'); + }); + + $('#closeRegistrationModal').click(() => { + $('#registrationModal').removeClass('flex').addClass('hidden'); + }); + + // SEND OTP + $('#sendOtpBtn').click(function () { + + $.post("/registrations/send-otp", { + _token: csrf_token, + phone: $('#phone').val() + }, function (res) { + + $('#otpPreview') + .removeClass('hidden') + .text("OTP: " + res.otp); + }); + + }); + + // VERIFY OTP + $('#verifyOtpBtn').click(function () { + + $.post("/registrations/verify-otp", { + _token: csrf_token, + phone: $('#phone').val(), + otp: $('#otp').val() + }, function (res) { + + if (res.status === 'needs_registration') { + $('#registrationModal').removeClass('flex').addClass('hidden'); + $('#registrationDetailsModal').removeClass('hidden').addClass('flex'); + return; + } + + if (res.status === 'session_created') { + location.reload(); + return; + } + + if (res.status === 'blocked') { + alert('Already played today'); + } + + }); + + }); + + // COMPLETE REGISTRATION + $('#completeRegistrationBtn').click(function () { + + $.post("/registrations/store", { + _token: csrf_token, + phone: $('#phone').val(), + name: $('#name').val(), + email: $('#email').val() + }, function (res) { + + if (res.status === 'session_created') { + location.reload(); + } + }); + + }); + +}); \ No newline at end of file diff --git a/public/assets/rosetta-logo.png b/public/assets/rosetta-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6394e6321cdeecf963ce969d1c4ca18c33c833ff GIT binary patch literal 13628 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

snjm6HKw> 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 %~KC*M5A>wl^NlL0xU9@$Pxw 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