diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 2ef26d305b..2112438807 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,6 @@ name: Bug report description: Report a problem you're experiencing labels: bug,unconfirmed,medium priority -projects: ['filamentphp/2'] body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/unexpected_major_version_breaking_change.yml b/.github/ISSUE_TEMPLATE/unexpected_major_version_breaking_change.yml index 0a6cfe40c2..f0ed679925 100644 --- a/.github/ISSUE_TEMPLATE/unexpected_major_version_breaking_change.yml +++ b/.github/ISSUE_TEMPLATE/unexpected_major_version_breaking_change.yml @@ -1,7 +1,6 @@ name: Missing v5 upgrade guide step description: If a breaking change is not documented in the upgrade guide and not automatically upgraded by the script, report it here labels: unexpected major version breaking change,unconfirmed,high priority -projects: ['filamentphp/2'] body: - type: markdown attributes: diff --git a/CLAUDE.md b/CLAUDE.md index 736bef652c..1544d5e02e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -262,10 +262,19 @@ Screenshots are in `docs-assets/screenshots/`. To add new screenshots: export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true export PUPPETEER_EXECUTABLE_PATH=$(which chromium) node script.js "schemas/layout/my-component/*" # Filter pattern + node script.js --parallel "tables/*" # Process in parallel (add =N for a specific worker count) ``` **Important:** The script expects `http://127.0.0.1:8000`. Don't use a custom port. + **Important:** Set up the app first with `php artisan migrate:fresh --seed && php artisan storage:link` — seeding also copies the file upload demos' sample images from `database/seed-images/` to the `public` disk. + + `--parallel` starts its own servers on ports 8001+ (no `php artisan serve` needed), each with its own copy of the seeded database, because many demos mutate the database on mount and would corrupt each other's screenshots if they shared one. The pristine database is restored before every page load, so each screenshot always sees freshly seeded data — this makes parallel mode the most reliable way to run large batches (in serial mode, a demo that truncates tables can 404 later entries, e.g. tenancy or resource pages, until you reseed). Screenshots using the `configure` option run serially after the parallel pool because they mutate a PHP file shared by every server. + + Schema entries without a `before` callback that share the same URL, viewport, and theme are captured from a single page load, and one browser process is shared across the whole run. If an entry needs an isolated page load (e.g. its demo mutates state when rendered), give it a `before` callback. + + Pages are captured with `prefers-reduced-motion: reduce` and with CSS animations, transitions, and the input caret disabled, so screenshots never depend on which animation frame they caught (e.g. spinning loading indicators, modal fade-ins, caret blinking). + 5. **Use in docs** with `` Screenshots are generated in `images/light/` and `images/dark/`. Use natural, realistic content - not test-like examples. diff --git a/docs-assets/app/.editorconfig b/docs-assets/app/.editorconfig index 8f0de65c56..6df84280f0 100644 --- a/docs-assets/app/.editorconfig +++ b/docs-assets/app/.editorconfig @@ -14,5 +14,5 @@ trim_trailing_whitespace = false [*.{yml,yaml}] indent_size = 2 -[docker-compose.yml] +[{compose,docker-compose}.{yml,yaml}] indent_size = 4 diff --git a/docs-assets/app/.env b/docs-assets/app/.env index f81e59ea20..f714c5d821 100644 --- a/docs-assets/app/.env +++ b/docs-assets/app/.env @@ -4,31 +4,50 @@ APP_KEY=base64:/RjsPfTKUG/cV+SQjSOfCfgFPZ85Zmwywiz5yevEZ0s= APP_DEBUG=true APP_URL=http://127.0.0.1:8000 +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 -BROADCAST_DRIVER=log -CACHE_DRIVER=file -FILESYSTEM_DISK=local -QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync + +CACHE_STORE=file +# 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=smtp -MAIL_HOST=mailpit -MAIL_PORT=1025 +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" @@ -38,16 +57,4 @@ AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false -PUSHER_APP_ID= -PUSHER_APP_KEY= -PUSHER_APP_SECRET= -PUSHER_HOST= -PUSHER_PORT=443 -PUSHER_SCHEME=https -PUSHER_APP_CLUSTER=mt1 - -VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" -VITE_PUSHER_HOST="${PUSHER_HOST}" -VITE_PUSHER_PORT="${PUSHER_PORT}" -VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" -VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" +VITE_APP_NAME="${APP_NAME}" diff --git a/docs-assets/app/.env.example b/docs-assets/app/.env.example index 478972c26c..08c525f612 100644 --- a/docs-assets/app/.env.example +++ b/docs-assets/app/.env.example @@ -4,36 +4,50 @@ 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=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=laravel -DB_USERNAME=root -DB_PASSWORD= +DB_CONNECTION=sqlite -BROADCAST_DRIVER=log -CACHE_DRIVER=file -FILESYSTEM_DISK=local -QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync + +CACHE_STORE=file +# 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=smtp -MAIL_HOST=mailpit -MAIL_PORT=1025 +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" @@ -43,16 +57,4 @@ AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false -PUSHER_APP_ID= -PUSHER_APP_KEY= -PUSHER_APP_SECRET= -PUSHER_HOST= -PUSHER_PORT=443 -PUSHER_SCHEME=https -PUSHER_APP_CLUSTER=mt1 - -VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" -VITE_PUSHER_HOST="${PUSHER_HOST}" -VITE_PUSHER_PORT="${PUSHER_PORT}" -VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" -VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" +VITE_APP_NAME="${APP_NAME}" diff --git a/docs-assets/app/.gitignore b/docs-assets/app/.gitignore index 08f90ef470..5f8138f0c2 100644 --- a/docs-assets/app/.gitignore +++ b/docs-assets/app/.gitignore @@ -1,19 +1,30 @@ +*.log +.DS_Store +.env.backup +.env.production +.phpactor.json +.phpunit.result.cache +/.codex +/.cursor/ +/.fleet +/.idea +/.nova /.phpunit.cache +/.vscode +/.zed +/auth.json /node_modules /public/build /public/css/filament +/public/fonts-manifest.dev.json /public/fonts/filament /public/hot /public/js/filament /public/storage /storage/*.key +/storage/pail /vendor +_ide_helper.php Homestead.json Homestead.yaml -auth.json -npm-debug.log -yarn-error.log -.phpunit.result.cache -/.fleet -/.idea -/.vscode +Thumbs.db diff --git a/docs-assets/app/.npmrc b/docs-assets/app/.npmrc index 7253a5ceee..495a6af998 100644 --- a/docs-assets/app/.npmrc +++ b/docs-assets/app/.npmrc @@ -1 +1,2 @@ -min-release-age=7 +ignore-scripts=true +audit=true diff --git a/docs-assets/app/README.md b/docs-assets/app/README.md index 3ed385a7df..5ad13779e0 100644 --- a/docs-assets/app/README.md +++ b/docs-assets/app/README.md @@ -25,29 +25,21 @@ Laravel is accessible, powerful, and provides tools required for large, robust a 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 may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. +In addition, [Laracasts](https://laracasts.com) 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. -If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 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. +You can also watch bite-sized lessons with real-world projects on [Laravel Learn](https://laravel.com/learn), where you will be guided through building a Laravel application from scratch while learning PHP fundamentals. -## Laravel Sponsors +## Agentic Development -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 [Patreon page](https://patreon.com/taylorotwell). +Laravel's predictable structure and conventions make it ideal for AI coding agents like Claude Code, Cursor, and GitHub Copilot. Install [Laravel Boost](https://laravel.com/docs/ai) to supercharge your AI workflow: -### Premium Partners +```bash +composer require laravel/boost --dev -- **[Vehikl](https://vehikl.com/)** -- **[Tighten Co.](https://tighten.co)** -- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** -- **[64 Robots](https://64robots.com)** -- **[Cubet Techno Labs](https://cubettech.com)** -- **[Cyber-Duck](https://cyber-duck.co.uk)** -- **[Many](https://www.many.co.uk)** -- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** -- **[DevSquad](https://devsquad.com)** -- **[Curotec](https://www.curotec.com/services/technologies/laravel/)** -- **[OP.GG](https://op.gg)** -- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** -- **[Lendio](https://lendio.com)** +php artisan boost:install +``` + +Boost provides your agent 15+ tools and skills that help agents build Laravel applications while following best practices. ## Contributing diff --git a/docs-assets/app/app/Console/Kernel.php b/docs-assets/app/app/Console/Kernel.php deleted file mode 100644 index 4c1dd5abf1..0000000000 --- a/docs-assets/app/app/Console/Kernel.php +++ /dev/null @@ -1,27 +0,0 @@ -command('inspire')->hourly(); - } - - /** - * Register the commands for the application. - */ - protected function commands(): void - { - $this->load(__DIR__ . '/Commands'); - - require base_path('routes/console.php'); - } -} diff --git a/docs-assets/app/app/Exceptions/Handler.php b/docs-assets/app/app/Exceptions/Handler.php deleted file mode 100644 index 0a029220bc..0000000000 --- a/docs-assets/app/app/Exceptions/Handler.php +++ /dev/null @@ -1,49 +0,0 @@ -, LogLevel::*> - */ - protected $levels = [ - // - ]; - - /** - * A list of the exception types that are not reported. - * - * @var array> - */ - protected $dontReport = [ - // - ]; - - /** - * A list of the inputs that are never flashed to the session on validation exceptions. - * - * @var array - */ - protected $dontFlash = [ - 'current_password', - 'password', - 'password_confirmation', - ]; - - /** - * Register the exception handling callbacks for the application. - */ - public function register(): void - { - $this->reportable(function (Throwable $e): void { - // - }); - } -} diff --git a/docs-assets/app/app/Http/Kernel.php b/docs-assets/app/app/Http/Kernel.php deleted file mode 100644 index 707f8f1a18..0000000000 --- a/docs-assets/app/app/Http/Kernel.php +++ /dev/null @@ -1,89 +0,0 @@ - - */ - protected $middleware = [ - // \App\Http\Middleware\TrustHosts::class, - TrustProxies::class, - HandleCors::class, - PreventRequestsDuringMaintenance::class, - ValidatePostSize::class, - TrimStrings::class, - ConvertEmptyStringsToNull::class, - ]; - - /** - * The application's route middleware groups. - * - * @var array> - */ - protected $middlewareGroups = [ - 'web' => [ - EncryptCookies::class, - AddQueuedCookiesToResponse::class, - StartSession::class, - ShareErrorsFromSession::class, - VerifyCsrfToken::class, - SubstituteBindings::class, - ], - - 'api' => [ - // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, - ThrottleRequests::class . ':api', - SubstituteBindings::class, - ], - ]; - - /** - * The application's middleware aliases. - * - * Aliases may be used to conveniently assign middleware to routes and groups. - * - * @var array - */ - protected $middlewareAliases = [ - 'auth' => Authenticate::class, - 'auth.basic' => AuthenticateWithBasicAuth::class, - 'auth.session' => AuthenticateSession::class, - 'cache.headers' => SetCacheHeaders::class, - 'can' => Authorize::class, - 'guest' => RedirectIfAuthenticated::class, - 'password.confirm' => RequirePassword::class, - 'signed' => ValidateSignature::class, - 'throttle' => ThrottleRequests::class, - 'verified' => EnsureEmailIsVerified::class, - ]; -} diff --git a/docs-assets/app/app/Http/Middleware/Authenticate.php b/docs-assets/app/app/Http/Middleware/Authenticate.php deleted file mode 100644 index d4ef6447a9..0000000000 --- a/docs-assets/app/app/Http/Middleware/Authenticate.php +++ /dev/null @@ -1,17 +0,0 @@ -expectsJson() ? null : route('login'); - } -} diff --git a/docs-assets/app/app/Http/Middleware/EncryptCookies.php b/docs-assets/app/app/Http/Middleware/EncryptCookies.php deleted file mode 100644 index 867695bdcf..0000000000 --- a/docs-assets/app/app/Http/Middleware/EncryptCookies.php +++ /dev/null @@ -1,17 +0,0 @@ - - */ - protected $except = [ - // - ]; -} diff --git a/docs-assets/app/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/docs-assets/app/app/Http/Middleware/PreventRequestsDuringMaintenance.php deleted file mode 100644 index 74cbd9a9ea..0000000000 --- a/docs-assets/app/app/Http/Middleware/PreventRequestsDuringMaintenance.php +++ /dev/null @@ -1,17 +0,0 @@ - - */ - protected $except = [ - // - ]; -} diff --git a/docs-assets/app/app/Http/Middleware/RedirectIfAuthenticated.php b/docs-assets/app/app/Http/Middleware/RedirectIfAuthenticated.php deleted file mode 100644 index b92e43f7ec..0000000000 --- a/docs-assets/app/app/Http/Middleware/RedirectIfAuthenticated.php +++ /dev/null @@ -1,30 +0,0 @@ -check()) { - return redirect(RouteServiceProvider::HOME); - } - } - - return $next($request); - } -} diff --git a/docs-assets/app/app/Http/Middleware/TrimStrings.php b/docs-assets/app/app/Http/Middleware/TrimStrings.php deleted file mode 100644 index 88cadcaaf2..0000000000 --- a/docs-assets/app/app/Http/Middleware/TrimStrings.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - protected $except = [ - 'current_password', - 'password', - 'password_confirmation', - ]; -} diff --git a/docs-assets/app/app/Http/Middleware/TrustHosts.php b/docs-assets/app/app/Http/Middleware/TrustHosts.php deleted file mode 100644 index c9c58bddce..0000000000 --- a/docs-assets/app/app/Http/Middleware/TrustHosts.php +++ /dev/null @@ -1,20 +0,0 @@ - - */ - public function hosts(): array - { - return [ - $this->allSubdomainsOfApplicationUrl(), - ]; - } -} diff --git a/docs-assets/app/app/Http/Middleware/TrustProxies.php b/docs-assets/app/app/Http/Middleware/TrustProxies.php deleted file mode 100644 index 3391630ecc..0000000000 --- a/docs-assets/app/app/Http/Middleware/TrustProxies.php +++ /dev/null @@ -1,28 +0,0 @@ -|string|null - */ - protected $proxies; - - /** - * The headers that should be used to detect proxies. - * - * @var int - */ - protected $headers = - Request::HEADER_X_FORWARDED_FOR | - Request::HEADER_X_FORWARDED_HOST | - Request::HEADER_X_FORWARDED_PORT | - Request::HEADER_X_FORWARDED_PROTO | - Request::HEADER_X_FORWARDED_AWS_ELB; -} diff --git a/docs-assets/app/app/Http/Middleware/ValidateSignature.php b/docs-assets/app/app/Http/Middleware/ValidateSignature.php deleted file mode 100644 index 093bf64af8..0000000000 --- a/docs-assets/app/app/Http/Middleware/ValidateSignature.php +++ /dev/null @@ -1,22 +0,0 @@ - - */ - protected $except = [ - // 'fbclid', - // 'utm_campaign', - // 'utm_content', - // 'utm_medium', - // 'utm_source', - // 'utm_term', - ]; -} diff --git a/docs-assets/app/app/Http/Middleware/VerifyCsrfToken.php b/docs-assets/app/app/Http/Middleware/VerifyCsrfToken.php deleted file mode 100644 index 9e86521722..0000000000 --- a/docs-assets/app/app/Http/Middleware/VerifyCsrfToken.php +++ /dev/null @@ -1,17 +0,0 @@ - - */ - protected $except = [ - // - ]; -} diff --git a/docs-assets/app/app/Livewire/Infolists/Entries/ColorSchema.php b/docs-assets/app/app/Livewire/Infolists/Entries/ColorSchema.php index f087a3c4b1..dcb7b3f060 100644 --- a/docs-assets/app/app/Livewire/Infolists/Entries/ColorSchema.php +++ b/docs-assets/app/app/Livewire/Infolists/Entries/ColorSchema.php @@ -29,7 +29,7 @@ class ColorSchema ->state('#3490dc') ->copyable() ->copyMessage('Copied!') - ->copyMessageDuration(1500), + ->copyMessageDuration(30000), ]), ]; } diff --git a/docs-assets/app/app/Livewire/Infolists/Entries/TextSchema.php b/docs-assets/app/app/Livewire/Infolists/Entries/TextSchema.php index 82ddf425f4..59702c17ea 100644 --- a/docs-assets/app/app/Livewire/Infolists/Entries/TextSchema.php +++ b/docs-assets/app/app/Livewire/Infolists/Entries/TextSchema.php @@ -209,7 +209,7 @@ class TextSchema ->state('HGA3CH5AB345JD9MQ3') ->copyable() ->copyMessage('Copied!') - ->copyMessageDuration(1500), + ->copyMessageDuration(30000), ]), Group::make() ->id('textNumeric') diff --git a/docs-assets/app/app/Livewire/Infolists/EntriesOverview.php b/docs-assets/app/app/Livewire/Infolists/EntriesOverview.php index 640aa1ed10..afd906c156 100644 --- a/docs-assets/app/app/Livewire/Infolists/EntriesOverview.php +++ b/docs-assets/app/app/Livewire/Infolists/EntriesOverview.php @@ -61,7 +61,7 @@ class EntriesOverview extends Component implements HasSchemas ->size(TextSize::Large) ->copyable() ->copyMessage('SKU copied to clipboard!') - ->copyMessageDuration(1500) + ->copyMessageDuration(30000) ->badge() ->color('gray'), diff --git a/docs-assets/app/app/Livewire/NotificationsDemo.php b/docs-assets/app/app/Livewire/NotificationsDemo.php index d1b781f81c..e82ff436a6 100644 --- a/docs-assets/app/app/Livewire/NotificationsDemo.php +++ b/docs-assets/app/app/Livewire/NotificationsDemo.php @@ -13,11 +13,20 @@ class NotificationsDemo extends Component { public function mount(): void { - User::truncate(); DatabaseNotification::truncate(); - $user = User::factory()->create(); - auth()->login($user); + if (! auth()->check()) { + auth()->login(User::first()); + } + + // Send the notifications during mount, so the `database-notifications` + // modal already contains them when it first renders. Sending them from + // `openDatabaseNotifications()` instead would make the modal first + // render empty and rely on a Livewire refresh to morph them in, which + // races the screenshot capture. + if (request()->query('method') === 'openDatabaseNotifications') { + $this->sendDatabaseNotifications(); + } } public function success(): void @@ -102,6 +111,14 @@ class NotificationsDemo extends Component } public function openDatabaseNotifications() + { + $this->dispatch( + 'open-modal', + id: 'database-notifications', + ); + } + + protected function sendDatabaseNotifications(): void { $user = auth()->user(); @@ -129,12 +146,10 @@ class NotificationsDemo extends Component ->info() ->sendToDatabase($user); - $this->dispatch( - 'open-modal', - id: 'database-notifications', - ); - - $this->dispatch('databaseNotificationsSent'); + // Backdate the notifications so their relative timestamps always + // render as `2 minutes ago` in screenshots, instead of flip-flopping + // between `0 seconds ago` and `1 second ago` depending on timing. + DatabaseNotification::query()->update(['created_at' => now()->subMinutes(2)]); } public function call(string $method): void diff --git a/docs-assets/app/app/Livewire/TablesDemo.php b/docs-assets/app/app/Livewire/TablesDemo.php index bc63744063..c1bdc5818b 100644 --- a/docs-assets/app/app/Livewire/TablesDemo.php +++ b/docs-assets/app/app/Livewire/TablesDemo.php @@ -4,6 +4,7 @@ namespace App\Livewire; use App\Models\Post; use App\Models\User; +use App\Support\DemoData; use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\BulkAction; @@ -727,7 +728,7 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable TextColumn::make('email') ->copyable() ->copyMessage('Email address copied') - ->copyMessageDuration(1500), + ->copyMessageDuration(30000), ]); } @@ -1156,7 +1157,9 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable }) ->copyable() ->copyMessage('Color code copied') - ->copyMessageDuration(1500), + // Long enough that the message cannot expire before the + // screenshot is captured on a busy machine. + ->copyMessageDuration(30000), ]); } @@ -2330,6 +2333,22 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable { User::truncate(); Post::truncate(); + + $authorIds = collect([ + 'Dan Harrin' => 'dan@filamentphp.com', + 'Ryan Chandler' => 'ryan@filamentphp.com', + 'Zep Fietje' => 'zep@filamentphp.com', + 'Dennis Koch' => 'dennis@filamentphp.com', + 'Adam Weston' => 'adam@filamentphp.com', + ])->map(fn (string $email, string $name): int => User::query()->insertGetId([ + 'name' => $name, + 'email' => $email, + 'email_verified_at' => '2023-08-01 11:30:00', + 'password' => 'password', + 'created_at' => '2023-08-01 11:30:00', + 'updated_at' => '2023-08-01 11:30:00', + ]))->values()->all(); + Post::insert([ [ 'title' => 'What is Filament?', @@ -2337,7 +2356,7 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable 'description' => 'Find out what Filament is and how it can help you build your next project.', 'is_featured' => true, 'status' => 'published', - 'author_id' => User::factory()->create(['name' => 'Dan Harrin'])->id, + 'author_id' => $authorIds[0], 'rating' => 8.1, 'created_at' => '2025-02-10 09:15:00', 'updated_at' => '2025-02-10 09:15:00', @@ -2348,7 +2367,7 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable 'description' => 'Discover the top 5 best features of Filament and how they can help you build your next project.', 'is_featured' => false, 'status' => 'reviewing', - 'author_id' => User::factory()->create(['name' => 'Ryan Chandler'])->id, + 'author_id' => $authorIds[1], 'rating' => 9.3, 'created_at' => '2025-02-14 14:30:00', 'updated_at' => '2025-02-14 14:30:00', @@ -2359,7 +2378,7 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable 'description' => 'Learn how to build a great Filament plugin and get it featured in the official plugin directory.', 'is_featured' => true, 'status' => 'draft', - 'author_id' => User::factory()->create(['name' => 'Zep Fietje'])->id, + 'author_id' => $authorIds[2], 'rating' => 9.7, 'created_at' => '2025-02-18 11:00:00', 'updated_at' => '2025-02-18 11:00:00', @@ -2370,7 +2389,7 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable 'description' => 'Learn how to customize Filament\'s UI with a theme and make it your own.', 'is_featured' => false, 'status' => 'reviewing', - 'author_id' => User::factory()->create(['name' => 'Dennis Koch'])->id, + 'author_id' => $authorIds[3], 'rating' => 9.5, 'created_at' => '2025-02-22 16:45:00', 'updated_at' => '2025-02-22 16:45:00', @@ -2381,7 +2400,7 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable 'description' => 'Discover the latest Filament plugins that were released in August.', 'is_featured' => false, 'status' => 'published', - 'author_id' => User::factory()->create(['name' => 'Adam Weston'])->id, + 'author_id' => $authorIds[4], 'rating' => 8.4, 'created_at' => '2025-02-28 10:20:00', 'updated_at' => '2025-02-28 10:20:00', @@ -2389,7 +2408,7 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable ]); if ($hasSeededPosts) { - Post::factory()->count(45)->create(); + Post::insert(DemoData::posts($authorIds)); } return $table @@ -2492,7 +2511,7 @@ class TablesDemo extends Component implements HasActions, HasSchemas, HasTable ]), ], ]); - User::factory()->count(45)->create(); + User::insert(DemoData::users()); return $table ->query(User::query()) diff --git a/docs-assets/app/app/Models/Post.php b/docs-assets/app/app/Models/Post.php index 0d23260f9a..40c90eb2ca 100644 --- a/docs-assets/app/app/Models/Post.php +++ b/docs-assets/app/app/Models/Post.php @@ -2,7 +2,6 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; @@ -11,7 +10,6 @@ use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model { - use HasFactory; use SoftDeletes; protected $guarded = []; diff --git a/docs-assets/app/app/Models/User.php b/docs-assets/app/app/Models/User.php index 6434b83571..ebe6ba94aa 100644 --- a/docs-assets/app/app/Models/User.php +++ b/docs-assets/app/app/Models/User.php @@ -9,19 +9,15 @@ use Filament\Auth\MultiFactor\Email\Contracts\HasEmailAuthentication; use Filament\Models\Contracts\FilamentUser; use Filament\Models\Contracts\HasTenants; use Filament\Panel; -use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Support\Collection; -use Laravel\Sanctum\HasApiTokens; class User extends Authenticatable implements FilamentUser, HasAppAuthentication, HasEmailAuthentication, HasTenants { - use HasApiTokens; - use HasFactory; use InteractsWithAppAuthentication; use InteractsWithEmailAuthentication; use Notifiable; diff --git a/docs-assets/app/app/Providers/AppServiceProvider.php b/docs-assets/app/app/Providers/AppServiceProvider.php index 4ebf86f959..d47275fe78 100644 --- a/docs-assets/app/app/Providers/AppServiceProvider.php +++ b/docs-assets/app/app/Providers/AppServiceProvider.php @@ -23,7 +23,7 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { - if (! request()?->query('no_auto_login')) { + if ((! $this->app->runningInConsole()) && (! request()->query('no_auto_login'))) { Auth::loginUsingId(1); } diff --git a/docs-assets/app/app/Providers/AuthServiceProvider.php b/docs-assets/app/app/Providers/AuthServiceProvider.php deleted file mode 100644 index 5522aa2fce..0000000000 --- a/docs-assets/app/app/Providers/AuthServiceProvider.php +++ /dev/null @@ -1,28 +0,0 @@ - - */ - protected $policies = [ - // 'App\Models\Model' => 'App\Policies\ModelPolicy', - ]; - - /** - * Register any authentication / authorization services. - */ - public function boot(): void - { - $this->registerPolicies(); - - // - } -} diff --git a/docs-assets/app/app/Providers/BroadcastServiceProvider.php b/docs-assets/app/app/Providers/BroadcastServiceProvider.php deleted file mode 100644 index 2be04f5d9d..0000000000 --- a/docs-assets/app/app/Providers/BroadcastServiceProvider.php +++ /dev/null @@ -1,19 +0,0 @@ -> - */ - protected $listen = [ - Registered::class => [ - SendEmailVerificationNotification::class, - ], - ]; - - /** - * Register any events for your application. - */ - public function boot(): void - { - // - } - - /** - * Determine if events and listeners should be automatically discovered. - */ - public function shouldDiscoverEvents(): bool - { - return false; - } -} diff --git a/docs-assets/app/app/Providers/Filament/AdminPanelProvider.php b/docs-assets/app/app/Providers/Filament/AdminPanelProvider.php index 9852a5b24a..7e70455d83 100644 --- a/docs-assets/app/app/Providers/Filament/AdminPanelProvider.php +++ b/docs-assets/app/app/Providers/Filament/AdminPanelProvider.php @@ -29,7 +29,7 @@ use Filament\Support\Enums\Width; use Filament\Support\Icons\Heroicon; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; -use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; +use Illuminate\Foundation\Http\Middleware\PreventRequestForgery; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; @@ -128,7 +128,7 @@ class AdminPanelProvider extends PanelProvider StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, - VerifyCsrfToken::class, + PreventRequestForgery::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, diff --git a/docs-assets/app/app/Providers/Filament/NavDemoPanelProvider.php b/docs-assets/app/app/Providers/Filament/NavDemoPanelProvider.php index 59c009fa3b..9d544cd7c2 100644 --- a/docs-assets/app/app/Providers/Filament/NavDemoPanelProvider.php +++ b/docs-assets/app/app/Providers/Filament/NavDemoPanelProvider.php @@ -12,7 +12,7 @@ use Filament\PanelProvider; use Filament\Support\Colors\Color; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; -use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; +use Illuminate\Foundation\Http\Middleware\PreventRequestForgery; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; @@ -34,7 +34,7 @@ class NavDemoPanelProvider extends PanelProvider StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, - VerifyCsrfToken::class, + PreventRequestForgery::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, diff --git a/docs-assets/app/app/Providers/Filament/TenancyDemoPanelProvider.php b/docs-assets/app/app/Providers/Filament/TenancyDemoPanelProvider.php index b4f9307335..5d38421c4c 100644 --- a/docs-assets/app/app/Providers/Filament/TenancyDemoPanelProvider.php +++ b/docs-assets/app/app/Providers/Filament/TenancyDemoPanelProvider.php @@ -20,7 +20,7 @@ use Filament\Support\Colors\Color; use Filament\Support\Icons\Heroicon; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; -use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; +use Illuminate\Foundation\Http\Middleware\PreventRequestForgery; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; @@ -79,7 +79,7 @@ class TenancyDemoPanelProvider extends PanelProvider StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, - VerifyCsrfToken::class, + PreventRequestForgery::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, diff --git a/docs-assets/app/app/Providers/Filament/TenantMenuGroupingDemoPanelProvider.php b/docs-assets/app/app/Providers/Filament/TenantMenuGroupingDemoPanelProvider.php index 2cf9fa2fc1..8ab378a446 100644 --- a/docs-assets/app/app/Providers/Filament/TenantMenuGroupingDemoPanelProvider.php +++ b/docs-assets/app/app/Providers/Filament/TenantMenuGroupingDemoPanelProvider.php @@ -17,7 +17,7 @@ use Filament\PanelProvider; use Filament\Support\Colors\Color; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; -use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken; +use Illuminate\Foundation\Http\Middleware\PreventRequestForgery; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; @@ -63,7 +63,7 @@ class TenantMenuGroupingDemoPanelProvider extends PanelProvider StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, - VerifyCsrfToken::class, + PreventRequestForgery::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, diff --git a/docs-assets/app/app/Providers/RouteServiceProvider.php b/docs-assets/app/app/Providers/RouteServiceProvider.php deleted file mode 100644 index c832df98f1..0000000000 --- a/docs-assets/app/app/Providers/RouteServiceProvider.php +++ /dev/null @@ -1,48 +0,0 @@ -configureRateLimiting(); - - $this->routes(function (): void { - Route::middleware('api') - ->prefix('api') - ->group(base_path('routes/api.php')); - - Route::middleware('web') - ->group(base_path('routes/web.php')); - }); - } - - /** - * Configure the rate limiters for the application. - */ - protected function configureRateLimiting(): void - { - RateLimiter::for('api', function (Request $request) { - return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); - }); - } -} diff --git a/docs-assets/app/app/Support/DemoData.php b/docs-assets/app/app/Support/DemoData.php new file mode 100644 index 0000000000..a41decd251 --- /dev/null +++ b/docs-assets/app/app/Support/DemoData.php @@ -0,0 +1,160 @@ + + */ + protected const array POSTS = [ + ['Getting Started with the Filament CLI', 'Learn how to scaffold resources, pages, and widgets straight from the command line.', 'published', 8.4, false], + ['Building a Blog in an Afternoon', 'A practical walkthrough of building a fully-featured blog admin with Filament.', 'published', 9.1, true], + ['Understanding Schemas', 'Explore how schemas power forms, infolists, and layouts across the framework.', 'published', 8.9, false], + ['A Deep Dive into Table Filters', 'Build powerful filtering experiences with select, ternary, and custom filters.', 'draft', 7.6, false], + ['Mastering Repeaters', 'Everything you need to know about managing repeatable form data.', 'published', 8.2, false], + ['Conditional Form Fields Explained', 'Show, hide, and disable fields reactively based on user input.', 'reviewing', 7.9, false], + ['Working with Select Relationships', 'Load, search, and create related records directly from a select field.', 'published', 8.6, false], + ['Optimizing Large Tables', 'Practical tips for keeping tables fast when datasets grow into the millions.', 'published', 9.3, true], + ['Custom Widgets from Scratch', 'Design and build your own dashboard widgets with Livewire.', 'draft', 6.8, false], + ['Authorization Patterns in Panels', 'Use policies and gates to control access to resources and pages.', 'published', 8.8, false], + ['Testing Filament Apps with Pest', 'Write expressive tests for forms, tables, and actions using Pest.', 'published', 9.0, false], + ['Global Search Under the Hood', 'How global search works and how to fine-tune its results.', 'reviewing', 7.2, false], + ['Theming with CSS Hooks', 'Customize the look of your panel using semantic CSS hook classes.', 'published', 8.1, false], + ['Import and Export Workflows', 'Let users import CSVs and export filtered data with built-in actions.', 'published', 8.5, false], + ['Notifications that Delight', 'Craft helpful flash and database notifications for your users.', 'draft', 6.5, false], + ['Multi-panel Architectures', 'When and how to split your application into multiple panels.', 'published', 7.8, false], + ['Wizard Forms for Onboarding', 'Guide users through complex flows with multi-step wizards.', 'published', 8.3, false], + ['Managing File Uploads', 'Configure disks, visibility, and image editing for upload fields.', 'reviewing', 7.5, false], + ['Relation Managers in Practice', 'Manage related records inline on your resource pages.', 'published', 8.7, false], + ['Custom Fields with Alpine.js', 'Build interactive custom form fields powered by Alpine.js.', 'published', 9.2, true], + ['Scheduled Reports with Widgets', 'Combine charts and queued jobs to deliver scheduled insights.', 'draft', 6.9, false], + ['Slug Generation Strategies', 'Generate unique, readable slugs for your content automatically.', 'published', 7.3, false], + ['Infolists for Read-only Views', 'Present record details beautifully without building a form.', 'published', 8.0, false], + ['Bulk Actions Done Right', 'Design safe, fast bulk operations for large selections.', 'reviewing', 7.7, false], + ['Dark Mode Best Practices', 'Ensure your customizations look great in both light and dark themes.', 'published', 8.9, false], + ['Reactive Forms Deep Dive', 'Understand partial rendering and field dependencies in forms.', 'published', 9.4, true], + ['Soft Deletes and Trash Filters', 'Give users a safety net with restorable, soft-deleted records.', 'published', 7.1, false], + ['Custom Pages Beyond CRUD', 'Build settings screens, reports, and dashboards as custom pages.', 'draft', 6.7, false], + ['Tenant-aware File Storage', 'Scope uploads per tenant with dynamic disk configuration.', 'published', 8.4, false], + ['Speeding up Livewire Requests', 'Profile and reduce payload sizes for snappier interactions.', 'published', 8.6, false], + ['Data Integrity with Form Validation', 'Combine client hints and server rules for trustworthy input.', 'reviewing', 7.4, false], + ['Charts that Tell a Story', 'Choose the right chart type and polish it for your dashboard.', 'published', 8.2, false], + ['Reusable Form Components', 'Extract shared field groups into composable schema components.', 'published', 7.9, false], + ['Handling Money and Currencies', 'Store, format, and total monetary values without rounding errors.', 'published', 9.0, false], + ['Keyboard Shortcuts for Power Users', 'Add key bindings that make your admin fly.', 'draft', 6.4, false], + ['Audit Trails with Model Events', 'Track who changed what with lightweight event listeners.', 'published', 8.1, false], + ['Localizing your Panel', 'Translate labels, notifications, and validation messages.', 'reviewing', 7.0, false], + ['Zero-downtime Deployments', 'Ship updates safely with health checks and graceful restarts.', 'published', 8.8, false], + ['Designing Friendly Empty States', 'Turn blank tables into helpful calls to action.', 'published', 7.6, false], + ['API Tokens for Integrations', 'Issue and revoke tokens for third-party integrations securely.', 'draft', 6.6, false], + ['Query Builder Power Tips', 'Let users compose complex constraints with the query builder.', 'published', 8.5, false], + ['Accessible Admin Interfaces', 'Practical accessibility wins for keyboard and screen-reader users.', 'published', 9.6, true], + ['Caching Expensive Dashboards', 'Keep dashboards fresh without hammering your database.', 'reviewing', 7.8, false], + ['From Spreadsheet to Admin Panel', 'Migrate a team off spreadsheets with importers and validation.', 'published', 8.3, false], + ['Writing a Filament Plugin', 'Package your components and share them with the community.', 'published', 9.1, false], + ]; + + /** + * @var array + */ + protected const array USERS = [ + ['Aisha Patel', 'Developer'], + ['Marcus Webb', 'Designer'], + ['Elena Petrova', 'Product Manager'], + ['Tom Hardwick', 'QA Engineer'], + ['Priya Sharma', 'Marketing Lead'], + ['Lucas Meyer', 'Support Specialist'], + ['Sofia Rossi', 'Developer'], + ['James Okafor', 'Designer'], + ['Hannah Berg', 'Product Manager'], + ['Mateo Alvarez', 'QA Engineer'], + ['Grace Chen', 'Marketing Lead'], + ['Oliver Nowak', 'Support Specialist'], + ['Amara Diallo', 'Developer'], + ['Felix Wagner', 'Designer'], + ['Isla MacLeod', 'Product Manager'], + ['Noah Fischer', 'QA Engineer'], + ['Leila Haddad', 'Marketing Lead'], + ['Ethan Brooks', 'Support Specialist'], + ['Mia Kowalski', 'Developer'], + ['Ravi Menon', 'Designer'], + ['Clara Lindberg', 'Product Manager'], + ['Sam Whitfield', 'QA Engineer'], + ['Yuki Tanaka', 'Marketing Lead'], + ['Nina Novak', 'Support Specialist'], + ['Leo Marchetti', 'Developer'], + ['Freya Jensen', 'Designer'], + ['Omar Farouk', 'Product Manager'], + ['Lucy Tran', 'QA Engineer'], + ['Hugo Moreau', 'Marketing Lead'], + ['Ada Osei', 'Support Specialist'], + ['Jack Delaney', 'Developer'], + ['Rosa Fuentes', 'Designer'], + ['Finn Gallagher', 'Product Manager'], + ['Zara Ahmed', 'QA Engineer'], + ['Max Keller', 'Marketing Lead'], + ['Ines Costa', 'Support Specialist'], + ['Theo Van Dijk', 'Developer'], + ['Lily Zhang', 'Designer'], + ['Arthur Bell', 'Product Manager'], + ['Maja Nilsson', 'QA Engineer'], + ['Diego Ramos', 'Marketing Lead'], + ['Emil Novotny', 'Support Specialist'], + ['Sara Lindqvist', 'Developer'], + ['Chloe Barnett', 'Designer'], + ['Ben Carver', 'Product Manager'], + ]; + + /** + * @param array $authorIds + * @return array> + */ + public static function posts(array $authorIds): array + { + $baseDate = Carbon::parse('2025-01-28 09:00:00'); + + return collect(static::POSTS) + ->map(fn (array $post, int $index): array => [ + 'title' => $post[0], + 'slug' => Str::slug($post[0]), + 'description' => $post[1], + 'status' => $post[2], + 'rating' => $post[3], + 'is_featured' => $post[4], + 'author_id' => $authorIds[$index % count($authorIds)], + 'created_at' => $baseDate->copy()->subDays($index * 2)->toDateTimeString(), + 'updated_at' => $baseDate->copy()->subDays($index * 2)->toDateTimeString(), + ]) + ->all(); + } + + /** + * @return array> + */ + public static function users(): array + { + $baseDate = Carbon::parse('2024-08-01 09:00:00'); + + return collect(static::USERS) + ->map(fn (array $user, int $index): array => [ + 'name' => $user[0], + 'email' => Str::of($user[0])->lower()->replace(' ', '.')->append('@example.com')->toString(), + 'email_verified_at' => '2024-09-15 10:00:00', + 'password' => 'password', + 'phone' => sprintf('+1 (555) 234-%04d', 1000 + $index), + 'job' => $user[1], + 'created_at' => $baseDate->copy()->addDays($index)->toDateTimeString(), + 'updated_at' => $baseDate->copy()->addDays($index)->toDateTimeString(), + ]) + ->all(); + } +} diff --git a/docs-assets/app/artisan b/docs-assets/app/artisan index 67a3329b18..c35e31d6a2 100755 --- a/docs-assets/app/artisan +++ b/docs-assets/app/artisan @@ -1,53 +1,18 @@ #!/usr/bin/env php make(Illuminate\Contracts\Console\Kernel::class); - -$status = $kernel->handle( - $input = new Symfony\Component\Console\Input\ArgvInput, - new Symfony\Component\Console\Output\ConsoleOutput -); - -/* -|-------------------------------------------------------------------------- -| Shutdown The Application -|-------------------------------------------------------------------------- -| -| Once Artisan has finished running, we will fire off the shutdown events -| so that any final work may be done by the application before we shut -| down the process. This is the last thing to happen to the request. -| -*/ - -$kernel->terminate($input, $status); +$status = $app->handleCommand(new ArgvInput); exit($status); diff --git a/docs-assets/app/bootstrap/app.php b/docs-assets/app/bootstrap/app.php index b4a5fc3632..eb4696b449 100644 --- a/docs-assets/app/bootstrap/app.php +++ b/docs-assets/app/bootstrap/app.php @@ -1,60 +1,21 @@ singleton( - Illuminate\Contracts\Http\Kernel::class, - Kernel::class -); - -$app->singleton( - Illuminate\Contracts\Console\Kernel::class, - App\Console\Kernel::class -); - -$app->singleton( - ExceptionHandler::class, - Handler::class -); - -/* -|-------------------------------------------------------------------------- -| Return The Application -|-------------------------------------------------------------------------- -| -| This script returns the application instance. The instance is given to -| the calling script so we can separate the building of the instances -| from the actual running of the application and sending responses. -| -*/ - -return $app; +return Application::configure(basePath: dirname(__DIR__)) + ->withRouting( + web: __DIR__ . '/../routes/web.php', + commands: __DIR__ . '/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + // + }) + ->withExceptions(function (Exceptions $exceptions): void { + $exceptions->shouldRenderJsonWhen( + fn (Request $request) => $request->is('api/*'), + ); + })->create(); diff --git a/docs-assets/app/bootstrap/providers.php b/docs-assets/app/bootstrap/providers.php new file mode 100644 index 0000000000..82b435dd33 --- /dev/null +++ b/docs-assets/app/bootstrap/providers.php @@ -0,0 +1,15 @@ +=7.4" @@ -3738,9 +3758,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2026-07-04T14:30:18+00:00" }, { "name": "nunomaduro/termwind", @@ -3993,16 +4013,16 @@ }, { "name": "phiki/phiki", - "version": "v2.2.0", + "version": "v2.2.1", "source": { "type": "git", "url": "https://github.com/phikiphp/phiki.git", - "reference": "24375dbc474dbc484de7d53c6bab0bb9e198f647" + "reference": "0a9ff7efad9d433d9b173aff36b2a1905ef13c57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phikiphp/phiki/zipball/24375dbc474dbc484de7d53c6bab0bb9e198f647", - "reference": "24375dbc474dbc484de7d53c6bab0bb9e198f647", + "url": "https://api.github.com/repos/phikiphp/phiki/zipball/0a9ff7efad9d433d9b173aff36b2a1905ef13c57", + "reference": "0a9ff7efad9d433d9b173aff36b2a1905ef13c57", "shasum": "" }, "require": { @@ -4051,7 +4071,7 @@ "description": "Syntax highlighting using TextMate grammars in PHP.", "support": { "issues": "https://github.com/phikiphp/phiki/issues", - "source": "https://github.com/phikiphp/phiki/tree/v2.2.0" + "source": "https://github.com/phikiphp/phiki/tree/v2.2.1" }, "funding": [ { @@ -4063,7 +4083,7 @@ "type": "other" } ], - "time": "2026-04-01T15:56:08+00:00" + "time": "2026-07-22T19:51:40+00:00" }, { "name": "phpoption/phpoption", @@ -4674,16 +4694,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.23", + "version": "v0.12.24", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4" + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/4dcc0f08047d52bbde475eda481146fd8e27e1a4", - "reference": "4dcc0f08047d52bbde475eda481146fd8e27e1a4", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", "shasum": "" }, "require": { @@ -4747,9 +4767,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.23" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.24" }, - "time": "2026-05-23T13:41:31+00:00" + "time": "2026-06-29T15:41:09+00:00" }, { "name": "ralouphie/getallheaders", @@ -4873,20 +4893,20 @@ }, { "name": "ramsey/uuid", - "version": "4.9.2", + "version": "4.9.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "8429c78ca35a09f27565311b98101e2826affde0" + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", - "reference": "8429c78ca35a09f27565311b98101e2826affde0", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/1df15849d00943a67d677dc9cfd80795f038c9f8", + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8", "shasum": "" }, "require": { - "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", + "brick/math": ">=0.8.16 <=0.18", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -4945,9 +4965,9 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.9.2" + "source": "https://github.com/ramsey/uuid/tree/4.9.3" }, - "time": "2025-12-14T04:43:48+00:00" + "time": "2026-06-18T03:57:49+00:00" }, { "name": "ryangjchandler/blade-capture-directive", @@ -5369,47 +5389,49 @@ }, { "name": "symfony/console", - "version": "v7.4.13", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217" + "reference": "535e18a1b8925f6c01a55b171d157ab66c2ace15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/85095d2573eaefaf35e40b9513a9bf09f72cd217", - "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217", + "url": "https://api.github.com/repos/symfony/console/zipball/535e18a1b8925f6c01a55b171d157ab66c2ace15", + "reference": "535e18a1b8925f6c01a55b171d157ab66c2ace15", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.32", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2|^8.0" + "symfony/string": "^7.4.6|^8.0.6" }, "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher": "<8.1" }, "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" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5443,7 +5465,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.13" + "source": "https://github.com/symfony/console/tree/v8.1.2" }, "funding": [ { @@ -5463,7 +5485,7 @@ "type": "tidelift" } ], - "time": "2026-05-24T08:56:14+00:00" + "time": "2026-07-27T13:58:19+00:00" }, { "name": "symfony/css-selector", @@ -5536,16 +5558,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.7.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", - "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", "shasum": "" }, "require": { @@ -5583,7 +5605,7 @@ "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" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" }, "funding": [ { @@ -5603,37 +5625,36 @@ "type": "tidelift" } ], - "time": "2026-04-13T15:52:40+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/error-handler", - "version": "v7.4.8", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa" + "reference": "dc98404be5e8c949815e23fee1928f5de4f3f5d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", - "reference": "8dd79d8af777ee6cba2fd4d98da6ffb839f3c0fa", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/dc98404be5e8c949815e23fee1928f5de4f3f5d3", + "reference": "dc98404be5e8c949815e23fee1928f5de4f3f5d3", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", "symfony/polyfill-php85": "^1.32", - "symfony/var-dumper": "^6.4|^7.0|^8.0" + "symfony/var-dumper": "^7.4|^8.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "symfony/deprecation-contracts": "<2.5" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0", + "symfony/console": "^7.4|^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/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ @@ -5665,7 +5686,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.4.8" + "source": "https://github.com/symfony/error-handler/tree/v8.1.2" }, "funding": [ { @@ -5685,20 +5706,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-07-22T15:42:13+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v8.1.0", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102" + "reference": "c14c05a9e6da7f5e375e6efc28952c7e7dbddffb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f249ae3f680958b6f1f9dd76e5747cf0695b4102", - "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c14c05a9e6da7f5e375e6efc28952c7e7dbddffb", + "reference": "c14c05a9e6da7f5e375e6efc28952c7e7dbddffb", "shasum": "" }, "require": { @@ -5751,7 +5772,7 @@ "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/v8.1.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.2" }, "funding": [ { @@ -5771,20 +5792,20 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-07-22T15:42:13+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.7.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32" + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/ccba7060602b7fed0b03c85bf025257f76d9ef32", - "reference": "ccba7060602b7fed0b03c85bf025257f76d9ef32", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c7de7a00ffb67842132da02ea92988a39ccd9f4e", + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e", "shasum": "" }, "require": { @@ -5831,7 +5852,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.1" }, "funding": [ { @@ -5851,27 +5872,27 @@ "type": "tidelift" } ], - "time": "2026-01-05T13:30:16+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/finder", - "version": "v7.4.8", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e0be088d22278583a82da281886e8c3592fbf149" + "reference": "e2989e762c70f9490fa3a00a0ac0fae5aa97a531" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e0be088d22278583a82da281886e8c3592fbf149", - "reference": "e0be088d22278583a82da281886e8c3592fbf149", + "url": "https://api.github.com/repos/symfony/finder/zipball/e2989e762c70f9490fa3a00a0ac0fae5aa97a531", + "reference": "e2989e762c70f9490fa3a00a0ac0fae5aa97a531", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4.1" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0|^8.0" + "symfony/filesystem": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -5899,7 +5920,7 @@ "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" + "source": "https://github.com/symfony/finder/tree/v8.1.1" }, "funding": [ { @@ -5919,20 +5940,20 @@ "type": "tidelift" } ], - "time": "2026-03-24T13:12:05+00:00" + "time": "2026-06-27T09:05:56+00:00" }, { "name": "symfony/html-sanitizer", - "version": "v8.1.0", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "adf86ad7e51344c0b121c9f8a26c95ea35b2b8fc" + "reference": "09e1f2f9a3c8dcdca072587dc71999c1921c07cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/adf86ad7e51344c0b121c9f8a26c95ea35b2b8fc", - "reference": "adf86ad7e51344c0b121c9f8a26c95ea35b2b8fc", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/09e1f2f9a3c8dcdca072587dc71999c1921c07cb", + "reference": "09e1f2f9a3c8dcdca072587dc71999c1921c07cb", "shasum": "" }, "require": { @@ -5971,7 +5992,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v8.1.0" + "source": "https://github.com/symfony/html-sanitizer/tree/v8.1.1" }, "funding": [ { @@ -5991,41 +6012,40 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-06-06T11:11:44+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.4.13", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "bc354f47c62301e990b7874fa662326368508e2c" + "reference": "9943adbf5a64e2951a8d9eb0485310d55624f0e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/bc354f47c62301e990b7874fa662326368508e2c", - "reference": "bc354f47c62301e990b7874fa662326368508e2c", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9943adbf5a64e2951a8d9eb0485310d55624f0e8", + "reference": "9943adbf5a64e2951a8d9eb0485310d55624f0e8", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "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" + "doctrine/dbal": "<4.3" }, "require-dev": { - "doctrine/dbal": "^3.6|^4", + "doctrine/dbal": "^4.3", "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" + "symfony/cache": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6053,7 +6073,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.13" + "source": "https://github.com/symfony/http-foundation/tree/v8.1.2" }, "funding": [ { @@ -6073,78 +6093,69 @@ "type": "tidelift" } ], - "time": "2026-05-24T11:20:33+00:00" + "time": "2026-07-29T07:22:54+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.4.13", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9df847980c436451f4f51d1284491bb4356dd989" + "reference": "c7bb08dc26a7a7da68fb7ac1ce9de925e6464dbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9df847980c436451f4f51d1284491bb4356dd989", - "reference": "9df847980c436451f4f51d1284491bb4356dd989", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c7bb08dc26a7a7da68fb7ac1ce9de925e6464dbc", + "reference": "c7bb08dc26a7a7da68fb7ac1ce9de925e6464dbc", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "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/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^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/dependency-injection": "<8.1", "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/serializer": "<7.4.15|>=8.0,<8.0.15|>=8.1,<8.1.2", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.12" + "symfony/var-dumper": "<8.1", + "symfony/web-profiler-bundle": "<8.1", + "twig/twig": "<3.21" }, "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/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^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/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^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" + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^8.1", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21|^4.0" }, "type": "library", "autoload": { @@ -6172,7 +6183,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.13" + "source": "https://github.com/symfony/http-kernel/tree/v8.1.2" }, "funding": [ { @@ -6192,43 +6203,39 @@ "type": "tidelift" } ], - "time": "2026-05-27T08:31:43+00:00" + "time": "2026-07-29T11:54:54+00:00" }, { "name": "symfony/mailer", - "version": "v7.4.12", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "5cefb712a25f320579615ba9e1942abaeade7dff" + "reference": "221c7f326ace1ac2baee8331d829d5b7f04f4d53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/5cefb712a25f320579615ba9e1942abaeade7dff", - "reference": "5cefb712a25f320579615ba9e1942abaeade7dff", + "url": "https://api.github.com/repos/symfony/mailer/zipball/221c7f326ace1ac2baee8331d829d5b7f04f4d53", + "reference": "221c7f326ace1ac2baee8331d829d5b7f04f4d53", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.2", + "php": ">=8.4.1", "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/event-dispatcher": "^7.4|^8.0", + "symfony/mime": "^7.4|^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" + "symfony/http-client-contracts": "<2.5" }, "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" + "symfony/console": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/twig-bridge": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6256,7 +6263,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.4.12" + "source": "https://github.com/symfony/mailer/tree/v8.1.2" }, "funding": [ { @@ -6276,44 +6283,41 @@ "type": "tidelift" } ], - "time": "2026-05-20T07:20:23+00:00" + "time": "2026-07-28T07:35:25+00:00" }, { "name": "symfony/mime", - "version": "v7.4.13", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "a845722765c4f6b2ce88beaf4f4479975b186770" + "reference": "75f4779d4ec2e13f24a3a7e5d0347c340c7ca627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/a845722765c4f6b2ce88beaf4f4479975b186770", - "reference": "a845722765c4f6b2ce88beaf4f4479975b186770", + "url": "https://api.github.com/repos/symfony/mime/zipball/75f4779d4ec2e13f24a3a7e5d0347c340c7ca627", + "reference": "75f4779d4ec2e13f24a3a7e5d0347c340c7ca627", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.4.1", "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" + "phpdocumentor/type-resolver": "<1.5.1" }, "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" + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6345,7 +6349,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.4.13" + "source": "https://github.com/symfony/mime/tree/v8.1.2" }, "funding": [ { @@ -6365,7 +6369,7 @@ "type": "tidelift" } ], - "time": "2026-05-23T16:22:37+00:00" + "time": "2026-07-29T08:00:47+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6452,16 +6456,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.38.1", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", "shasum": "" }, "require": { @@ -6510,7 +6514,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.0" }, "funding": [ { @@ -6530,7 +6534,7 @@ "type": "tidelift" } ], - "time": "2026-05-26T05:58:03+00:00" + "time": "2026-07-28T08:25:59+00:00" }, { "name": "symfony/polyfill-intl-idn", @@ -6706,16 +6710,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.38.1", + "version": "v1.38.2", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92" + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/14c5439eec4ccff081ac14eca2dc57feb2a66d92", - "reference": "14c5439eec4ccff081ac14eca2dc57feb2a66d92", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", "shasum": "" }, "require": { @@ -6767,7 +6771,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" }, "funding": [ { @@ -6787,7 +6791,7 @@ "type": "tidelift" } ], - "time": "2026-05-26T12:51:13+00:00" + "time": "2026-05-27T06:59:30+00:00" }, { "name": "symfony/polyfill-php80", @@ -6874,17 +6878,17 @@ "time": "2026-04-10T16:19:22+00:00" }, { - "name": "symfony/polyfill-php83", + "name": "symfony/polyfill-php84", "version": "v1.38.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "8339098cae28673c15cce00d80734af0453054e2" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/8339098cae28673c15cce00d80734af0453054e2", - "reference": "8339098cae28673c15cce00d80734af0453054e2", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", "shasum": "" }, "require": { @@ -6902,7 +6906,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Polyfill\\Php84\\": "" }, "classmap": [ "Resources/stubs" @@ -6922,7 +6926,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -6931,7 +6935,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" }, "funding": [ { @@ -6955,16 +6959,16 @@ }, { "name": "symfony/polyfill-php85", - "version": "v1.38.1", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1" + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", - "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/255fab485aaa1006ed411040c42aecd7b5302d7a", + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a", "shasum": "" }, "require": { @@ -7011,7 +7015,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.41.0" }, "funding": [ { @@ -7031,7 +7035,87 @@ "type": "tidelift" } ], - "time": "2026-05-26T02:25:22+00:00" + "time": "2026-07-01T12:47:55+00:00" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/6bc356ed3d8dbfeea8f0de235e34d670704e880e", + "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e", + "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\\Php86\\": "" + }, + "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.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php86/tree/v1.41.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-07-02T13:42:24+00:00" }, { "name": "symfony/polyfill-uuid", @@ -7118,20 +7202,20 @@ }, { "name": "symfony/process", - "version": "v7.4.13", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "f5804be144caceb570f6747519999636b664f24c" + "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/f5804be144caceb570f6747519999636b664f24c", - "reference": "f5804be144caceb570f6747519999636b664f24c", + "url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", + "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4.1" }, "type": "library", "autoload": { @@ -7159,7 +7243,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.13" + "source": "https://github.com/symfony/process/tree/v8.1.0" }, "funding": [ { @@ -7179,38 +7263,33 @@ "type": "tidelift" } ], - "time": "2026-05-23T16:05:06+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/routing", - "version": "v7.4.13", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d" + "reference": "1058d4e13bb81dd9a6f7565686df7e13b880cdbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/3a162171bb008e5e0f15dce6581373a4c0e8390d", - "reference": "3a162171bb008e5e0f15dce6581373a4c0e8390d", + "url": "https://api.github.com/repos/symfony/routing/zipball/1058d4e13bb81dd9a6f7565686df7e13b880cdbd", + "reference": "1058d4e13bb81dd9a6f7565686df7e13b880cdbd", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "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" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7244,7 +7323,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.13" + "source": "https://github.com/symfony/routing/tree/v8.1.2" }, "funding": [ { @@ -7264,20 +7343,20 @@ "type": "tidelift" } ], - "time": "2026-05-24T11:20:33+00:00" + "time": "2026-07-22T15:42:13+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.7.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" + "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", - "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0", + "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0", "shasum": "" }, "require": { @@ -7331,7 +7410,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.7.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.7.1" }, "funding": [ { @@ -7351,20 +7430,20 @@ "type": "tidelift" } ], - "time": "2026-03-28T09:44:51+00:00" + "time": "2026-06-16T09:55:08+00:00" }, { "name": "symfony/string", - "version": "v8.1.0", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9" + "reference": "286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9", - "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9", + "url": "https://api.github.com/repos/symfony/string/zipball/286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc", + "reference": "286a76b7255e5cc4bf0101a0bc5388ecf1c38ccc", "shasum": "" }, "require": { @@ -7421,7 +7500,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.1.0" + "source": "https://github.com/symfony/string/tree/v8.1.2" }, "funding": [ { @@ -7441,20 +7520,20 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-07-28T07:35:25+00:00" }, { "name": "symfony/translation", - "version": "v8.1.0", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b2bd012ca28c4acae830ee1206a5b6e35dd99693" + "reference": "342b4218630dc2cf284cedcb2080c80b13404014" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b2bd012ca28c4acae830ee1206a5b6e35dd99693", - "reference": "b2bd012ca28c4acae830ee1206a5b6e35dd99693", + "url": "https://api.github.com/repos/symfony/translation/zipball/342b4218630dc2cf284cedcb2080c80b13404014", + "reference": "342b4218630dc2cf284cedcb2080c80b13404014", "shasum": "" }, "require": { @@ -7514,7 +7593,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v8.1.0" + "source": "https://github.com/symfony/translation/tree/v8.1.1" }, "funding": [ { @@ -7534,20 +7613,20 @@ "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2026-06-06T11:11:44+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.7.0", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d" + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/0ab302977a952b42fd51475c4ebac81f8da0a95d", - "reference": "0ab302977a952b42fd51475c4ebac81f8da0a95d", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/ccb206b98faccc511ebae8e5fad50f2dc0b30621", + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621", "shasum": "" }, "require": { @@ -7596,7 +7675,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.7.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.1" }, "funding": [ { @@ -7616,28 +7695,28 @@ "type": "tidelift" } ], - "time": "2026-01-05T13:30:16+00:00" + "time": "2026-06-05T06:23:12+00:00" }, { "name": "symfony/uid", - "version": "v7.4.9", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "2676b524340abcfe4d6151ec698463cebafee439" + "reference": "7393f157a55f7e70a4de0334435c55a5a8fe749a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2676b524340abcfe4d6151ec698463cebafee439", - "reference": "2676b524340abcfe4d6151ec698463cebafee439", + "url": "https://api.github.com/repos/symfony/uid/zipball/7393f157a55f7e70a4de0334435c55a5a8fe749a", + "reference": "7393f157a55f7e70a4de0334435c55a5a8fe749a", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4.1", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^6.4|^7.0|^8.0" + "symfony/console": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7674,7 +7753,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.4.9" + "source": "https://github.com/symfony/uid/tree/v8.1.0" }, "funding": [ { @@ -7694,36 +7773,36 @@ "type": "tidelift" } ], - "time": "2026-04-30T15:19:22+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.8", + "version": "v8.1.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd" + "reference": "865103cf742a039f34645b971fc3ace308d6c167" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/9510c3966f749a1d1ff0059e1eabef6cc621e7fd", - "reference": "9510c3966f749a1d1ff0059e1eabef6cc621e7fd", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/865103cf742a039f34645b971fc3ace308d6c167", + "reference": "865103cf742a039f34645b971fc3ace308d6c167", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4.1", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4", + "symfony/error-handler": "<7.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" + "symfony/console": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "twig/twig": "^3.12|^4.0" }, "bin": [ "Resources/bin/var-dump-server" @@ -7761,7 +7840,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.8" + "source": "https://github.com/symfony/var-dumper/tree/v8.1.2" }, "funding": [ { @@ -7781,7 +7860,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T13:44:50+00:00" + "time": "2026-07-22T15:42:13+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7840,16 +7919,16 @@ }, { "name": "ueberdosis/tiptap-php", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ueberdosis/tiptap-php.git", - "reference": "6ea321fa665080e1a72ac5f52dfab19f6a292e2d" + "reference": "74bfb7be1c8c6102b240f3879b7f984a6ab87b97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ueberdosis/tiptap-php/zipball/6ea321fa665080e1a72ac5f52dfab19f6a292e2d", - "reference": "6ea321fa665080e1a72ac5f52dfab19f6a292e2d", + "url": "https://api.github.com/repos/ueberdosis/tiptap-php/zipball/74bfb7be1c8c6102b240f3879b7f984a6ab87b97", + "reference": "74bfb7be1c8c6102b240f3879b7f984a6ab87b97", "shasum": "" }, "require": { @@ -7889,7 +7968,7 @@ ], "support": { "issues": "https://github.com/ueberdosis/tiptap-php/issues", - "source": "https://github.com/ueberdosis/tiptap-php/tree/2.1.0" + "source": "https://github.com/ueberdosis/tiptap-php/tree/2.1.1" }, "funding": [ { @@ -7905,20 +7984,20 @@ "type": "open_collective" } ], - "time": "2026-01-10T16:40:02+00:00" + "time": "2026-06-12T18:19:46+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.3", + "version": "v5.6.4", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "955e7815d677a3eaa7075231212f2110983adecc" + "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", - "reference": "955e7815d677a3eaa7075231212f2110983adecc", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/416df702837983f8d5ff48c9c3fee4f5f57b980b", + "reference": "416df702837983f8d5ff48c9c3fee4f5f57b980b", "shasum": "" }, "require": { @@ -7977,7 +8056,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.4" }, "funding": [ { @@ -7989,7 +8068,7 @@ "type": "tidelift" } ], - "time": "2025-12-27T19:49:13+00:00" + "time": "2026-07-06T19:11:50+00:00" }, { "name": "voku/portable-ascii", @@ -8067,69 +8146,6 @@ } ], "packages-dev": [ - { - "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", @@ -8253,17 +8269,244 @@ "time": "2025-04-30T06:54:44+00:00" }, { - "name": "laravel/pint", - "version": "v1.29.1", + "name": "laravel/agent-detector", + "version": "v2.0.2", "source": { "type": "git", - "url": "https://github.com/laravel/pint.git", - "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80" + "url": "https://github.com/laravel/agent-detector.git", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/0770e9b7fafd50d4586881d456d6eb41c9247a80", - "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80", + "url": "https://api.github.com/repos/laravel/agent-detector/zipball/90694b9256099591cf9e55d08c18ba7a00bf099f", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f", + "shasum": "" + }, + "require": { + "php": "^8.2.0" + }, + "require-dev": { + "laravel/pint": "^1.24.0", + "pestphp/pest": "^3.8.5|^4.1.0", + "pestphp/pest-plugin-type-coverage": "^3.0|^4.0.2", + "phpstan/phpstan": "^2.1.26", + "rector/rector": "^2.1.7", + "symfony/var-dumper": "^7.3.3" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Laravel\\AgentDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Detect if code is running in an AI agent or automated development environment", + "homepage": "https://github.com/laravel/agent-detector", + "keywords": [ + "Agent", + "ai", + "automation", + "claude", + "cursor", + "detection", + "devin", + "php" + ], + "support": { + "issues": "https://github.com/laravel/agent-detector/issues", + "source": "https://github.com/laravel/agent-detector" + }, + "time": "2026-04-29T18:32:34+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/pao", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/pao.git", + "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pao/zipball/322f22095f3639551b64db9a13dfd8ab09c8206b", + "reference": "322f22095f3639551b64db9a13dfd8ab09c8206b", + "shasum": "" + }, + "require": { + "laravel/agent-detector": "^2.0.2", + "php": "^8.3" + }, + "conflict": { + "laravel/framework": "<12.0.0", + "nunomaduro/collision": "<8.9.3", + "pestphp/pest": "<4.6.3 || >=6.0.0", + "phpunit/phpunit": "<12.5.23 || >=13.0.0 <13.1.7 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.23.0", + "laravel/pint": "^1.30.0", + "orchestra/testbench": "^10.11.0 || ^11.1.0", + "pestphp/pest": "^4.7.2 || ^5.0.1", + "pestphp/pest-plugin-type-coverage": "^4.0.4 || ^5.0.0", + "phpstan/phpstan": "^2.2.7", + "rector/rector": "^2.5.8", + "symfony/process": "^7.4.8 || ^8.1.0", + "symfony/var-dumper": "^7.4.8 || ^8.1.2" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Laravel\\Pao\\Drivers\\Pest\\Plugin" + ] + }, + "laravel": { + "providers": [ + "Laravel\\Pao\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Laravel\\Pao\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Agent-optimized output for PHP testing tools", + "keywords": [ + "Agent", + "PHPStan", + "ai", + "dev", + "paratest", + "pest", + "php", + "phpunit", + "rector", + "testing" + ], + "support": { + "issues": "https://github.com/laravel/pao/issues", + "source": "https://github.com/laravel/pao" + }, + "time": "2026-07-29T18:38:14+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.30.4", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "a96cb6eee2961905d2fce7207aefb80945bf6b28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/a96cb6eee2961905d2fce7207aefb80945bf6b28", + "reference": "a96cb6eee2961905d2fce7207aefb80945bf6b28", "shasum": "" }, "require": { @@ -8274,14 +8517,16 @@ "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.95.1", - "illuminate/view": "^12.56.0", - "larastan/larastan": "^3.9.6", + "composer/semver": "^3.4.4", + "friendsofphp/php-cs-fixer": "^3.95.18", + "illuminate/view": "^12.65.0", + "larastan/larastan": "^3.10.0", "laravel-zero/framework": "^12.1.0", + "laravel/agent-detector": "^2.0.2", + "laravel/prompts": "^0.3.22", "mockery/mockery": "^1.6.12", "nunomaduro/termwind": "^2.4.0", - "pestphp/pest": "^3.8.6", - "shipfastlabs/agent-detector": "^1.1.3" + "pestphp/pest": "^3.8.7" }, "bin": [ "builds/pint" @@ -8318,70 +8563,7 @@ "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.61.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/sail.git", - "reference": "68ef35015630fe510432e63e11e21749006df688" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/68ef35015630fe510432e63e11e21749006df688", - "reference": "68ef35015630fe510432e63e11e21749006df688", - "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-23T23:33:57+00:00" + "time": "2026-08-05T16:47:22+00:00" }, { "name": "mockery/mockery", @@ -8528,38 +8710,36 @@ }, { "name": "nunomaduro/collision", - "version": "v8.5.0", + "version": "v8.9.5", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/fb53eacd509a1d303858e2d20cfebf2d630254ec", + "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec", "shasum": "" }, "require": { - "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^2.1.0", + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", "php": "^8.2.0", - "symfony/console": "^7.1.5" + "symfony/console": "^7.4.14 || ^8.1.1" }, "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" }, "require-dev": { - "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.28.0", - "laravel/pint": "^1.18.1", - "laravel/sail": "^1.36.0", - "laravel/sanctum": "^4.0.3", - "laravel/tinker": "^2.10.0", - "orchestra/testbench-core": "^9.5.3", - "pestphp/pest": "^2.36.0 || ^3.4.0", - "sebastian/environment": "^6.1.0 || ^7.2.0" + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.10.0", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.20.0", + "laravel/pint": "^1.29.3", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.3.5", + "pestphp/pest": "^3.8.5 || ^4.7.5 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.1.2 || ^9.3.2" }, "type": "library", "extra": { @@ -8596,6 +8776,7 @@ "cli", "command-line", "console", + "dev", "error", "handling", "laravel", @@ -8621,7 +8802,7 @@ "type": "patreon" } ], - "time": "2024-10-15T16:06:32+00:00" + "time": "2026-07-15T19:09:14+00:00" }, { "name": "phar-io/manifest", @@ -8743,35 +8924,33 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.16", + "version": "12.5.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + "reference": "186dab580576598076de6818596d12b61801880e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/186dab580576598076de6818596d12b61801880e", + "reference": "186dab580576598076de6818596d12b61801880e", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", - "theseer/tokenizer": "^1.2.3" + "nikic/php-parser": "^5.7.0", + "php": ">=8.3", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.1.2", + "sebastian/lines-of-code": "^4.0.1", + "sebastian/version": "^6.0", + "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^12.5.28" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -8780,7 +8959,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1.x-dev" + "dev-main": "12.5.x-dev" } }, "autoload": { @@ -8809,40 +8988,52 @@ "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/10.1.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.7" }, "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": "2024-08-22T04:31:57+00:00" + "time": "2026-06-01T13:24:19+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -8870,36 +9061,48 @@ "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/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.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": "2023-08-31T06:24:48+00:00" + "time": "2026-02-02T14:04:18+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "suggest": { "ext-pcntl": "*" @@ -8907,7 +9110,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -8933,7 +9136,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" }, "funding": [ { @@ -8941,32 +9145,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2025-02-07T04:58:58+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -8993,7 +9197,7 @@ "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/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" }, "funding": [ { @@ -9001,32 +9205,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2025-02-07T04:59:16+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -9052,7 +9256,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" }, "funding": [ { @@ -9060,52 +9265,49 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2025-02-07T04:59:38+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.63", + "version": "12.5.33", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "33198268dad71e926626b618f3ec3966661e4d90" + "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90", - "reference": "33198268dad71e926626b618f3ec3966661e4d90", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b98e028a26c5c5ba7e4a54be96ccf35f2914d184", + "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184", "shasum": "" }, "require": { "ext-dom": "*", + "ext-filter": "*", "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.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.5", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.4", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.1", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.5.7", + "phpunit/php-file-iterator": "^6.0.1", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.2.1", + "sebastian/comparator": "^7.1.8", + "sebastian/diff": "^7.0.0", + "sebastian/environment": "^8.1.2", + "sebastian/exporter": "^7.0.3", + "sebastian/global-state": "^8.0.3", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", + "sebastian/type": "^6.0.4", + "sebastian/version": "^6.0.0", + "staabm/side-effects-detector": "^1.0.5" }, "bin": [ "phpunit" @@ -9113,7 +9315,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "12.5-dev" } }, "autoload": { @@ -9145,56 +9347,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.33" }, "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" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2026-01-27T05:48:37+00:00" + "time": "2026-07-28T13:58:09+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.1", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.5.25" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "4.2-dev" } }, "autoload": { @@ -9218,155 +9404,59 @@ "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/2.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - } - ], - "time": "2024-03-02T07:12:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.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", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" - }, - "funding": [ + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:58:43+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.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": [ + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" } ], - "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", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2026-05-17T05:29:34+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.5", + "version": "7.1.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" + "reference": "7c65c1e79836812819705b473a90c12399542485" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", - "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485", + "reference": "7c65c1e79836812819705b473a90c12399542485", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0.3" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^12.5.25" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.1-dev" } }, "autoload": { @@ -9406,7 +9496,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8" }, "funding": [ { @@ -9426,33 +9516,33 @@ "type": "tidelift" } ], - "time": "2026-01-24T09:25:16+00:00" + "time": "2026-05-21T04:45:25+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -9476,7 +9566,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" }, "funding": [ { @@ -9484,33 +9574,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2025-02-07T04:55:25+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "7ab1ea946c012266ca32390913653d844ecd085f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^12.0", + "symfony/process": "^7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -9543,7 +9633,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" }, "funding": [ { @@ -9551,27 +9641,27 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2025-02-07T04:55:46+00:00" }, { "name": "sebastian/environment", - "version": "6.1.0", + "version": "8.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.5.26" }, "suggest": { "ext-posix": "*" @@ -9579,7 +9669,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -9607,42 +9697,54 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.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/environment", + "type": "tidelift" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2026-05-25T13:40:20+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.4", + "version": "7.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "0735b90f4da94969541dac1da743446e276defa6" + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", - "reference": "0735b90f4da94969541dac1da743446e276defa6", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/recursion-context": "^7.0.1" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^12.5.25" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -9685,7 +9787,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3" }, "funding": [ { @@ -9705,35 +9807,35 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:09:11+00:00" + "time": "2026-05-20T04:37:17+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.2", + "version": "8.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9", + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0.1" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.5.28" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -9759,41 +9861,53 @@ "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/6.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/8.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/global-state", + "type": "tidelift" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2026-06-01T15:10:33+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.7.0", + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.5.25" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -9817,42 +9931,54 @@ "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/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.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/lines-of-code", + "type": "tidelift" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2026-05-19T16:22:07+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -9874,7 +10000,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" }, "funding": [ { @@ -9882,32 +10009,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2025-02-07T04:57:48+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -9929,7 +10056,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" }, "funding": [ { @@ -9937,32 +10065,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2025-02-07T04:58:17+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.1", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", - "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -9993,7 +10121,7 @@ "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/5.0.1" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" }, "funding": [ { @@ -10013,32 +10141,32 @@ "type": "tidelift" } ], - "time": "2025-08-10T07:50:56+00:00" + "time": "2025-08-13T04:44:59+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "6.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "82ff822c2edc46724be9f7411d3163021f602773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773", + "reference": "82ff822c2edc46724be9f7411d3163021f602773", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.5.25" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10061,37 +10189,50 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.4" }, "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": "2023-02-03T07:10:45+00:00" + "time": "2026-05-20T06:45:45+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10114,7 +10255,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" }, "funding": [ { @@ -10122,488 +10264,79 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2025-02-07T05:00:38+00:00" }, { - "name": "spatie/backtrace", - "version": "1.8.2", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "8ffe78be5ed355b5009e3dd989d183433e9a5adc" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/8ffe78be5ed355b5009e3dd989d183433e9a5adc", - "reference": "8ffe78be5ed355b5009e3dd989d183433e9a5adc", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "php": "^7.3 || ^8.0" + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" }, "require-dev": { - "ext-json": "*", - "laravel/serializable-closure": "^1.3 || ^2.0", - "phpunit/phpunit": "^9.3 || ^11.4.3", - "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", - "symfony/var-dumper": "^5.1|^6.0|^7.0|^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Backtrace\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", - "keywords": [ - "Backtrace", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/backtrace/issues", - "source": "https://github.com/spatie/backtrace/tree/1.8.2" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2026-03-11T13:48:28+00:00" - }, - { - "name": "spatie/error-solutions", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/spatie/error-solutions.git", - "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", - "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "illuminate/broadcasting": "^10.0|^11.0|^12.0", - "illuminate/cache": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "livewire/livewire": "^2.11|^3.5.20", - "openai-php/client": "^0.10.1", - "orchestra/testbench": "8.22.3|^9.0|^10.0", - "pestphp/pest": "^2.20|^3.0", - "phpstan/phpstan": "^2.1", - "psr/simple-cache": "^3.0", - "psr/simple-cache-implementation": "^3.0", - "spatie/ray": "^1.28", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "legacy/ignition", - "Spatie\\ErrorSolutions\\": "src", - "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ruben Van Assche", - "email": "ruben@spatie.be", - "role": "Developer" - } - ], - "description": "This is my package error-solutions", - "homepage": "https://github.com/spatie/error-solutions", - "keywords": [ - "error-solutions", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.3" - }, - "funding": [ - { - "url": "https://github.com/Spatie", - "type": "github" - } - ], - "time": "2025-02-14T12:29:50+00:00" - }, - { - "name": "spatie/flare-client-php", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/flare-client-php.git", - "reference": "53f41b08a27cc039e1a8ed2be9a202e924f31bad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/53f41b08a27cc039e1a8ed2be9a202e924f31bad", - "reference": "53f41b08a27cc039e1a8ed2be9a202e924f31bad", - "shasum": "" - }, - "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", - "php": "^8.0", - "spatie/backtrace": "^1.6.1", - "symfony/http-foundation": "^5.2|^6.0|^7.0|^8.0", - "symfony/mime": "^5.2|^6.0|^7.0|^8.0", - "symfony/process": "^5.2|^6.0|^7.0|^8.0", - "symfony/var-dumper": "^5.2|^6.0|^7.0|^8.0" - }, - "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.5.0", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/pest-plugin-snapshots": "^1.0|^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.3.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\FlareClient\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/spatie/flare-client-php", - "keywords": [ - "exception", - "flare", - "reporting", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.11.1" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2026-05-15T09:31:32+00:00" - }, - { - "name": "spatie/ignition", - "version": "1.16.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/ignition.git", - "reference": "b59385bb7aa24dae81bcc15850ebecfda7b40838" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/b59385bb7aa24dae81bcc15850ebecfda7b40838", - "reference": "b59385bb7aa24dae81bcc15850ebecfda7b40838", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.0", - "spatie/backtrace": "^1.7.1", - "spatie/error-solutions": "^1.1.2", - "spatie/flare-client-php": "^1.9", - "symfony/console": "^5.4.42|^6.0|^7.0|^8.0", - "symfony/http-foundation": "^5.4.42|^6.0|^7.0|^8.0", - "symfony/mime": "^5.4.42|^6.0|^7.0|^8.0", - "symfony/var-dumper": "^5.4.42|^6.0|^7.0|^8.0" - }, - "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0|^12.0|^13.0", - "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20|^2.0|^3.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "psr/simple-cache-implementation": "*", - "symfony/cache": "^5.4.38|^6.0|^7.0|^8.0", - "symfony/process": "^5.4.35|^6.0|^7.0|^8.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for PHP applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/ignition/issues", - "source": "https://github.com/spatie/ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2026-03-17T10:51:08+00:00" - }, - { - "name": "spatie/laravel-ignition", - "version": "2.12.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "45b3b6e1e73fc161cba2149972698644b99594ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/45b3b6e1e73fc161cba2149972698644b99594ee", - "reference": "45b3b6e1e73fc161cba2149972698644b99594ee", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/support": "^11.0|^12.0|^13.0", - "nesbot/carbon": "^2.72|^3.0", - "php": "^8.2", - "spatie/ignition": "^1.16", - "symfony/console": "^7.4|^8.0", - "symfony/var-dumper": "^7.4|^8.0" - }, - "require-dev": { - "livewire/livewire": "^3.7.0|^4.0|dev-josh/v3-laravel-13-support", - "mockery/mockery": "^1.6.12", - "openai-php/client": "^0.10.3|^0.19", - "orchestra/testbench": "^v9.16.0|^10.6|^11.0", - "pestphp/pest": "^3.7|^4.0", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan-deprecation-rules": "^2.0.3", - "phpstan/phpstan-phpunit": "^2.0.8", - "vlucas/phpdotenv": "^5.6.2" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" + "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", - "extra": { - "laravel": { - "aliases": { - "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" - }, - "providers": [ - "Spatie\\LaravelIgnition\\IgnitionServiceProvider" - ] - } - }, "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\LaravelIgnition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/laravel-ignition/issues", - "source": "https://github.com/spatie/laravel-ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2026-03-17T12:20:04+00:00" - }, - { - "name": "symfony/yaml", - "version": "v8.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "efb42bd2c6f4f3ccfd4683583449938b5fc146b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/efb42bd2c6f4f3ccfd4683583449938b5fc146b0", - "reference": "efb42bd2c6f4f3ccfd4683583449938b5fc146b0", - "shasum": "" - }, - "require": { - "php": ">=8.4.1", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<7.4" - }, - "require-dev": { - "symfony/console": "^7.4|^8.0", - "yaml/yaml-test-suite": "*" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "lib/" ] }, "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": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v8.1.0" + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/staabm", "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2026-05-29T05:06:50+00:00" + "time": "2024-10-20T05:08:20+00:00" }, { "name": "theseer/tokenizer", - "version": "1.3.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": "^8.1" }, "type": "library", "autoload": { @@ -10625,7 +10358,7 @@ "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" + "source": "https://github.com/theseer/tokenizer/tree/2.0.1" }, "funding": [ { @@ -10633,7 +10366,7 @@ "type": "github" } ], - "time": "2025-11-17T20:03:58+00:00" + "time": "2025-12-08T11:19:18+00:00" } ], "aliases": [], @@ -10642,7 +10375,7 @@ "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.2" + "php": "^8.3" }, "platform-dev": {}, "plugin-api-version": "2.9.0" diff --git a/docs-assets/app/config/app.php b/docs-assets/app/config/app.php index 57a49a54a2..423eed59f1 100644 --- a/docs-assets/app/config/app.php +++ b/docs-assets/app/config/app.php @@ -1,36 +1,5 @@ env('APP_URL', 'http://localhost'), - 'asset_url' => env('ASSET_URL', '/'), - /* |-------------------------------------------------------------------------- | Application Timezone |-------------------------------------------------------------------------- | | Here you may specify the default timezone for your application, which - | will be used by the PHP date and date-time functions. We have gone - | ahead and set this to a sensible default for you out of the box. + | 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. | */ @@ -106,53 +73,37 @@ return [ |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used - | by the translation service provider. You are free to set this value - | to any of the locales which will be supported by the application. + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. | */ - 'locale' => 'en', + 'locale' => env('APP_LOCALE', 'en'), - /* - |-------------------------------------------------------------------------- - | Application Fallback Locale - |-------------------------------------------------------------------------- - | - | The fallback locale determines the locale to use when the current one - | is not available. You may change the value to correspond to any of - | the language folders that are provided through your application. - | - */ + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), - 'fallback_locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Faker Locale - |-------------------------------------------------------------------------- - | - | This locale will be used by the Faker PHP library when generating fake - | data for your database seeds. For example, this will be used to get - | localized telephone numbers, street address information and more. - | - */ - - 'faker_locale' => 'en_US', + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), /* |-------------------------------------------------------------------------- | Encryption Key |-------------------------------------------------------------------------- | - | This key is used by the Illuminate encrypter service and should be set - | to a random, 32 character string, otherwise these encrypted strings - | will not be safe. Please do this before deploying an application! + | 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'), - 'cipher' => 'AES-256-CBC', + 'previous_keys' => [ + ...array_filter( + explode(',', (string) env('APP_PREVIOUS_KEYS', '')) + ), + ], /* |-------------------------------------------------------------------------- @@ -168,81 +119,8 @@ return [ */ 'maintenance' => [ - 'driver' => 'file', - // 'store' => 'redis', + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), ], - /* - |-------------------------------------------------------------------------- - | Autoloaded Service Providers - |-------------------------------------------------------------------------- - | - | The service providers listed here will be automatically loaded on the - | request to your application. Feel free to add your own services to - | this array to grant expanded functionality to your applications. - | - */ - - 'providers' => [ - - /* - * Laravel Framework Service Providers... - */ - AuthServiceProvider::class, - BroadcastServiceProvider::class, - BusServiceProvider::class, - CacheServiceProvider::class, - ConsoleSupportServiceProvider::class, - CookieServiceProvider::class, - DatabaseServiceProvider::class, - EncryptionServiceProvider::class, - FilesystemServiceProvider::class, - FoundationServiceProvider::class, - HashServiceProvider::class, - MailServiceProvider::class, - NotificationServiceProvider::class, - PaginationServiceProvider::class, - PipelineServiceProvider::class, - QueueServiceProvider::class, - RedisServiceProvider::class, - PasswordResetServiceProvider::class, - SessionServiceProvider::class, - TranslationServiceProvider::class, - ValidationServiceProvider::class, - ViewServiceProvider::class, - - /* - * Package Service Providers... - */ - - /* - * Application Service Providers... - */ - AppServiceProvider::class, - App\Providers\AuthServiceProvider::class, - // App\Providers\BroadcastServiceProvider::class, - EventServiceProvider::class, - AdminPanelProvider::class, - NavDemoPanelProvider::class, - TenancyDemoPanelProvider::class, - TenantMenuGroupingDemoPanelProvider::class, - RouteServiceProvider::class, - - ], - - /* - |-------------------------------------------------------------------------- - | Class Aliases - |-------------------------------------------------------------------------- - | - | This array of class aliases will be registered when this application - | is started. However, feel free to register as many as you wish as - | the aliases are "lazy" loaded so they don't hinder performance. - | - */ - - 'aliases' => Facade::defaultAliases()->merge([ - // 'ExampleClass' => App\Example\ExampleClass::class, - ])->toArray(), - ]; diff --git a/docs-assets/app/config/auth.php b/docs-assets/app/config/auth.php index 02a28c2b56..d7568ff194 100644 --- a/docs-assets/app/config/auth.php +++ b/docs-assets/app/config/auth.php @@ -9,15 +9,15 @@ return [ | Authentication Defaults |-------------------------------------------------------------------------- | - | This option controls the default authentication "guard" and password - | reset options for your application. You may change these defaults + | This option defines the default authentication "guard" and password + | reset "broker" for your application. You may change these values | as required, but they're a perfect start for most applications. | */ 'defaults' => [ - 'guard' => 'web', - 'passwords' => 'users', + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), ], /* @@ -27,11 +27,11 @@ return [ | | Next, you may define every authentication guard for your application. | Of course, a great default configuration has been defined for you - | here which uses session storage and the Eloquent user provider. + | which utilizes session storage plus the Eloquent user provider. | - | All authentication drivers have a user provider. This defines how the + | All authentication guards have a user provider, which defines how the | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. + | system used by the application. Typically, Eloquent is utilized. | | Supported: "session" | @@ -49,12 +49,12 @@ return [ | User Providers |-------------------------------------------------------------------------- | - | All authentication drivers have a user provider. This defines how the + | All authentication guards have a user provider, which defines how the | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. + | system used by the application. Typically, Eloquent is utilized. | | If you have multiple user tables or models you may configure multiple - | sources which represent each model / table. These sources may then + | providers to represent the model / table. These providers may then | be assigned to any extra authentication guards you have defined. | | Supported: "database", "eloquent" @@ -64,7 +64,7 @@ return [ 'providers' => [ 'users' => [ 'driver' => 'eloquent', - 'model' => User::class, + 'model' => env('AUTH_MODEL', User::class), ], // 'users' => [ @@ -78,11 +78,11 @@ return [ | Resetting Passwords |-------------------------------------------------------------------------- | - | You may specify multiple password reset configurations if you have more - | than one user table or model in the application and you want to have - | separate password reset settings based on the specific user types. + | 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 expire time is the number of minutes that each reset token will be + | 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. | @@ -95,7 +95,7 @@ return [ 'passwords' => [ 'users' => [ 'provider' => 'users', - 'table' => 'password_reset_tokens', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), 'expire' => 60, 'throttle' => 60, ], @@ -106,12 +106,12 @@ return [ | Password Confirmation Timeout |-------------------------------------------------------------------------- | - | Here you may define the amount of seconds before a password confirmation - | times out and the user is prompted to re-enter their password via the + | 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' => 10800, + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), ]; diff --git a/docs-assets/app/config/broadcasting.php b/docs-assets/app/config/broadcasting.php deleted file mode 100644 index 4dbd22c7ea..0000000000 --- a/docs-assets/app/config/broadcasting.php +++ /dev/null @@ -1,70 +0,0 @@ - env('BROADCAST_DRIVER', 'null'), - - /* - |-------------------------------------------------------------------------- - | Broadcast Connections - |-------------------------------------------------------------------------- - | - | Here you may define all of the broadcast connections that will be used - | to broadcast events to other systems or over websockets. Samples of - | each available type of connection are provided inside this array. - | - */ - - 'connections' => [ - - 'pusher' => [ - 'driver' => 'pusher', - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - 'app_id' => env('PUSHER_APP_ID'), - 'options' => [ - 'host' => env('PUSHER_HOST') ?: 'api-' . env('PUSHER_APP_CLUSTER', 'mt1') . '.pusher.com', - 'port' => env('PUSHER_PORT', 443), - 'scheme' => env('PUSHER_SCHEME', 'https'), - 'encrypted' => true, - 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', - ], - 'client_options' => [ - // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html - ], - ], - - 'ably' => [ - 'driver' => 'ably', - 'key' => env('ABLY_KEY'), - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - ], - - 'log' => [ - 'driver' => 'log', - ], - - 'null' => [ - 'driver' => 'null', - ], - - ], - -]; diff --git a/docs-assets/app/config/cache.php b/docs-assets/app/config/cache.php index daf5e68be5..82edc5ac92 100644 --- a/docs-assets/app/config/cache.php +++ b/docs-assets/app/config/cache.php @@ -9,13 +9,13 @@ return [ | Default Cache Store |-------------------------------------------------------------------------- | - | This option controls the default cache connection that gets used while - | using this caching library. This connection is used when another is - | not explicitly specified when executing a given caching function. + | This option controls the default cache store that will be used by the + | framework. This connection is utilized if another isn't explicitly + | specified when running a cache operation inside the application. | */ - 'default' => env('CACHE_DRIVER', 'file'), + 'default' => env('CACHE_STORE', 'database'), /* |-------------------------------------------------------------------------- @@ -26,17 +26,14 @@ return [ | 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: "apc", "array", "database", "file", - | "memcached", "redis", "dynamodb", "octane", "null" + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "storage", "octane", + | "session", "failover", "null" | */ 'stores' => [ - 'apc' => [ - 'driver' => 'apc', - ], - 'array' => [ 'driver' => 'array', 'serialize' => false, @@ -44,14 +41,22 @@ return [ 'database' => [ 'driver' => 'database', - 'table' => 'cache', - 'connection' => null, - 'lock_connection' => null, + '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'), + ], + + 'storage' => [ + 'driver' => 'storage', + 'disk' => env('CACHE_STORAGE_DISK'), + 'path' => env('CACHE_STORAGE_PATH', 'framework/cache/data'), ], 'memcached' => [ @@ -75,8 +80,8 @@ return [ 'redis' => [ 'driver' => 'redis', - 'connection' => 'cache', - 'lock_connection' => 'default', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), ], 'dynamodb' => [ @@ -92,6 +97,14 @@ return [ 'driver' => 'octane', ], + 'failover' => [ + 'driver' => 'failover', + 'stores' => [ + 'database', + 'array', + ], + ], + ], /* @@ -99,12 +112,25 @@ return [ | Cache Key Prefix |-------------------------------------------------------------------------- | - | When utilizing the APC, database, memcached, Redis, or DynamoDB cache - | stores there might be other applications using the same cache. For + | 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(env('APP_NAME', 'laravel'), '_') . '_cache_'), + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')) . '-cache-'), + + /* + |-------------------------------------------------------------------------- + | Serializable Classes + |-------------------------------------------------------------------------- + | + | This value determines the classes that can be unserialized from cache + | storage. By default, no PHP classes will be unserialized from your + | cache to prevent gadget chain attacks if your APP_KEY is leaked. + | + */ + + 'serializable_classes' => false, ]; diff --git a/docs-assets/app/config/cors.php b/docs-assets/app/config/cors.php deleted file mode 100644 index 8a39e6daa6..0000000000 --- a/docs-assets/app/config/cors.php +++ /dev/null @@ -1,34 +0,0 @@ - ['api/*', 'sanctum/csrf-cookie'], - - 'allowed_methods' => ['*'], - - 'allowed_origins' => ['*'], - - 'allowed_origins_patterns' => [], - - 'allowed_headers' => ['*'], - - 'exposed_headers' => [], - - 'max_age' => 0, - - 'supports_credentials' => false, - -]; diff --git a/docs-assets/app/config/database.php b/docs-assets/app/config/database.php index 0ad08311ce..c3795be2db 100644 --- a/docs-assets/app/config/database.php +++ b/docs-assets/app/config/database.php @@ -11,26 +11,22 @@ return [ |-------------------------------------------------------------------------- | | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. + | to use as your default connection for database operations. This is + | the connection which will be utilized unless another connection + | is explicitly specified when you execute a query / statement. | */ - 'default' => env('DB_CONNECTION', 'mysql'), + 'default' => env('DB_CONNECTION', 'sqlite'), /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | - | Here are each of the database connections setup for your application. - | Of course, examples of configuring each database platform that is - | supported by Laravel is shown below to make development simple. - | - | - | All database work in Laravel is done through the PHP PDO facilities - | so make sure you have the driver for your particular database of - | choice installed on your machine before you begin development. + | 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. | */ @@ -38,56 +34,80 @@ return [ 'sqlite' => [ 'driver' => 'sqlite', - 'url' => env('DATABASE_URL'), + '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('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', + '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'), + 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([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'pgsql' => [ 'driver' => 'pgsql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, 'search_path' => 'public', - 'sslmode' => 'prefer', + 'sslmode' => env('DB_SSLMODE', 'prefer'), ], 'sqlsrv' => [ 'driver' => 'sqlsrv', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, // 'encrypt' => env('DB_ENCRYPT', 'yes'), @@ -103,11 +123,14 @@ return [ | | 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 in the database. + | the migrations on disk haven't actually been run on the database. | */ - 'migrations' => 'migrations', + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], /* |-------------------------------------------------------------------------- @@ -116,7 +139,7 @@ return [ | | 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 APC or Memcached. Laravel makes it easy to dig right in. + | such as Memcached. You may define your connection settings here. | */ @@ -126,7 +149,8 @@ return [ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')) . '-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), ], 'default' => [ @@ -136,6 +160,10 @@ return [ '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' => [ @@ -145,6 +173,10 @@ return [ '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/docs-assets/app/config/filesystems.php b/docs-assets/app/config/filesystems.php index 4afc1fc63a..aefceaceb0 100644 --- a/docs-assets/app/config/filesystems.php +++ b/docs-assets/app/config/filesystems.php @@ -9,7 +9,7 @@ return [ | | Here you may specify the default filesystem disk that should be used | by the framework. The "local" disk, as well as a variety of cloud - | based disks are available to your application. Just store away! + | based disks are available to your application for file storage. | */ @@ -20,11 +20,11 @@ return [ | Filesystem Disks |-------------------------------------------------------------------------- | - | Here you may configure as many filesystem "disks" as you wish, and you - | may even configure multiple disks of the same driver. Defaults have - | been set up for each driver as an example of the required values. + | 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" + | Supported drivers: "local", "ftp", "sftp", "s3" | */ @@ -32,16 +32,19 @@ return [ 'local' => [ 'driver' => 'local', - 'root' => storage_path('app'), + 'root' => storage_path('app/private'), + 'serve' => true, 'throw' => false, + 'report' => false, ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), - 'url' => env('APP_URL') . '/storage', + 'url' => rtrim(env('APP_URL', 'http://localhost'), '/') . '/storage', 'visibility' => 'public', 'throw' => false, + 'report' => false, ], 's3' => [ @@ -54,6 +57,7 @@ return [ 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false, + 'report' => false, ], ], diff --git a/docs-assets/app/config/hashing.php b/docs-assets/app/config/hashing.php deleted file mode 100644 index bcd3be4c28..0000000000 --- a/docs-assets/app/config/hashing.php +++ /dev/null @@ -1,52 +0,0 @@ - 'bcrypt', - - /* - |-------------------------------------------------------------------------- - | Bcrypt Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Bcrypt algorithm. This will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), - ], - - /* - |-------------------------------------------------------------------------- - | Argon Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Argon algorithm. These will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'argon' => [ - 'memory' => 65536, - 'threads' => 1, - 'time' => 4, - ], - -]; diff --git a/docs-assets/app/config/logging.php b/docs-assets/app/config/logging.php index 752af7110d..b0f50f7e1d 100644 --- a/docs-assets/app/config/logging.php +++ b/docs-assets/app/config/logging.php @@ -3,6 +3,7 @@ use Monolog\Handler\NullHandler; use Monolog\Handler\StreamHandler; use Monolog\Handler\SyslogUdpHandler; +use Monolog\Processor\PsrLogMessageProcessor; return [ @@ -11,9 +12,9 @@ return [ | Default Log Channel |-------------------------------------------------------------------------- | - | This option defines the default log channel that gets used when writing - | messages to the logs. The name specified in this option should match - | one of the channels defined in the "channels" configuration array. + | This option defines the default log channel that is utilized to write + | messages to your logs. The value provided here should match one of + | the channels present in the list of "channels" configured below. | */ @@ -32,7 +33,7 @@ return [ 'deprecations' => [ 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), - 'trace' => false, + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), ], /* @@ -40,20 +41,20 @@ return [ | Log Channels |-------------------------------------------------------------------------- | - | Here you may configure the log channels for your application. Out of - | the box, Laravel uses the Monolog PHP logging library. This gives - | you a variety of powerful log handlers / formatters to utilize. + | 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" + | Available drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" | */ 'channels' => [ + 'stack' => [ 'driver' => 'stack', - 'channels' => ['single'], + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), 'ignore_exceptions' => false, ], @@ -61,21 +62,24 @@ return [ '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' => 14, + 'days' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => 'Laravel Log', - 'emoji' => ':boom:', + 'username' => env('LOG_SLACK_USERNAME', env('APP_NAME', 'Laravel')), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, ], 'papertrail' => [ @@ -87,26 +91,31 @@ return [ '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, - 'formatter' => env('LOG_STDERR_FORMATTER'), - 'with' => [ + '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' => [ @@ -117,6 +126,7 @@ return [ 'emergency' => [ 'path' => storage_path('logs/laravel.log'), ], + ], ]; diff --git a/docs-assets/app/config/mail.php b/docs-assets/app/config/mail.php index 275a3c64d8..e32e88da2c 100644 --- a/docs-assets/app/config/mail.php +++ b/docs-assets/app/config/mail.php @@ -7,13 +7,14 @@ return [ | Default Mailer |-------------------------------------------------------------------------- | - | This option controls the default mailer that is used to send any email - | messages sent by your application. Alternative mailers may be setup - | and used as needed; however, this mailer will be used by default. + | This option controls the default mailer that is used to send all email + | messages unless another mailer is explicitly specified when sending + | the message. All additional mailers can be configured within the + | "mailers" array. Examples of each type of mailer are provided. | */ - 'default' => env('MAIL_MAILER', 'smtp'), + 'default' => env('MAIL_MAILER', 'log'), /* |-------------------------------------------------------------------------- @@ -24,43 +25,44 @@ return [ | 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 to be used while - | sending an e-mail. You will specify which one you are using for your - | mailers below. You are free to add additional mailers as required. + | 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", "log", "array", "failover" + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" | */ 'mailers' => [ + 'smtp' => [ 'transport' => 'smtp', - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - 'port' => env('MAIL_PORT', 587), - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + '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'), + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), ], 'ses' => [ 'transport' => 'ses', ], - 'mailgun' => [ - 'transport' => 'mailgun', + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), // 'client' => [ // 'timeout' => 5, // ], ], - 'postmark' => [ - 'transport' => 'postmark', - // 'client' => [ - // 'timeout' => 5, - // ], + 'resend' => [ + 'transport' => 'resend', ], 'sendmail' => [ @@ -83,7 +85,18 @@ return [ 'smtp', 'log', ], + 'retry_after' => 60, ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + ], /* @@ -91,34 +104,15 @@ return [ | Global "From" Address |-------------------------------------------------------------------------- | - | You may wish for all e-mails 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 e-mails that are sent by your application. + | 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', 'Example'), - ], - - /* - |-------------------------------------------------------------------------- - | Markdown Mail Settings - |-------------------------------------------------------------------------- - | - | If you are using Markdown based email rendering, you may configure your - | theme and component paths here, allowing you to customize the design - | of the emails. Or, you may simply stick with the Laravel defaults! - | - */ - - 'markdown' => [ - 'theme' => 'default', - - 'paths' => [ - resource_path('views/vendor/mail'), - ], + 'name' => env('MAIL_FROM_NAME', env('APP_NAME', 'Laravel')), ], ]; diff --git a/docs-assets/app/config/queue.php b/docs-assets/app/config/queue.php index 25ea5a8193..79c2c0a23c 100644 --- a/docs-assets/app/config/queue.php +++ b/docs-assets/app/config/queue.php @@ -7,24 +7,25 @@ return [ | Default Queue Connection Name |-------------------------------------------------------------------------- | - | Laravel's queue API supports an assortment of back-ends via a single - | API, giving you convenient access to each back-end using the same - | syntax for every one. Here you may define a default connection. + | Laravel's queue supports a variety of backends via a single, unified + | API, giving you convenient access to each backend using identical + | syntax for each. The default queue connection is defined below. | */ - 'default' => env('QUEUE_CONNECTION', 'sync'), + 'default' => env('QUEUE_CONNECTION', 'database'), /* |-------------------------------------------------------------------------- | Queue Connections |-------------------------------------------------------------------------- | - | Here you may configure the connection information for each server that - | is used by your application. A default configuration has been added - | for each back-end shipped with Laravel. You are free to add more. + | 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", "null" + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", + | "deferred", "background", "failover", "null" | */ @@ -36,17 +37,18 @@ return [ 'database' => [ 'driver' => 'database', - 'table' => 'jobs', - 'queue' => 'default', - 'retry_after' => 90, + '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' => 'localhost', - 'queue' => 'default', - 'retry_after' => 90, + '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, ], @@ -64,13 +66,45 @@ return [ 'redis' => [ 'driver' => 'redis', - 'connection' => 'default', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 'queue' => env('REDIS_QUEUE', 'default'), - 'retry_after' => 90, + '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', ], /* @@ -79,14 +113,16 @@ return [ |-------------------------------------------------------------------------- | | These options configure the behavior of failed queue job logging so you - | can control which database and table are used to store the jobs that - | have failed. You may change them to any database / table you wish. + | 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', 'mysql'), + 'database' => env('DB_CONNECTION', 'sqlite'), 'table' => 'failed_jobs', ], diff --git a/docs-assets/app/config/sanctum.php b/docs-assets/app/config/sanctum.php deleted file mode 100644 index 27c0cf880b..0000000000 --- a/docs-assets/app/config/sanctum.php +++ /dev/null @@ -1,69 +0,0 @@ - explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( - '%s%s', - 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', - Sanctum::currentApplicationUrlWithPort() - ))), - - /* - |-------------------------------------------------------------------------- - | Sanctum Guards - |-------------------------------------------------------------------------- - | - | This array contains the authentication guards that will be checked when - | Sanctum is trying to authenticate a request. If none of these guards - | are able to authenticate the request, Sanctum will use the bearer - | token that's present on an incoming request for authentication. - | - */ - - 'guard' => ['web'], - - /* - |-------------------------------------------------------------------------- - | Expiration Minutes - |-------------------------------------------------------------------------- - | - | This value controls the number of minutes until an issued token will be - | considered expired. If this value is null, personal access tokens do - | not expire. This won't tweak the lifetime of first-party sessions. - | - */ - - 'expiration' => null, - - /* - |-------------------------------------------------------------------------- - | Sanctum Middleware - |-------------------------------------------------------------------------- - | - | When authenticating your first-party SPA with Sanctum you may need to - | customize some of the middleware Sanctum uses while processing the - | request. You may change the middleware listed below as required. - | - */ - - 'middleware' => [ - 'verify_csrf_token' => VerifyCsrfToken::class, - 'encrypt_cookies' => EncryptCookies::class, - ], - -]; diff --git a/docs-assets/app/config/services.php b/docs-assets/app/config/services.php index 0ace530e8d..6a90eb8305 100644 --- a/docs-assets/app/config/services.php +++ b/docs-assets/app/config/services.php @@ -14,15 +14,12 @@ return [ | */ - 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), - 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), - 'scheme' => 'https', + 'postmark' => [ + 'key' => env('POSTMARK_API_KEY'), ], - 'postmark' => [ - 'token' => env('POSTMARK_TOKEN'), + 'resend' => [ + 'key' => env('RESEND_API_KEY'), ], 'ses' => [ @@ -31,4 +28,11 @@ return [ '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/docs-assets/app/config/session.php b/docs-assets/app/config/session.php index 1b99f221c6..c785fbc687 100644 --- a/docs-assets/app/config/session.php +++ b/docs-assets/app/config/session.php @@ -9,16 +9,16 @@ return [ | Default Session Driver |-------------------------------------------------------------------------- | - | This option controls the default session "driver" that will be used on - | requests. By default, we will use the lightweight native driver but - | you may specify any of the other wonderful drivers provided here. + | This option determines the default session driver that is utilized for + | incoming requests. Laravel supports a variety of storage options to + | persist session data. Database storage is a great default choice. | - | Supported: "file", "cookie", "database", "apc", - | "memcached", "redis", "dynamodb", "array" + | Supported: "file", "cookie", "database", "memcached", + | "redis", "dynamodb", "array" | */ - 'driver' => env('SESSION_DRIVER', 'file'), + 'driver' => env('SESSION_DRIVER', 'database'), /* |-------------------------------------------------------------------------- @@ -27,13 +27,14 @@ return [ | | 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 immediately expire on the browser closing, set that option. + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. | */ - 'lifetime' => env('SESSION_LIFETIME', 120), + 'lifetime' => (int) env('SESSION_LIFETIME', 120), - 'expire_on_close' => false, + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), /* |-------------------------------------------------------------------------- @@ -41,21 +42,21 @@ return [ |-------------------------------------------------------------------------- | | This option allows you to easily specify that all of your session data - | should be encrypted before it is stored. All encryption will be run - | automatically by Laravel and you can use the Session like normal. + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. | */ - 'encrypt' => false, + 'encrypt' => env('SESSION_ENCRYPT', false), /* |-------------------------------------------------------------------------- | Session File Location |-------------------------------------------------------------------------- | - | When using the native session driver, we need a location where session - | files may be stored. A default has been set for you but a different - | location may be specified. This is only needed for file sessions. + | 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. | */ @@ -79,24 +80,24 @@ return [ | Session Database Table |-------------------------------------------------------------------------- | - | When using the "database" session driver, you may specify the table we - | should use to manage the sessions. Of course, a sensible default is - | provided for you; however, you are free to change this as needed. + | 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' => 'sessions', + 'table' => env('SESSION_TABLE', 'sessions'), /* |-------------------------------------------------------------------------- | Session Cache Store |-------------------------------------------------------------------------- | - | While using one of the framework's cache driven session backends you may - | list a cache store that should be used for these sessions. This value - | must match with one of the application's configured cache "stores". + | 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: "apc", "dynamodb", "memcached", "redis" + | Affects: "dynamodb", "memcached", "redis" | */ @@ -120,15 +121,15 @@ return [ | Session Cookie Name |-------------------------------------------------------------------------- | - | Here you may change the name of the cookie used to identify a session - | instance by ID. The name specified here will get used every time a - | new session cookie is created by the framework for every driver. + | 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(env('APP_NAME', 'laravel'), '_') . '_session' + Str::slug((string) env('APP_NAME', 'laravel')) . '-session' ), /* @@ -138,20 +139,20 @@ return [ | | 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 are free to change this when necessary. + | your application, but you're free to change this when necessary. | */ - 'path' => '/', + 'path' => env('SESSION_PATH', '/'), /* |-------------------------------------------------------------------------- | Session Cookie Domain |-------------------------------------------------------------------------- | - | Here you may change the domain of the cookie used to identify a session - | in your application. This will determine which domains the cookie is - | available to in your application. A sensible default has been set. + | 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. | */ @@ -177,11 +178,11 @@ return [ | | 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. You are free to modify this option if needed. + | the HTTP protocol. It's unlikely you should disable this option. | */ - 'http_only' => true, + 'http_only' => env('SESSION_HTTP_ONLY', true), /* |-------------------------------------------------------------------------- @@ -190,12 +191,43 @@ return [ | | 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" since this is a secure default value. + | 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' => 'lax', + '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), + + /* + |-------------------------------------------------------------------------- + | Session Serialization + |-------------------------------------------------------------------------- + | + | This value controls the serialization strategy for session data, which + | is JSON by default. Setting this to "php" allows the storage of PHP + | objects in the session but can make an application vulnerable to + | "gadget chain" serialization attacks if the APP_KEY is leaked. + | + | Supported: "json", "php" + | + */ + + 'serialization' => 'json', ]; diff --git a/docs-assets/app/config/view.php b/docs-assets/app/config/view.php deleted file mode 100644 index 22b8a18d32..0000000000 --- a/docs-assets/app/config/view.php +++ /dev/null @@ -1,36 +0,0 @@ - [ - resource_path('views'), - ], - - /* - |-------------------------------------------------------------------------- - | Compiled View Path - |-------------------------------------------------------------------------- - | - | This option determines where all the compiled Blade templates will be - | stored for your application. Typically, this is within the storage - | directory. However, as usual, you are free to change this value. - | - */ - - 'compiled' => env( - 'VIEW_COMPILED_PATH', - realpath(storage_path('framework/views')) - ), - -]; diff --git a/docs-assets/app/database/database.sqlite b/docs-assets/app/database/database.sqlite deleted file mode 100644 index 646f9b3532..0000000000 Binary files a/docs-assets/app/database/database.sqlite and /dev/null differ diff --git a/docs-assets/app/database/factories/PostFactory.php b/docs-assets/app/database/factories/PostFactory.php deleted file mode 100644 index 3743df70a8..0000000000 --- a/docs-assets/app/database/factories/PostFactory.php +++ /dev/null @@ -1,31 +0,0 @@ - - */ -class PostFactory extends Factory -{ - /** - * Define the model's default state. - * - * @return array - */ - public function definition(): array - { - return [ - 'title' => $this->faker->words(asText: true), - 'slug' => $this->faker->slug(), - 'description' => $this->faker->sentence(), - 'status' => $this->faker->randomElement(['draft', 'reviewing', 'published']), - 'is_featured' => $this->faker->boolean(), - 'author_id' => User::factory(), - 'rating' => $this->faker->numberBetween(1, 10), - ]; - } -} diff --git a/docs-assets/app/database/factories/UserFactory.php b/docs-assets/app/database/factories/UserFactory.php deleted file mode 100644 index 4ec67d3a7f..0000000000 --- a/docs-assets/app/database/factories/UserFactory.php +++ /dev/null @@ -1,41 +0,0 @@ - - */ -class UserFactory extends Factory -{ - /** - * 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' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password - 'remember_token' => Str::random(10), - ]; - } - - /** - * Indicate that the model's email address should be unverified. - * - * @return $this - */ - public function unverified(): static - { - return $this->state(fn (array $attributes) => [ - 'email_verified_at' => null, - ]); - } -} diff --git a/docs-assets/app/database/migrations/2014_10_12_000000_create_users_table.php b/docs-assets/app/database/migrations/0001_01_01_000000_create_users_table.php similarity index 52% rename from docs-assets/app/database/migrations/2014_10_12_000000_create_users_table.php rename to docs-assets/app/database/migrations/0001_01_01_000000_create_users_table.php index 83a546e621..30d2f59450 100644 --- a/docs-assets/app/database/migrations/2014_10_12_000000_create_users_table.php +++ b/docs-assets/app/database/migrations/0001_01_01_000000_create_users_table.php @@ -21,9 +21,26 @@ return new class extends Migration $table->string('phone')->nullable(); $table->string('job')->nullable(); $table->json('colleagues')->nullable(); + $table->text('app_authentication_secret')->nullable(); + $table->text('email_authentication_secret')->nullable(); $table->rememberToken(); $table->timestamps(); }); + + Schema::create('password_reset_tokens', function (Blueprint $table): void { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table): void { + $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(); + }); } /** @@ -32,5 +49,7 @@ return new class extends Migration public function down(): void { Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); } }; diff --git a/docs-assets/app/database/migrations/0001_01_01_000001_create_cache_table.php b/docs-assets/app/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000000..0bb7da9f0c --- /dev/null +++ b/docs-assets/app/database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->bigInteger('expiration')->index(); + }); + + Schema::create('cache_locks', function (Blueprint $table): void { + $table->string('key')->primary(); + $table->string('owner'); + $table->bigInteger('expiration')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/docs-assets/app/database/migrations/0001_01_01_000002_create_jobs_table.php b/docs-assets/app/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000000..2be744288b --- /dev/null +++ b/docs-assets/app/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,59 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedSmallInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table): void { + $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): void { + $table->id(); + $table->string('uuid')->unique(); + $table->string('connection'); + $table->string('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + + $table->index(['connection', 'queue', 'failed_at']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/docs-assets/app/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php b/docs-assets/app/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php deleted file mode 100644 index cb68c9ba9e..0000000000 --- a/docs-assets/app/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php +++ /dev/null @@ -1,28 +0,0 @@ -string('email')->primary(); - $table->string('token'); - $table->timestamp('created_at')->nullable(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('password_reset_tokens'); - } -}; diff --git a/docs-assets/app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/docs-assets/app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php deleted file mode 100644 index 3128b95166..0000000000 --- a/docs-assets/app/database/migrations/2019_08_19_000000_create_failed_jobs_table.php +++ /dev/null @@ -1,32 +0,0 @@ -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('failed_jobs'); - } -}; diff --git a/docs-assets/app/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/docs-assets/app/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php deleted file mode 100644 index 07c8c0e780..0000000000 --- a/docs-assets/app/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php +++ /dev/null @@ -1,33 +0,0 @@ -id(); - $table->morphs('tokenable'); - $table->string('name'); - $table->string('token', 64)->unique(); - $table->text('abilities')->nullable(); - $table->timestamp('last_used_at')->nullable(); - $table->timestamp('expires_at')->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('personal_access_tokens'); - } -}; diff --git a/docs-assets/app/database/migrations/2024_01_03_000000_add_mfa_to_users_table.php b/docs-assets/app/database/migrations/2024_01_03_000000_add_mfa_to_users_table.php deleted file mode 100644 index 4467925aa8..0000000000 --- a/docs-assets/app/database/migrations/2024_01_03_000000_add_mfa_to_users_table.php +++ /dev/null @@ -1,23 +0,0 @@ -text('app_authentication_secret')->nullable(); - $table->text('email_authentication_secret')->nullable(); - }); - } - - public function down(): void - { - Schema::table('users', function (Blueprint $table): void { - $table->dropColumn(['app_authentication_secret', 'email_authentication_secret']); - }); - } -}; diff --git a/docs-assets/app/database/seed-images/sample-image-2.jpg b/docs-assets/app/database/seed-images/sample-image-2.jpg new file mode 100644 index 0000000000..965020dbf9 Binary files /dev/null and b/docs-assets/app/database/seed-images/sample-image-2.jpg differ diff --git a/docs-assets/app/database/seed-images/sample-image-3.jpg b/docs-assets/app/database/seed-images/sample-image-3.jpg new file mode 100644 index 0000000000..07c1456828 Binary files /dev/null and b/docs-assets/app/database/seed-images/sample-image-3.jpg differ diff --git a/docs-assets/app/database/seed-images/sample-image.jpg b/docs-assets/app/database/seed-images/sample-image.jpg new file mode 100644 index 0000000000..8104fed363 Binary files /dev/null and b/docs-assets/app/database/seed-images/sample-image.jpg differ diff --git a/docs-assets/app/database/seeders/DatabaseSeeder.php b/docs-assets/app/database/seeders/DatabaseSeeder.php index 34afb3b6e8..5805d6f2f7 100644 --- a/docs-assets/app/database/seeders/DatabaseSeeder.php +++ b/docs-assets/app/database/seeders/DatabaseSeeder.php @@ -11,6 +11,7 @@ use App\Models\User; use App\Models\WebsitePage; use Carbon\Carbon; use Illuminate\Database\Seeder; +use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Hash; class DatabaseSeeder extends Seeder @@ -20,6 +21,11 @@ class DatabaseSeeder extends Seeder // Pin timestamps so screenshots are reproducible across reseeds $baseDate = '2025-06-01 09:00:00'; + // Copy sample images to the `public` disk for the file upload demos. + // Serve them by linking the disk with `php artisan storage:link`. + File::ensureDirectoryExists(storage_path('app/public/test')); + File::copyDirectory(database_path('seed-images'), storage_path('app/public/test')); + // Use a fixed password hash so the database is byte-identical across reseeds. // This is bcrypt('password') with a fixed salt — only used for doc screenshots. $passwordHash = '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'; diff --git a/docs-assets/app/package-lock.json b/docs-assets/app/package-lock.json index d90789f25d..75fa53908e 100644 --- a/docs-assets/app/package-lock.json +++ b/docs-assets/app/package-lock.json @@ -4,17 +4,19 @@ "requires": true, "packages": { "": { - "dependencies": { + "devDependencies": { "@tailwindcss/vite": "^4.0.0", - "laravel-vite-plugin": "^3.1.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^3.1", "tailwindcss": "^4.0.0", - "vite": "^8.0.16" + "vite": "^8.0.0" } }, "node_modules/@emnapi/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -26,6 +28,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -36,6 +39,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -46,6 +50,7 @@ "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, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", @@ -56,6 +61,7 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -66,6 +72,7 @@ "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, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -75,12 +82,14 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -91,6 +100,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz", "integrity": "sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -109,6 +119,7 @@ "version": "0.133.0", "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/Boshen" @@ -121,6 +132,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -137,6 +149,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -153,6 +166,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -169,6 +183,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -185,6 +200,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -201,6 +217,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -217,6 +234,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -233,6 +251,7 @@ "cpu": [ "ppc64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -249,6 +268,7 @@ "cpu": [ "s390x" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -265,6 +285,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -281,6 +302,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -297,6 +319,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -313,6 +336,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -331,6 +355,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -347,6 +372,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -360,12 +386,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.5", @@ -381,6 +409,7 @@ "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, "license": "MIT", "engines": { "node": ">= 20" @@ -407,6 +436,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -423,6 +453,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -439,6 +470,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -455,6 +487,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -471,6 +504,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -487,6 +521,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -503,6 +538,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -519,6 +555,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -535,6 +572,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -559,6 +597,7 @@ "cpu": [ "wasm32" ], + "dev": true, "license": "MIT", "optional": true, "dependencies": { @@ -575,6 +614,7 @@ }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { "version": "1.10.0", + "dev": true, "inBundle": true, "license": "MIT", "optional": true, @@ -585,6 +625,7 @@ }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { "version": "1.10.0", + "dev": true, "inBundle": true, "license": "MIT", "optional": true, @@ -594,6 +635,7 @@ }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { "version": "1.2.1", + "dev": true, "inBundle": true, "license": "MIT", "optional": true, @@ -603,6 +645,7 @@ }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { "version": "1.1.4", + "dev": true, "inBundle": true, "license": "MIT", "optional": true, @@ -620,6 +663,7 @@ }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { "version": "0.10.1", + "dev": true, "inBundle": true, "license": "MIT", "optional": true, @@ -629,6 +673,7 @@ }, "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { "version": "2.8.1", + "dev": true, "inBundle": true, "license": "0BSD", "optional": true @@ -640,6 +685,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -656,6 +702,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MIT", "optional": true, "os": [ @@ -669,6 +716,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.0.tgz", "integrity": "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==", + "dev": true, "license": "MIT", "dependencies": { "@tailwindcss/node": "4.3.0", @@ -683,25 +731,151 @@ "version": "0.10.2", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.4.0" } }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "license": "ISC", + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.4.tgz", + "integrity": "sha512-TZ0CEhyzvFjgtAvHTusDMgj7wNdihCh7LLLrzdUOXIhdlnL2JBBGA9eJxR24rtqgmdjh3OA3hrN1rCHj6HM8qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.9.0", + "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/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, "license": "Apache-2.0", "engines": { "node": ">=8" } }, + "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, + "license": "MIT" + }, "node_modules/enhanced-resolve": { "version": "5.22.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.0.tgz", "integrity": "sha512-xYcDWrpELkFzz9SpZ3PlI6Eu6eD93Yf0WLDRxikGhWJ3MAir2SNZTIVCVZqZ/NUyx8AdMc2gT9C0gPiw18kG+A==", + "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -711,10 +885,21 @@ "node": ">=10.13.0" } }, + "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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "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, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -732,6 +917,7 @@ "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, "license": "MIT", "optional": true, @@ -742,16 +928,48 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "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, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "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, "license": "ISC" }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "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, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -761,6 +979,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-3.1.0.tgz", "integrity": "sha512-Fzocl+X4eQ9jOi0RwdphYRGkUbPJ3ky1pTAST5Ot18cS2gw6d2vldK2eCrlKDVjtibCjCx5qptYDlA0373n7qg==", + "dev": true, "license": "MIT", "dependencies": { "picocolors": "^1.0.0", @@ -787,6 +1006,7 @@ "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -819,6 +1039,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -839,6 +1060,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -859,6 +1081,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -879,6 +1102,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -899,6 +1123,7 @@ "cpu": [ "arm" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -919,6 +1144,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -939,6 +1165,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -959,6 +1186,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -979,6 +1207,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -999,6 +1228,7 @@ "cpu": [ "arm64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -1019,6 +1249,7 @@ "cpu": [ "x64" ], + "dev": true, "license": "MPL-2.0", "optional": true, "os": [ @@ -1036,6 +1267,7 @@ "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, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -1045,6 +1277,7 @@ "version": "3.3.16", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", + "dev": true, "funding": [ { "type": "github", @@ -1063,12 +1296,14 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "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, "license": "MIT", "engines": { "node": ">=12" @@ -1081,6 +1316,7 @@ "version": "8.5.25", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -1105,10 +1341,21 @@ "node": "^10 || ^12 || >=14" } }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rolldown": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "dev": true, "license": "MIT", "dependencies": { "@oxc-project/types": "=0.133.0", @@ -1138,25 +1385,95 @@ "@rolldown/binding-win32-x64-msvc": "1.0.3" } }, + "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, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/shell-quote": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz", + "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==", + "dev": true, + "license": "MIT", + "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, "license": "BSD-3-Clause", "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "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, "license": "MIT" }, "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, "license": "MIT", "engines": { "node": ">=6" @@ -1170,6 +1487,7 @@ "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", @@ -1182,17 +1500,28 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "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, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "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==", - "license": "0BSD", - "optional": true + "dev": true, + "license": "0BSD" }, "node_modules/vite": { "version": "8.0.16", "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.32.0", @@ -1270,6 +1599,7 @@ "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, "license": "MIT", "dependencies": { "picocolors": "^1.0.0", @@ -1280,6 +1610,7 @@ "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, "license": "MIT", "engines": { "node": ">=8.6" @@ -1287,6 +1618,63 @@ "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, + "license": "MIT", + "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, + "license": "ISC", + "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, + "license": "MIT", + "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, + "license": "ISC", + "engines": { + "node": ">=12" + } } } } diff --git a/docs-assets/app/package.json b/docs-assets/app/package.json index c624f940a8..49c869e3b9 100644 --- a/docs-assets/app/package.json +++ b/docs-assets/app/package.json @@ -1,14 +1,16 @@ { - "type": "module", + "$schema": "https://www.schemastore.org/package.json", "private": true, + "type": "module", "scripts": { - "dev": "vite", - "build": "vite build" + "build": "vite build", + "dev": "vite" }, - "dependencies": { - "laravel-vite-plugin": "^3.1.0", + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^3.1", "tailwindcss": "^4.0.0", - "vite": "^8.0.16", - "@tailwindcss/vite": "^4.0.0" + "vite": "^8.0.0" } } diff --git a/docs-assets/app/public/index.php b/docs-assets/app/public/index.php index f3c2ebcd37..86bfe78988 100644 --- a/docs-assets/app/public/index.php +++ b/docs-assets/app/public/index.php @@ -1,55 +1,20 @@ make(Kernel::class); - -$response = $kernel->handle( - $request = Request::capture() -)->send(); - -$kernel->terminate($request, $response); +$app->handleRequest(Request::capture()); diff --git a/docs-assets/app/routes/api.php b/docs-assets/app/routes/api.php deleted file mode 100644 index 889937e11a..0000000000 --- a/docs-assets/app/routes/api.php +++ /dev/null @@ -1,19 +0,0 @@ -get('/user', function (Request $request) { - return $request->user(); -}); diff --git a/docs-assets/app/routes/channels.php b/docs-assets/app/routes/channels.php deleted file mode 100644 index f2cdeb9b5a..0000000000 --- a/docs-assets/app/routes/channels.php +++ /dev/null @@ -1,18 +0,0 @@ -id === (int) $id; -}); diff --git a/docs-assets/app/routes/console.php b/docs-assets/app/routes/console.php index 35b675eb76..fa9463c24b 100644 --- a/docs-assets/app/routes/console.php +++ b/docs-assets/app/routes/console.php @@ -3,17 +3,6 @@ use Illuminate\Foundation\Inspiring; use Illuminate\Support\Facades\Artisan; -/* -|-------------------------------------------------------------------------- -| Console Routes -|-------------------------------------------------------------------------- -| -| This file is where you may define all of your Closure based console -| commands. Each Closure is bound to a command instance allowing a -| simple approach to interacting with each command's IO methods. -| -*/ - Artisan::command('inspire', function (): void { $this->comment(Inspiring::quote()); })->purpose('Display an inspiring quote'); diff --git a/docs-assets/app/routes/web.php b/docs-assets/app/routes/web.php index 1d89ad9906..0f9386c5cd 100644 --- a/docs-assets/app/routes/web.php +++ b/docs-assets/app/routes/web.php @@ -35,17 +35,6 @@ use App\Livewire\TablesDemo; use App\Livewire\WidgetsDemo; use Illuminate\Support\Facades\Route; -/* -|-------------------------------------------------------------------------- -| Web Routes -|-------------------------------------------------------------------------- -| -| Here is where you can register web routes for your application. These -| routes are loaded by the RouteServiceProvider and all of them will -| be assigned to the "web" middleware group. Make something great! -| -*/ - Route::get('/actions', ActionsDemo::class); Route::get('/actions-crud', ActionsCrudDemo::class); diff --git a/docs-assets/app/storage/app/.gitignore b/docs-assets/app/storage/app/.gitignore index 8f4803c056..fedb287fec 100644 --- a/docs-assets/app/storage/app/.gitignore +++ b/docs-assets/app/storage/app/.gitignore @@ -1,3 +1,4 @@ * +!private/ !public/ !.gitignore diff --git a/docs-assets/app/storage/app/private/.gitignore b/docs-assets/app/storage/app/private/.gitignore new file mode 100644 index 0000000000..d6b7ef32c8 --- /dev/null +++ b/docs-assets/app/storage/app/private/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/docs-assets/app/tests/CreatesApplication.php b/docs-assets/app/tests/CreatesApplication.php deleted file mode 100644 index e3ad27ecf4..0000000000 --- a/docs-assets/app/tests/CreatesApplication.php +++ /dev/null @@ -1,21 +0,0 @@ -make(Kernel::class)->bootstrap(); - - return $app; - } -} diff --git a/docs-assets/app/tests/Feature/ExampleTest.php b/docs-assets/app/tests/Feature/ExampleTest.php index 8364a84e2b..61017f5999 100644 --- a/docs-assets/app/tests/Feature/ExampleTest.php +++ b/docs-assets/app/tests/Feature/ExampleTest.php @@ -2,7 +2,6 @@ namespace Tests\Feature; -// use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class ExampleTest extends TestCase @@ -12,7 +11,7 @@ class ExampleTest extends TestCase */ public function test_the_application_returns_a_successful_response(): void { - $response = $this->get('/'); + $response = $this->get('/up'); $response->assertStatus(200); } diff --git a/docs-assets/app/tests/TestCase.php b/docs-assets/app/tests/TestCase.php index 2932d4a69d..fe1ffc2ff1 100644 --- a/docs-assets/app/tests/TestCase.php +++ b/docs-assets/app/tests/TestCase.php @@ -6,5 +6,5 @@ use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase { - use CreatesApplication; + // } diff --git a/docs-assets/screenshots/images/dark/actions/create-action/modal.jpg b/docs-assets/screenshots/images/dark/actions/create-action/modal.jpg index 32bbb68485..b82cda03e5 100644 Binary files a/docs-assets/screenshots/images/dark/actions/create-action/modal.jpg and b/docs-assets/screenshots/images/dark/actions/create-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/delete-action/modal.jpg b/docs-assets/screenshots/images/dark/actions/delete-action/modal.jpg index df439e9448..0c7264a7cd 100644 Binary files a/docs-assets/screenshots/images/dark/actions/delete-action/modal.jpg and b/docs-assets/screenshots/images/dark/actions/delete-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/edit-action/modal.jpg b/docs-assets/screenshots/images/dark/actions/edit-action/modal.jpg index 79bc35f672..96c3977c0a 100644 Binary files a/docs-assets/screenshots/images/dark/actions/edit-action/modal.jpg and b/docs-assets/screenshots/images/dark/actions/edit-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/export-action/modal.jpg b/docs-assets/screenshots/images/dark/actions/export-action/modal.jpg index d38f8fb7a7..6fc9d400bd 100644 Binary files a/docs-assets/screenshots/images/dark/actions/export-action/modal.jpg and b/docs-assets/screenshots/images/dark/actions/export-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/import-action/modal.jpg b/docs-assets/screenshots/images/dark/actions/import-action/modal.jpg index 01e20a1460..74e410634c 100644 Binary files a/docs-assets/screenshots/images/dark/actions/import-action/modal.jpg and b/docs-assets/screenshots/images/dark/actions/import-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/modal/form.jpg b/docs-assets/screenshots/images/dark/actions/modal/form.jpg index aef9f9b61a..a2d77f4678 100644 Binary files a/docs-assets/screenshots/images/dark/actions/modal/form.jpg and b/docs-assets/screenshots/images/dark/actions/modal/form.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/modal/schema.jpg b/docs-assets/screenshots/images/dark/actions/modal/schema.jpg index 7d58ccbc0a..61f9d0702b 100644 Binary files a/docs-assets/screenshots/images/dark/actions/modal/schema.jpg and b/docs-assets/screenshots/images/dark/actions/modal/schema.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/modal/slide-over-start.jpg b/docs-assets/screenshots/images/dark/actions/modal/slide-over-start.jpg index a6d4152e18..bcedee7ca0 100644 Binary files a/docs-assets/screenshots/images/dark/actions/modal/slide-over-start.jpg and b/docs-assets/screenshots/images/dark/actions/modal/slide-over-start.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/modal/slide-over.jpg b/docs-assets/screenshots/images/dark/actions/modal/slide-over.jpg index c1be5c1891..8a5db688d7 100644 Binary files a/docs-assets/screenshots/images/dark/actions/modal/slide-over.jpg and b/docs-assets/screenshots/images/dark/actions/modal/slide-over.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/replicate-action/modal.jpg b/docs-assets/screenshots/images/dark/actions/replicate-action/modal.jpg index b752923157..d73922f055 100644 Binary files a/docs-assets/screenshots/images/dark/actions/replicate-action/modal.jpg and b/docs-assets/screenshots/images/dark/actions/replicate-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/actions/view-action/modal.jpg b/docs-assets/screenshots/images/dark/actions/view-action/modal.jpg index c1b9509e8c..b5ec2b96f6 100644 Binary files a/docs-assets/screenshots/images/dark/actions/view-action/modal.jpg and b/docs-assets/screenshots/images/dark/actions/view-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/dropdown/icons.jpg b/docs-assets/screenshots/images/dark/components/dropdown/icons.jpg index 361f8829c9..70bc3a7449 100644 Binary files a/docs-assets/screenshots/images/dark/components/dropdown/icons.jpg and b/docs-assets/screenshots/images/dark/components/dropdown/icons.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/empty-state/description.jpg b/docs-assets/screenshots/images/dark/components/empty-state/description.jpg index 0ced1f1feb..ab24172949 100644 Binary files a/docs-assets/screenshots/images/dark/components/empty-state/description.jpg and b/docs-assets/screenshots/images/dark/components/empty-state/description.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/empty-state/icon-color.jpg b/docs-assets/screenshots/images/dark/components/empty-state/icon-color.jpg index ee38a69e63..1afb26169c 100644 Binary files a/docs-assets/screenshots/images/dark/components/empty-state/icon-color.jpg and b/docs-assets/screenshots/images/dark/components/empty-state/icon-color.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/empty-state/icon-sizes.jpg b/docs-assets/screenshots/images/dark/components/empty-state/icon-sizes.jpg index c92956aa27..667e256496 100644 Binary files a/docs-assets/screenshots/images/dark/components/empty-state/icon-sizes.jpg and b/docs-assets/screenshots/images/dark/components/empty-state/icon-sizes.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/empty-state/not-contained.jpg b/docs-assets/screenshots/images/dark/components/empty-state/not-contained.jpg index 022470846d..e1542ffb78 100644 Binary files a/docs-assets/screenshots/images/dark/components/empty-state/not-contained.jpg and b/docs-assets/screenshots/images/dark/components/empty-state/not-contained.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/loading-indicator/simple.jpg b/docs-assets/screenshots/images/dark/components/loading-indicator/simple.jpg index 6117d19099..692ba0a572 100644 Binary files a/docs-assets/screenshots/images/dark/components/loading-indicator/simple.jpg and b/docs-assets/screenshots/images/dark/components/loading-indicator/simple.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/modal/alignment.jpg b/docs-assets/screenshots/images/dark/components/modal/alignment.jpg index c21943f06e..4fc421d136 100644 Binary files a/docs-assets/screenshots/images/dark/components/modal/alignment.jpg and b/docs-assets/screenshots/images/dark/components/modal/alignment.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/modal/heading.jpg b/docs-assets/screenshots/images/dark/components/modal/heading.jpg index 2ef01d1354..1461b159fc 100644 Binary files a/docs-assets/screenshots/images/dark/components/modal/heading.jpg and b/docs-assets/screenshots/images/dark/components/modal/heading.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/modal/icon.jpg b/docs-assets/screenshots/images/dark/components/modal/icon.jpg index 985704bb03..141385b94a 100644 Binary files a/docs-assets/screenshots/images/dark/components/modal/icon.jpg and b/docs-assets/screenshots/images/dark/components/modal/icon.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/modal/simple.jpg b/docs-assets/screenshots/images/dark/components/modal/simple.jpg index 324b259992..6abfe6e96c 100644 Binary files a/docs-assets/screenshots/images/dark/components/modal/simple.jpg and b/docs-assets/screenshots/images/dark/components/modal/simple.jpg differ diff --git a/docs-assets/screenshots/images/dark/components/modal/sticky-header.jpg b/docs-assets/screenshots/images/dark/components/modal/sticky-header.jpg index 2a2487e743..10789b937e 100644 Binary files a/docs-assets/screenshots/images/dark/components/modal/sticky-header.jpg and b/docs-assets/screenshots/images/dark/components/modal/sticky-header.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/builder/add-action-alignment.jpg b/docs-assets/screenshots/images/dark/forms/fields/builder/add-action-alignment.jpg index c8135802e6..068f2fbc3e 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/builder/add-action-alignment.jpg and b/docs-assets/screenshots/images/dark/forms/fields/builder/add-action-alignment.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/builder/simple.jpg b/docs-assets/screenshots/images/dark/forms/fields/builder/simple.jpg index 37bf5bf5cf..15cb62a939 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/builder/simple.jpg and b/docs-assets/screenshots/images/dark/forms/fields/builder/simple.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/file-upload/avatar.jpg b/docs-assets/screenshots/images/dark/forms/fields/file-upload/avatar.jpg index 3a66058d10..c06f70fa5c 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/file-upload/avatar.jpg and b/docs-assets/screenshots/images/dark/forms/fields/file-upload/avatar.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/file-upload/downloadable.jpg b/docs-assets/screenshots/images/dark/forms/fields/file-upload/downloadable.jpg index 66d31620df..f7883baef0 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/file-upload/downloadable.jpg and b/docs-assets/screenshots/images/dark/forms/fields/file-upload/downloadable.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/file-upload/image-editor.jpg b/docs-assets/screenshots/images/dark/forms/fields/file-upload/image-editor.jpg index 8760a6286c..180bd61133 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/file-upload/image-editor.jpg and b/docs-assets/screenshots/images/dark/forms/fields/file-upload/image-editor.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/file-upload/image-preview.jpg b/docs-assets/screenshots/images/dark/forms/fields/file-upload/image-preview.jpg index d678d27407..1055bef76a 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/file-upload/image-preview.jpg and b/docs-assets/screenshots/images/dark/forms/fields/file-upload/image-preview.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/file-upload/multiple-grid.jpg b/docs-assets/screenshots/images/dark/forms/fields/file-upload/multiple-grid.jpg index ab6f7d74f5..f568be400c 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/file-upload/multiple-grid.jpg and b/docs-assets/screenshots/images/dark/forms/fields/file-upload/multiple-grid.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/file-upload/openable.jpg b/docs-assets/screenshots/images/dark/forms/fields/file-upload/openable.jpg index e79c92a9e5..d81763f4c6 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/file-upload/openable.jpg and b/docs-assets/screenshots/images/dark/forms/fields/file-upload/openable.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/file-upload/simple.jpg b/docs-assets/screenshots/images/dark/forms/fields/file-upload/simple.jpg index 131d9a1e43..32da2a45a1 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/file-upload/simple.jpg and b/docs-assets/screenshots/images/dark/forms/fields/file-upload/simple.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/modal-table-select/modal.jpg b/docs-assets/screenshots/images/dark/forms/fields/modal-table-select/modal.jpg index 428360a50d..4f8d2ab314 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/modal-table-select/modal.jpg and b/docs-assets/screenshots/images/dark/forms/fields/modal-table-select/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/forms/fields/rich-editor/grouped-custom-blocks.jpg b/docs-assets/screenshots/images/dark/forms/fields/rich-editor/grouped-custom-blocks.jpg index 5a39673e88..b8c0990d06 100644 Binary files a/docs-assets/screenshots/images/dark/forms/fields/rich-editor/grouped-custom-blocks.jpg and b/docs-assets/screenshots/images/dark/forms/fields/rich-editor/grouped-custom-blocks.jpg differ diff --git a/docs-assets/screenshots/images/dark/infolists/entries/text/copyable.jpg b/docs-assets/screenshots/images/dark/infolists/entries/text/copyable.jpg index b672151244..444b6a4d84 100644 Binary files a/docs-assets/screenshots/images/dark/infolists/entries/text/copyable.jpg and b/docs-assets/screenshots/images/dark/infolists/entries/text/copyable.jpg differ diff --git a/docs-assets/screenshots/images/dark/infolists/entries/text/date-tooltip.jpg b/docs-assets/screenshots/images/dark/infolists/entries/text/date-tooltip.jpg index 5b7dba01c9..020b4a9b60 100644 Binary files a/docs-assets/screenshots/images/dark/infolists/entries/text/date-tooltip.jpg and b/docs-assets/screenshots/images/dark/infolists/entries/text/date-tooltip.jpg differ diff --git a/docs-assets/screenshots/images/dark/infolists/entries/text/since.jpg b/docs-assets/screenshots/images/dark/infolists/entries/text/since.jpg index dc1457cb07..f673dba3d9 100644 Binary files a/docs-assets/screenshots/images/dark/infolists/entries/text/since.jpg and b/docs-assets/screenshots/images/dark/infolists/entries/text/since.jpg differ diff --git a/docs-assets/screenshots/images/dark/notifications/database.jpg b/docs-assets/screenshots/images/dark/notifications/database.jpg index b8298e4121..eee733e5f7 100644 Binary files a/docs-assets/screenshots/images/dark/notifications/database.jpg and b/docs-assets/screenshots/images/dark/notifications/database.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/configuration/colors.jpg b/docs-assets/screenshots/images/dark/panels/configuration/colors.jpg index 19a0f1a795..5b1c93895a 100644 Binary files a/docs-assets/screenshots/images/dark/panels/configuration/colors.jpg and b/docs-assets/screenshots/images/dark/panels/configuration/colors.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/configuration/content-width-full.jpg b/docs-assets/screenshots/images/dark/panels/configuration/content-width-full.jpg index dcf45a492a..2543247b39 100644 Binary files a/docs-assets/screenshots/images/dark/panels/configuration/content-width-full.jpg and b/docs-assets/screenshots/images/dark/panels/configuration/content-width-full.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/dashboard-column-spans.jpg b/docs-assets/screenshots/images/dark/panels/dashboard-column-spans.jpg index 61c79e3074..0e15bc4b24 100644 Binary files a/docs-assets/screenshots/images/dark/panels/dashboard-column-spans.jpg and b/docs-assets/screenshots/images/dark/panels/dashboard-column-spans.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/dashboard-filter-action.jpg b/docs-assets/screenshots/images/dark/panels/dashboard-filter-action.jpg index a54859b569..c0f18dd35c 100644 Binary files a/docs-assets/screenshots/images/dark/panels/dashboard-filter-action.jpg and b/docs-assets/screenshots/images/dark/panels/dashboard-filter-action.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/dashboard-filters.jpg b/docs-assets/screenshots/images/dark/panels/dashboard-filters.jpg index d6b6031b5f..a6b3c84067 100644 Binary files a/docs-assets/screenshots/images/dark/panels/dashboard-filters.jpg and b/docs-assets/screenshots/images/dark/panels/dashboard-filters.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/dashboard.jpg b/docs-assets/screenshots/images/dark/panels/dashboard.jpg index 796f22c784..d5ab32759a 100644 Binary files a/docs-assets/screenshots/images/dark/panels/dashboard.jpg and b/docs-assets/screenshots/images/dark/panels/dashboard.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/mfa.jpg b/docs-assets/screenshots/images/dark/panels/mfa.jpg index 025720b57b..5061b196e7 100644 Binary files a/docs-assets/screenshots/images/dark/panels/mfa.jpg and b/docs-assets/screenshots/images/dark/panels/mfa.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/navigation/user-menu-sidebar.jpg b/docs-assets/screenshots/images/dark/panels/navigation/user-menu-sidebar.jpg index ba78aaab46..1368ac90df 100644 Binary files a/docs-assets/screenshots/images/dark/panels/navigation/user-menu-sidebar.jpg and b/docs-assets/screenshots/images/dark/panels/navigation/user-menu-sidebar.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/navigation/user-menu.jpg b/docs-assets/screenshots/images/dark/panels/navigation/user-menu.jpg index 78925b7034..d47d21d84f 100644 Binary files a/docs-assets/screenshots/images/dark/panels/navigation/user-menu.jpg and b/docs-assets/screenshots/images/dark/panels/navigation/user-menu.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/profile.jpg b/docs-assets/screenshots/images/dark/panels/profile.jpg index f493f70273..22a2933674 100644 Binary files a/docs-assets/screenshots/images/dark/panels/profile.jpg and b/docs-assets/screenshots/images/dark/panels/profile.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/deleting.jpg b/docs-assets/screenshots/images/dark/panels/resources/deleting.jpg index c0b7b34127..5911791406 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/deleting.jpg and b/docs-assets/screenshots/images/dark/panels/resources/deleting.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/editing-combined-tabs.jpg b/docs-assets/screenshots/images/dark/panels/resources/editing-combined-tabs.jpg index 5ac1c0674c..844477384d 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/editing-combined-tabs.jpg and b/docs-assets/screenshots/images/dark/panels/resources/editing-combined-tabs.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/editing-header-actions.jpg b/docs-assets/screenshots/images/dark/panels/resources/editing-header-actions.jpg index 57f658450f..00aeaab1d7 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/editing-header-actions.jpg and b/docs-assets/screenshots/images/dark/panels/resources/editing-header-actions.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/editing-save-in-header.jpg b/docs-assets/screenshots/images/dark/panels/resources/editing-save-in-header.jpg index 1d0a482b85..0b2f8ec687 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/editing-save-in-header.jpg and b/docs-assets/screenshots/images/dark/panels/resources/editing-save-in-header.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/editing-section-actions.jpg b/docs-assets/screenshots/images/dark/panels/resources/editing-section-actions.jpg index 1a451cbc04..fbb98a4482 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/editing-section-actions.jpg and b/docs-assets/screenshots/images/dark/panels/resources/editing-section-actions.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/editing.jpg b/docs-assets/screenshots/images/dark/panels/resources/editing.jpg index c4c0349f04..67ec9a1b59 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/editing.jpg and b/docs-assets/screenshots/images/dark/panels/resources/editing.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/global-search-actions.jpg b/docs-assets/screenshots/images/dark/panels/resources/global-search-actions.jpg index c124b764b3..c88341de15 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/global-search-actions.jpg and b/docs-assets/screenshots/images/dark/panels/resources/global-search-actions.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/global-search-details.jpg b/docs-assets/screenshots/images/dark/panels/resources/global-search-details.jpg index 84bb9d02d1..9bfe5dec1a 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/global-search-details.jpg and b/docs-assets/screenshots/images/dark/panels/resources/global-search-details.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/global-search.jpg b/docs-assets/screenshots/images/dark/panels/resources/global-search.jpg index f86a3ee932..7ec2cab83c 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/global-search.jpg and b/docs-assets/screenshots/images/dark/panels/resources/global-search.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/listing-tabs-badge-colors.jpg b/docs-assets/screenshots/images/dark/panels/resources/listing-tabs-badge-colors.jpg index e7a934449b..f64f56b3f9 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/listing-tabs-badge-colors.jpg and b/docs-assets/screenshots/images/dark/panels/resources/listing-tabs-badge-colors.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/listing-tabs-icons.jpg b/docs-assets/screenshots/images/dark/panels/resources/listing-tabs-icons.jpg index e27b4915c3..b966f59186 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/listing-tabs-icons.jpg and b/docs-assets/screenshots/images/dark/panels/resources/listing-tabs-icons.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/listing-tabs.jpg b/docs-assets/screenshots/images/dark/panels/resources/listing-tabs.jpg index ce5b460af0..7917c12b1e 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/listing-tabs.jpg and b/docs-assets/screenshots/images/dark/panels/resources/listing-tabs.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/listing.jpg b/docs-assets/screenshots/images/dark/panels/resources/listing.jpg index c4741a29c9..a4764c0ce7 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/listing.jpg and b/docs-assets/screenshots/images/dark/panels/resources/listing.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/nested.jpg b/docs-assets/screenshots/images/dark/panels/resources/nested.jpg index 8d804718af..965eeee631 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/nested.jpg and b/docs-assets/screenshots/images/dark/panels/resources/nested.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/relation-manager-attach.jpg b/docs-assets/screenshots/images/dark/panels/resources/relation-manager-attach.jpg index f6582e9456..6272a3f773 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/relation-manager-attach.jpg and b/docs-assets/screenshots/images/dark/panels/resources/relation-manager-attach.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/relation-manager-grouped.jpg b/docs-assets/screenshots/images/dark/panels/resources/relation-manager-grouped.jpg index d5bb43351f..47f5f0d90a 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/relation-manager-grouped.jpg and b/docs-assets/screenshots/images/dark/panels/resources/relation-manager-grouped.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/relation-manager.jpg b/docs-assets/screenshots/images/dark/panels/resources/relation-manager.jpg index c99fa72f79..d97046392c 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/relation-manager.jpg and b/docs-assets/screenshots/images/dark/panels/resources/relation-manager.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/simple-modal-create.jpg b/docs-assets/screenshots/images/dark/panels/resources/simple-modal-create.jpg index 34b021e441..7d92c7ab1a 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/simple-modal-create.jpg and b/docs-assets/screenshots/images/dark/panels/resources/simple-modal-create.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/simple-modal-edit.jpg b/docs-assets/screenshots/images/dark/panels/resources/simple-modal-edit.jpg index e29603ae4f..e89c033948 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/simple-modal-edit.jpg and b/docs-assets/screenshots/images/dark/panels/resources/simple-modal-edit.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/singular.jpg b/docs-assets/screenshots/images/dark/panels/resources/singular.jpg index 8278eb21b6..1dd9925246 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/singular.jpg and b/docs-assets/screenshots/images/dark/panels/resources/singular.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/sub-navigation-end.jpg b/docs-assets/screenshots/images/dark/panels/resources/sub-navigation-end.jpg index 68ba974420..1997d691c9 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/sub-navigation-end.jpg and b/docs-assets/screenshots/images/dark/panels/resources/sub-navigation-end.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/sub-navigation-top.jpg b/docs-assets/screenshots/images/dark/panels/resources/sub-navigation-top.jpg index 3144acef91..3f714e7f7b 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/sub-navigation-top.jpg and b/docs-assets/screenshots/images/dark/panels/resources/sub-navigation-top.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/sub-navigation.jpg b/docs-assets/screenshots/images/dark/panels/resources/sub-navigation.jpg index c989194342..9133d91733 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/sub-navigation.jpg and b/docs-assets/screenshots/images/dark/panels/resources/sub-navigation.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/trashed.jpg b/docs-assets/screenshots/images/dark/panels/resources/trashed.jpg index e61c9db51c..4d8991b629 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/trashed.jpg and b/docs-assets/screenshots/images/dark/panels/resources/trashed.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/viewing.jpg b/docs-assets/screenshots/images/dark/panels/resources/viewing.jpg index 18494d87ed..bbeb9a4c57 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/viewing.jpg and b/docs-assets/screenshots/images/dark/panels/resources/viewing.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/resources/widgets.jpg b/docs-assets/screenshots/images/dark/panels/resources/widgets.jpg index 7d98dd4d58..80f2c7d900 100644 Binary files a/docs-assets/screenshots/images/dark/panels/resources/widgets.jpg and b/docs-assets/screenshots/images/dark/panels/resources/widgets.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/styling/colors.jpg b/docs-assets/screenshots/images/dark/panels/styling/colors.jpg index 6d5287d93d..022efede16 100644 Binary files a/docs-assets/screenshots/images/dark/panels/styling/colors.jpg and b/docs-assets/screenshots/images/dark/panels/styling/colors.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/styling/font.jpg b/docs-assets/screenshots/images/dark/panels/styling/font.jpg index 68de13dd1b..9587cc12a4 100644 Binary files a/docs-assets/screenshots/images/dark/panels/styling/font.jpg and b/docs-assets/screenshots/images/dark/panels/styling/font.jpg differ diff --git a/docs-assets/screenshots/images/dark/panels/styling/sidebar-width.jpg b/docs-assets/screenshots/images/dark/panels/styling/sidebar-width.jpg index 9551285617..b27c6bebed 100644 Binary files a/docs-assets/screenshots/images/dark/panels/styling/sidebar-width.jpg and b/docs-assets/screenshots/images/dark/panels/styling/sidebar-width.jpg differ diff --git a/docs-assets/screenshots/images/dark/primes/text/badge-icon.jpg b/docs-assets/screenshots/images/dark/primes/text/badge-icon.jpg index ef03883598..4c4d51fb00 100644 Binary files a/docs-assets/screenshots/images/dark/primes/text/badge-icon.jpg and b/docs-assets/screenshots/images/dark/primes/text/badge-icon.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/before-cells.jpg b/docs-assets/screenshots/images/dark/tables/actions/before-cells.jpg index 91f0d0dfc2..ebbfee8854 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/before-cells.jpg and b/docs-assets/screenshots/images/dark/tables/actions/before-cells.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/before-columns.jpg b/docs-assets/screenshots/images/dark/tables/actions/before-columns.jpg index a0ab5661a2..c264199f14 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/before-columns.jpg and b/docs-assets/screenshots/images/dark/tables/actions/before-columns.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/bulk-not-grouped.jpg b/docs-assets/screenshots/images/dark/tables/actions/bulk-not-grouped.jpg index 8cc51bbfc2..3c6af19cc7 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/bulk-not-grouped.jpg and b/docs-assets/screenshots/images/dark/tables/actions/bulk-not-grouped.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/bulk.jpg b/docs-assets/screenshots/images/dark/tables/actions/bulk.jpg index 359d4df201..6eee74fe83 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/bulk.jpg and b/docs-assets/screenshots/images/dark/tables/actions/bulk.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/group-button.jpg b/docs-assets/screenshots/images/dark/tables/actions/group-button.jpg index ab51d32ffb..f1635801b0 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/group-button.jpg and b/docs-assets/screenshots/images/dark/tables/actions/group-button.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/group-tooltip.jpg b/docs-assets/screenshots/images/dark/tables/actions/group-tooltip.jpg index b254778bfd..fa34259e03 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/group-tooltip.jpg and b/docs-assets/screenshots/images/dark/tables/actions/group-tooltip.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/group.jpg b/docs-assets/screenshots/images/dark/tables/actions/group.jpg index b588b8f4a6..ab2e58b9af 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/group.jpg and b/docs-assets/screenshots/images/dark/tables/actions/group.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/header.jpg b/docs-assets/screenshots/images/dark/tables/actions/header.jpg index 74f286c239..99f1f8d606 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/header.jpg and b/docs-assets/screenshots/images/dark/tables/actions/header.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/simple.jpg b/docs-assets/screenshots/images/dark/tables/actions/simple.jpg index e0e8a54154..0808f9cfdc 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/simple.jpg and b/docs-assets/screenshots/images/dark/tables/actions/simple.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/actions/toolbar.jpg b/docs-assets/screenshots/images/dark/tables/actions/toolbar.jpg index 67604865da..269a850f54 100644 Binary files a/docs-assets/screenshots/images/dark/tables/actions/toolbar.jpg and b/docs-assets/screenshots/images/dark/tables/actions/toolbar.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/color/wrap.jpg b/docs-assets/screenshots/images/dark/tables/columns/color/wrap.jpg index e394119a26..02dd278191 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/color/wrap.jpg and b/docs-assets/screenshots/images/dark/tables/columns/color/wrap.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/column-manager-columns.jpg b/docs-assets/screenshots/images/dark/tables/columns/column-manager-columns.jpg index 7582de9659..18d5fd938e 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/column-manager-columns.jpg and b/docs-assets/screenshots/images/dark/tables/columns/column-manager-columns.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/column-manager-modal.jpg b/docs-assets/screenshots/images/dark/tables/columns/column-manager-modal.jpg index b9f15841e2..40d92522c2 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/column-manager-modal.jpg and b/docs-assets/screenshots/images/dark/tables/columns/column-manager-modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/column-manager-reorderable.jpg b/docs-assets/screenshots/images/dark/tables/columns/column-manager-reorderable.jpg index 6bc01bb81c..ae4230fa73 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/column-manager-reorderable.jpg and b/docs-assets/screenshots/images/dark/tables/columns/column-manager-reorderable.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/column-manager.jpg b/docs-assets/screenshots/images/dark/tables/columns/column-manager.jpg index 9f3eb93bcb..abe39cab1c 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/column-manager.jpg and b/docs-assets/screenshots/images/dark/tables/columns/column-manager.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/grouping.jpg b/docs-assets/screenshots/images/dark/tables/columns/grouping.jpg index b1d422e1c1..34dd12fc4f 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/grouping.jpg and b/docs-assets/screenshots/images/dark/tables/columns/grouping.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/individually-searchable.jpg b/docs-assets/screenshots/images/dark/tables/columns/individually-searchable.jpg index 6d45564652..8b7aa54731 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/individually-searchable.jpg and b/docs-assets/screenshots/images/dark/tables/columns/individually-searchable.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/searchable.jpg b/docs-assets/screenshots/images/dark/tables/columns/searchable.jpg index 091f09eba3..5448afdedc 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/searchable.jpg and b/docs-assets/screenshots/images/dark/tables/columns/searchable.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/text/bulleted.jpg b/docs-assets/screenshots/images/dark/tables/columns/text/bulleted.jpg index 577fd2a9dc..f54d903285 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/text/bulleted.jpg and b/docs-assets/screenshots/images/dark/tables/columns/text/bulleted.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/text/copyable.jpg b/docs-assets/screenshots/images/dark/tables/columns/text/copyable.jpg index 8da796c5df..de99c5a197 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/text/copyable.jpg and b/docs-assets/screenshots/images/dark/tables/columns/text/copyable.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/text/date-tooltip.jpg b/docs-assets/screenshots/images/dark/tables/columns/text/date-tooltip.jpg index e8b1972e3d..fb7b415b23 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/text/date-tooltip.jpg and b/docs-assets/screenshots/images/dark/tables/columns/text/date-tooltip.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/text/expandable-limited-list.jpg b/docs-assets/screenshots/images/dark/tables/columns/text/expandable-limited-list.jpg index e8a293017e..e3f657c70a 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/text/expandable-limited-list.jpg and b/docs-assets/screenshots/images/dark/tables/columns/text/expandable-limited-list.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/text/list.jpg b/docs-assets/screenshots/images/dark/tables/columns/text/list.jpg index 392df15032..61d7c9c67a 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/text/list.jpg and b/docs-assets/screenshots/images/dark/tables/columns/text/list.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/width.jpg b/docs-assets/screenshots/images/dark/tables/columns/width.jpg index da891501f3..2a514ad6db 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/width.jpg and b/docs-assets/screenshots/images/dark/tables/columns/width.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/columns/wrap-header.jpg b/docs-assets/screenshots/images/dark/tables/columns/wrap-header.jpg index 2de94a221f..d7a137030f 100644 Binary files a/docs-assets/screenshots/images/dark/tables/columns/wrap-header.jpg and b/docs-assets/screenshots/images/dark/tables/columns/wrap-header.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/custom-row-classes.jpg b/docs-assets/screenshots/images/dark/tables/custom-row-classes.jpg index a35ef97bf7..9e43237328 100644 Binary files a/docs-assets/screenshots/images/dark/tables/custom-row-classes.jpg and b/docs-assets/screenshots/images/dark/tables/custom-row-classes.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/example.jpg b/docs-assets/screenshots/images/dark/tables/example.jpg index e94f743535..fd82d19b41 100644 Binary files a/docs-assets/screenshots/images/dark/tables/example.jpg and b/docs-assets/screenshots/images/dark/tables/example.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/above-content-collapsible.jpg b/docs-assets/screenshots/images/dark/tables/filters/above-content-collapsible.jpg index 0be5c2ba37..9af1120ef2 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/above-content-collapsible.jpg and b/docs-assets/screenshots/images/dark/tables/filters/above-content-collapsible.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/above-content.jpg b/docs-assets/screenshots/images/dark/tables/filters/above-content.jpg index 69a3a47413..8f8df71be8 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/above-content.jpg and b/docs-assets/screenshots/images/dark/tables/filters/above-content.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/after-content.jpg b/docs-assets/screenshots/images/dark/tables/filters/after-content.jpg index 10f208b749..ef2f48d89a 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/after-content.jpg and b/docs-assets/screenshots/images/dark/tables/filters/after-content.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/before-content.jpg b/docs-assets/screenshots/images/dark/tables/filters/before-content.jpg index 9490816988..e7c1b87ba4 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/before-content.jpg and b/docs-assets/screenshots/images/dark/tables/filters/before-content.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/below-content.jpg b/docs-assets/screenshots/images/dark/tables/filters/below-content.jpg index a52eddd6cb..7a1f79ee5f 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/below-content.jpg and b/docs-assets/screenshots/images/dark/tables/filters/below-content.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/custom-form-schema.jpg b/docs-assets/screenshots/images/dark/tables/filters/custom-form-schema.jpg index e53a492615..7e5e9efd9f 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/custom-form-schema.jpg and b/docs-assets/screenshots/images/dark/tables/filters/custom-form-schema.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/custom-form.jpg b/docs-assets/screenshots/images/dark/tables/filters/custom-form.jpg index 212985bcce..ca2af22595 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/custom-form.jpg and b/docs-assets/screenshots/images/dark/tables/filters/custom-form.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/custom-remove-all-action.jpg b/docs-assets/screenshots/images/dark/tables/filters/custom-remove-all-action.jpg index ad06ce3211..830b10a5d0 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/custom-remove-all-action.jpg and b/docs-assets/screenshots/images/dark/tables/filters/custom-remove-all-action.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/custom-trigger-action.jpg b/docs-assets/screenshots/images/dark/tables/filters/custom-trigger-action.jpg index 818d313bba..1679a49701 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/custom-trigger-action.jpg and b/docs-assets/screenshots/images/dark/tables/filters/custom-trigger-action.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/grid-columns.jpg b/docs-assets/screenshots/images/dark/tables/filters/grid-columns.jpg index d29ea3ef5e..eaf5ef66f9 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/grid-columns.jpg and b/docs-assets/screenshots/images/dark/tables/filters/grid-columns.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/indicators.jpg b/docs-assets/screenshots/images/dark/tables/filters/indicators.jpg index 242f9494e5..5820080baa 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/indicators.jpg and b/docs-assets/screenshots/images/dark/tables/filters/indicators.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/modal.jpg b/docs-assets/screenshots/images/dark/tables/filters/modal.jpg index 8a9fe1903d..5f99e2d457 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/modal.jpg and b/docs-assets/screenshots/images/dark/tables/filters/modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/multi-select.jpg b/docs-assets/screenshots/images/dark/tables/filters/multi-select.jpg index b207568281..a0b660eca0 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/multi-select.jpg and b/docs-assets/screenshots/images/dark/tables/filters/multi-select.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/query-builder.jpg b/docs-assets/screenshots/images/dark/tables/filters/query-builder.jpg index 3be02d447a..8a5904ce25 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/query-builder.jpg and b/docs-assets/screenshots/images/dark/tables/filters/query-builder.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/select.jpg b/docs-assets/screenshots/images/dark/tables/filters/select.jpg index 09f3f83735..01e701f943 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/select.jpg and b/docs-assets/screenshots/images/dark/tables/filters/select.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/simple.jpg b/docs-assets/screenshots/images/dark/tables/filters/simple.jpg index e0569e350e..858b308105 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/simple.jpg and b/docs-assets/screenshots/images/dark/tables/filters/simple.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/ternary.jpg b/docs-assets/screenshots/images/dark/tables/filters/ternary.jpg index 9f6d8dece2..1790ead7f8 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/ternary.jpg and b/docs-assets/screenshots/images/dark/tables/filters/ternary.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/filters/toggle.jpg b/docs-assets/screenshots/images/dark/tables/filters/toggle.jpg index 10386c028d..99ec3a285d 100644 Binary files a/docs-assets/screenshots/images/dark/tables/filters/toggle.jpg and b/docs-assets/screenshots/images/dark/tables/filters/toggle.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/grouping-collapsible.jpg b/docs-assets/screenshots/images/dark/tables/grouping-collapsible.jpg index f334be3520..953557c9aa 100644 Binary files a/docs-assets/screenshots/images/dark/tables/grouping-collapsible.jpg and b/docs-assets/screenshots/images/dark/tables/grouping-collapsible.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/grouping-date.jpg b/docs-assets/screenshots/images/dark/tables/grouping-date.jpg index 040660f944..de4d9cb341 100644 Binary files a/docs-assets/screenshots/images/dark/tables/grouping-date.jpg and b/docs-assets/screenshots/images/dark/tables/grouping-date.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/grouping-descriptions.jpg b/docs-assets/screenshots/images/dark/tables/grouping-descriptions.jpg index 64fd545253..0ea9a62fd8 100644 Binary files a/docs-assets/screenshots/images/dark/tables/grouping-descriptions.jpg and b/docs-assets/screenshots/images/dark/tables/grouping-descriptions.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/grouping-groups-only.jpg b/docs-assets/screenshots/images/dark/tables/grouping-groups-only.jpg index be8c326abd..c2e7377399 100644 Binary files a/docs-assets/screenshots/images/dark/tables/grouping-groups-only.jpg and b/docs-assets/screenshots/images/dark/tables/grouping-groups-only.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/grouping-selectable.jpg b/docs-assets/screenshots/images/dark/tables/grouping-selectable.jpg index 87f71fb693..9f76232a3a 100644 Binary files a/docs-assets/screenshots/images/dark/tables/grouping-selectable.jpg and b/docs-assets/screenshots/images/dark/tables/grouping-selectable.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/grouping.jpg b/docs-assets/screenshots/images/dark/tables/grouping.jpg index f6fe4c5232..08e4fe2eb3 100644 Binary files a/docs-assets/screenshots/images/dark/tables/grouping.jpg and b/docs-assets/screenshots/images/dark/tables/grouping.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/heading.jpg b/docs-assets/screenshots/images/dark/tables/heading.jpg index cb11bbfeaa..0715d6aa93 100644 Binary files a/docs-assets/screenshots/images/dark/tables/heading.jpg and b/docs-assets/screenshots/images/dark/tables/heading.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/collapsible.jpg b/docs-assets/screenshots/images/dark/tables/layout/collapsible.jpg index 6eb792da37..2223d8faed 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/collapsible.jpg and b/docs-assets/screenshots/images/dark/tables/layout/collapsible.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/collapsible/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/collapsible/mobile.jpg index 98fbb100f4..56766330d7 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/collapsible/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/collapsible/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/column-grid.jpg b/docs-assets/screenshots/images/dark/tables/layout/column-grid.jpg index 20726e7972..df2b162fb5 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/column-grid.jpg and b/docs-assets/screenshots/images/dark/tables/layout/column-grid.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/demo.jpg b/docs-assets/screenshots/images/dark/tables/layout/demo.jpg index 183914c330..8d76d5d8e1 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/demo.jpg and b/docs-assets/screenshots/images/dark/tables/layout/demo.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/demo/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/demo/mobile.jpg index da66d77bf1..02e8f395ed 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/demo/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/demo/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/grid.jpg b/docs-assets/screenshots/images/dark/tables/layout/grid.jpg index 7aa7e190b2..36e6526b97 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/grid.jpg and b/docs-assets/screenshots/images/dark/tables/layout/grid.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/grid/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/grid/mobile.jpg index e9300dc070..3955bcff4e 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/grid/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/grid/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/grow-disabled.jpg b/docs-assets/screenshots/images/dark/tables/layout/grow-disabled.jpg index 8a539c931d..4b6f207058 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/grow-disabled.jpg and b/docs-assets/screenshots/images/dark/tables/layout/grow-disabled.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/grow-disabled/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/grow-disabled/mobile.jpg index 389de38fa1..758b2221f7 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/grow-disabled/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/grow-disabled/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/split-desktop.jpg b/docs-assets/screenshots/images/dark/tables/layout/split-desktop.jpg index a85b2435ac..ee57e684f5 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/split-desktop.jpg and b/docs-assets/screenshots/images/dark/tables/layout/split-desktop.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/split-desktop/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/split-desktop/mobile.jpg index 389de38fa1..758b2221f7 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/split-desktop/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/split-desktop/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/split.jpg b/docs-assets/screenshots/images/dark/tables/layout/split.jpg index a85b2435ac..ee57e684f5 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/split.jpg and b/docs-assets/screenshots/images/dark/tables/layout/split.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/split/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/split/mobile.jpg index ba74cb0bb1..ab6f5c639e 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/split/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/split/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/stack-aligned-right.jpg b/docs-assets/screenshots/images/dark/tables/layout/stack-aligned-right.jpg index 519ec2b0ad..a5d0df99ec 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/stack-aligned-right.jpg and b/docs-assets/screenshots/images/dark/tables/layout/stack-aligned-right.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/stack-hidden-on-mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/stack-hidden-on-mobile.jpg index 4074b75cc2..f1a0a9f5f4 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/stack-hidden-on-mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/stack-hidden-on-mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/stack-hidden-on-mobile/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/stack-hidden-on-mobile/mobile.jpg index ca35a5881a..e29c478162 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/stack-hidden-on-mobile/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/stack-hidden-on-mobile/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/stack-spaced.jpg b/docs-assets/screenshots/images/dark/tables/layout/stack-spaced.jpg index 2965b436c6..1c53ff0f35 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/stack-spaced.jpg and b/docs-assets/screenshots/images/dark/tables/layout/stack-spaced.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/stack.jpg b/docs-assets/screenshots/images/dark/tables/layout/stack.jpg index 4074b75cc2..7dbad91356 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/stack.jpg and b/docs-assets/screenshots/images/dark/tables/layout/stack.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/stack/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/stack/mobile.jpg index e56707643f..8815159cff 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/stack/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/stack/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/stacked-on-mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/stacked-on-mobile.jpg index 934c32e756..9ec53cae82 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/stacked-on-mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/stacked-on-mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/layout/stacked-on-mobile/mobile.jpg b/docs-assets/screenshots/images/dark/tables/layout/stacked-on-mobile/mobile.jpg index e6d131af64..6bd78eb7fd 100644 Binary files a/docs-assets/screenshots/images/dark/tables/layout/stacked-on-mobile/mobile.jpg and b/docs-assets/screenshots/images/dark/tables/layout/stacked-on-mobile/mobile.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/overview/actions-modal.jpg b/docs-assets/screenshots/images/dark/tables/overview/actions-modal.jpg index f810730f9e..198de8477b 100644 Binary files a/docs-assets/screenshots/images/dark/tables/overview/actions-modal.jpg and b/docs-assets/screenshots/images/dark/tables/overview/actions-modal.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/overview/actions.jpg b/docs-assets/screenshots/images/dark/tables/overview/actions.jpg index 4268fcc8dd..557b5a73ab 100644 Binary files a/docs-assets/screenshots/images/dark/tables/overview/actions.jpg and b/docs-assets/screenshots/images/dark/tables/overview/actions.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/overview/filters.jpg b/docs-assets/screenshots/images/dark/tables/overview/filters.jpg index a762e39910..95351401f4 100644 Binary files a/docs-assets/screenshots/images/dark/tables/overview/filters.jpg and b/docs-assets/screenshots/images/dark/tables/overview/filters.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/overview/relationship-columns.jpg b/docs-assets/screenshots/images/dark/tables/overview/relationship-columns.jpg index 184654e0ff..90c10da7ac 100644 Binary files a/docs-assets/screenshots/images/dark/tables/overview/relationship-columns.jpg and b/docs-assets/screenshots/images/dark/tables/overview/relationship-columns.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/overview/searchable-columns.jpg b/docs-assets/screenshots/images/dark/tables/overview/searchable-columns.jpg index 1ff0ad8452..1b7f4d8101 100644 Binary files a/docs-assets/screenshots/images/dark/tables/overview/searchable-columns.jpg and b/docs-assets/screenshots/images/dark/tables/overview/searchable-columns.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/overview/sortable-columns.jpg b/docs-assets/screenshots/images/dark/tables/overview/sortable-columns.jpg index acf7e51127..08c80a2104 100644 Binary files a/docs-assets/screenshots/images/dark/tables/overview/sortable-columns.jpg and b/docs-assets/screenshots/images/dark/tables/overview/sortable-columns.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/pagination/cursor.jpg b/docs-assets/screenshots/images/dark/tables/pagination/cursor.jpg index eb88952458..ebaa64c986 100644 Binary files a/docs-assets/screenshots/images/dark/tables/pagination/cursor.jpg and b/docs-assets/screenshots/images/dark/tables/pagination/cursor.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/pagination/default.jpg b/docs-assets/screenshots/images/dark/tables/pagination/default.jpg index a0067239d9..1e675d547d 100644 Binary files a/docs-assets/screenshots/images/dark/tables/pagination/default.jpg and b/docs-assets/screenshots/images/dark/tables/pagination/default.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/pagination/extreme.jpg b/docs-assets/screenshots/images/dark/tables/pagination/extreme.jpg index 1f148385e2..9c9c7bd43e 100644 Binary files a/docs-assets/screenshots/images/dark/tables/pagination/extreme.jpg and b/docs-assets/screenshots/images/dark/tables/pagination/extreme.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/pagination/simple.jpg b/docs-assets/screenshots/images/dark/tables/pagination/simple.jpg index eb88952458..ebaa64c986 100644 Binary files a/docs-assets/screenshots/images/dark/tables/pagination/simple.jpg and b/docs-assets/screenshots/images/dark/tables/pagination/simple.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/reordering.jpg b/docs-assets/screenshots/images/dark/tables/reordering.jpg index 4deb0f818e..8cb2785649 100644 Binary files a/docs-assets/screenshots/images/dark/tables/reordering.jpg and b/docs-assets/screenshots/images/dark/tables/reordering.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/reordering/custom-trigger-action.jpg b/docs-assets/screenshots/images/dark/tables/reordering/custom-trigger-action.jpg index c33941ad31..f3afea8af0 100644 Binary files a/docs-assets/screenshots/images/dark/tables/reordering/custom-trigger-action.jpg and b/docs-assets/screenshots/images/dark/tables/reordering/custom-trigger-action.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/striped.jpg b/docs-assets/screenshots/images/dark/tables/striped.jpg index fd97112384..c88f9bf74d 100644 Binary files a/docs-assets/screenshots/images/dark/tables/striped.jpg and b/docs-assets/screenshots/images/dark/tables/striped.jpg differ diff --git a/docs-assets/screenshots/images/dark/tables/summaries.jpg b/docs-assets/screenshots/images/dark/tables/summaries.jpg index 7ce41c68d4..896b571c93 100644 Binary files a/docs-assets/screenshots/images/dark/tables/summaries.jpg and b/docs-assets/screenshots/images/dark/tables/summaries.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/bar.jpg b/docs-assets/screenshots/images/dark/widgets/chart/bar.jpg index 3711544035..d0544518d0 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/bar.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/bar.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/bubble.jpg b/docs-assets/screenshots/images/dark/widgets/chart/bubble.jpg index eaa15a142e..0805c37d43 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/bubble.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/bubble.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/collapsible.jpg b/docs-assets/screenshots/images/dark/widgets/chart/collapsible.jpg index cf48557908..54fa24db63 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/collapsible.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/collapsible.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/custom-filters.jpg b/docs-assets/screenshots/images/dark/widgets/chart/custom-filters.jpg index 52c212b916..6734633029 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/custom-filters.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/custom-filters.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/description.jpg b/docs-assets/screenshots/images/dark/widgets/chart/description.jpg index 76db213889..f2cf17abf8 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/description.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/description.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/doughnut.jpg b/docs-assets/screenshots/images/dark/widgets/chart/doughnut.jpg index 062665d3d4..a3ac81dfc7 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/doughnut.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/doughnut.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/filter.jpg b/docs-assets/screenshots/images/dark/widgets/chart/filter.jpg index 28138817fc..2bb844e7f6 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/filter.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/filter.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/line.jpg b/docs-assets/screenshots/images/dark/widgets/chart/line.jpg index c3f6cf9c79..29e7928aaa 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/line.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/line.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/max-height.jpg b/docs-assets/screenshots/images/dark/widgets/chart/max-height.jpg index dcc44f12c0..297cd5b1d5 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/max-height.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/max-height.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/pie.jpg b/docs-assets/screenshots/images/dark/widgets/chart/pie.jpg index 56acd7a83d..4a40eda039 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/pie.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/pie.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/polar-area.jpg b/docs-assets/screenshots/images/dark/widgets/chart/polar-area.jpg index 7211209547..eb4f4f4ace 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/polar-area.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/polar-area.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/radar.jpg b/docs-assets/screenshots/images/dark/widgets/chart/radar.jpg index 553f6f5925..c36c6a2092 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/radar.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/radar.jpg differ diff --git a/docs-assets/screenshots/images/dark/widgets/chart/scatter.jpg b/docs-assets/screenshots/images/dark/widgets/chart/scatter.jpg index 577ad54bc2..0f3e449d8c 100644 Binary files a/docs-assets/screenshots/images/dark/widgets/chart/scatter.jpg and b/docs-assets/screenshots/images/dark/widgets/chart/scatter.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/create-action/modal.jpg b/docs-assets/screenshots/images/light/actions/create-action/modal.jpg index 4044acb91f..42138621ac 100644 Binary files a/docs-assets/screenshots/images/light/actions/create-action/modal.jpg and b/docs-assets/screenshots/images/light/actions/create-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/delete-action/modal.jpg b/docs-assets/screenshots/images/light/actions/delete-action/modal.jpg index ff5db7dd0c..c3cb5f889f 100644 Binary files a/docs-assets/screenshots/images/light/actions/delete-action/modal.jpg and b/docs-assets/screenshots/images/light/actions/delete-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/edit-action/modal.jpg b/docs-assets/screenshots/images/light/actions/edit-action/modal.jpg index 7b0c869bf4..5f17e57101 100644 Binary files a/docs-assets/screenshots/images/light/actions/edit-action/modal.jpg and b/docs-assets/screenshots/images/light/actions/edit-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/export-action/modal.jpg b/docs-assets/screenshots/images/light/actions/export-action/modal.jpg index fb4a10472b..91317c7d30 100644 Binary files a/docs-assets/screenshots/images/light/actions/export-action/modal.jpg and b/docs-assets/screenshots/images/light/actions/export-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/import-action/modal.jpg b/docs-assets/screenshots/images/light/actions/import-action/modal.jpg index 863579a10d..051b3cc523 100644 Binary files a/docs-assets/screenshots/images/light/actions/import-action/modal.jpg and b/docs-assets/screenshots/images/light/actions/import-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/modal/form.jpg b/docs-assets/screenshots/images/light/actions/modal/form.jpg index 030f90ccd9..a0f37d970e 100644 Binary files a/docs-assets/screenshots/images/light/actions/modal/form.jpg and b/docs-assets/screenshots/images/light/actions/modal/form.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/modal/schema.jpg b/docs-assets/screenshots/images/light/actions/modal/schema.jpg index 58b19c52c1..9c99126181 100644 Binary files a/docs-assets/screenshots/images/light/actions/modal/schema.jpg and b/docs-assets/screenshots/images/light/actions/modal/schema.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/modal/slide-over-start.jpg b/docs-assets/screenshots/images/light/actions/modal/slide-over-start.jpg index ae9be324e1..fd8773b188 100644 Binary files a/docs-assets/screenshots/images/light/actions/modal/slide-over-start.jpg and b/docs-assets/screenshots/images/light/actions/modal/slide-over-start.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/modal/slide-over.jpg b/docs-assets/screenshots/images/light/actions/modal/slide-over.jpg index 9a0617a677..bf3eb43dfc 100644 Binary files a/docs-assets/screenshots/images/light/actions/modal/slide-over.jpg and b/docs-assets/screenshots/images/light/actions/modal/slide-over.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/replicate-action/modal.jpg b/docs-assets/screenshots/images/light/actions/replicate-action/modal.jpg index b7c1254380..42af285300 100644 Binary files a/docs-assets/screenshots/images/light/actions/replicate-action/modal.jpg and b/docs-assets/screenshots/images/light/actions/replicate-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/actions/view-action/modal.jpg b/docs-assets/screenshots/images/light/actions/view-action/modal.jpg index 34894626a0..c21a6bcdb1 100644 Binary files a/docs-assets/screenshots/images/light/actions/view-action/modal.jpg and b/docs-assets/screenshots/images/light/actions/view-action/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/components/empty-state/description.jpg b/docs-assets/screenshots/images/light/components/empty-state/description.jpg index 43a5443113..133fa58e2d 100644 Binary files a/docs-assets/screenshots/images/light/components/empty-state/description.jpg and b/docs-assets/screenshots/images/light/components/empty-state/description.jpg differ diff --git a/docs-assets/screenshots/images/light/components/empty-state/icon-color.jpg b/docs-assets/screenshots/images/light/components/empty-state/icon-color.jpg index 535f5b504a..825c9a1e41 100644 Binary files a/docs-assets/screenshots/images/light/components/empty-state/icon-color.jpg and b/docs-assets/screenshots/images/light/components/empty-state/icon-color.jpg differ diff --git a/docs-assets/screenshots/images/light/components/empty-state/icon-sizes.jpg b/docs-assets/screenshots/images/light/components/empty-state/icon-sizes.jpg index 1b2196b346..e0ea1754f9 100644 Binary files a/docs-assets/screenshots/images/light/components/empty-state/icon-sizes.jpg and b/docs-assets/screenshots/images/light/components/empty-state/icon-sizes.jpg differ diff --git a/docs-assets/screenshots/images/light/components/empty-state/not-contained.jpg b/docs-assets/screenshots/images/light/components/empty-state/not-contained.jpg index 4c650876e0..895be70bc2 100644 Binary files a/docs-assets/screenshots/images/light/components/empty-state/not-contained.jpg and b/docs-assets/screenshots/images/light/components/empty-state/not-contained.jpg differ diff --git a/docs-assets/screenshots/images/light/components/loading-indicator/simple.jpg b/docs-assets/screenshots/images/light/components/loading-indicator/simple.jpg index ade67c6522..b568b2f5ab 100644 Binary files a/docs-assets/screenshots/images/light/components/loading-indicator/simple.jpg and b/docs-assets/screenshots/images/light/components/loading-indicator/simple.jpg differ diff --git a/docs-assets/screenshots/images/light/components/modal/alignment.jpg b/docs-assets/screenshots/images/light/components/modal/alignment.jpg index 2d09fb5b13..b38ea3b513 100644 Binary files a/docs-assets/screenshots/images/light/components/modal/alignment.jpg and b/docs-assets/screenshots/images/light/components/modal/alignment.jpg differ diff --git a/docs-assets/screenshots/images/light/components/modal/heading.jpg b/docs-assets/screenshots/images/light/components/modal/heading.jpg index 99a1352805..f0bce231d2 100644 Binary files a/docs-assets/screenshots/images/light/components/modal/heading.jpg and b/docs-assets/screenshots/images/light/components/modal/heading.jpg differ diff --git a/docs-assets/screenshots/images/light/components/modal/icon.jpg b/docs-assets/screenshots/images/light/components/modal/icon.jpg index 9cf4736857..65e3dd7f69 100644 Binary files a/docs-assets/screenshots/images/light/components/modal/icon.jpg and b/docs-assets/screenshots/images/light/components/modal/icon.jpg differ diff --git a/docs-assets/screenshots/images/light/components/modal/simple.jpg b/docs-assets/screenshots/images/light/components/modal/simple.jpg index 7d4aa9d74a..04a9b353a2 100644 Binary files a/docs-assets/screenshots/images/light/components/modal/simple.jpg and b/docs-assets/screenshots/images/light/components/modal/simple.jpg differ diff --git a/docs-assets/screenshots/images/light/components/modal/sticky-header.jpg b/docs-assets/screenshots/images/light/components/modal/sticky-header.jpg index 2e994ce504..6d1d9adddd 100644 Binary files a/docs-assets/screenshots/images/light/components/modal/sticky-header.jpg and b/docs-assets/screenshots/images/light/components/modal/sticky-header.jpg differ diff --git a/docs-assets/screenshots/images/light/forms/fields/builder/simple.jpg b/docs-assets/screenshots/images/light/forms/fields/builder/simple.jpg index daa922f765..4e6ce66f28 100644 Binary files a/docs-assets/screenshots/images/light/forms/fields/builder/simple.jpg and b/docs-assets/screenshots/images/light/forms/fields/builder/simple.jpg differ diff --git a/docs-assets/screenshots/images/light/forms/fields/file-upload/downloadable.jpg b/docs-assets/screenshots/images/light/forms/fields/file-upload/downloadable.jpg index 8d3ea6237a..ea125c016d 100644 Binary files a/docs-assets/screenshots/images/light/forms/fields/file-upload/downloadable.jpg and b/docs-assets/screenshots/images/light/forms/fields/file-upload/downloadable.jpg differ diff --git a/docs-assets/screenshots/images/light/forms/fields/file-upload/image-editor.jpg b/docs-assets/screenshots/images/light/forms/fields/file-upload/image-editor.jpg index 827cf836c2..46f3941e77 100644 Binary files a/docs-assets/screenshots/images/light/forms/fields/file-upload/image-editor.jpg and b/docs-assets/screenshots/images/light/forms/fields/file-upload/image-editor.jpg differ diff --git a/docs-assets/screenshots/images/light/forms/fields/file-upload/image-preview.jpg b/docs-assets/screenshots/images/light/forms/fields/file-upload/image-preview.jpg index 462e1795b0..d5d2909690 100644 Binary files a/docs-assets/screenshots/images/light/forms/fields/file-upload/image-preview.jpg and b/docs-assets/screenshots/images/light/forms/fields/file-upload/image-preview.jpg differ diff --git a/docs-assets/screenshots/images/light/forms/fields/file-upload/multiple-grid.jpg b/docs-assets/screenshots/images/light/forms/fields/file-upload/multiple-grid.jpg index 26c248bb0d..2b7d83b368 100644 Binary files a/docs-assets/screenshots/images/light/forms/fields/file-upload/multiple-grid.jpg and b/docs-assets/screenshots/images/light/forms/fields/file-upload/multiple-grid.jpg differ diff --git a/docs-assets/screenshots/images/light/forms/fields/file-upload/openable.jpg b/docs-assets/screenshots/images/light/forms/fields/file-upload/openable.jpg index 4fac7bbdb5..0587bb2f04 100644 Binary files a/docs-assets/screenshots/images/light/forms/fields/file-upload/openable.jpg and b/docs-assets/screenshots/images/light/forms/fields/file-upload/openable.jpg differ diff --git a/docs-assets/screenshots/images/light/forms/fields/file-upload/simple.jpg b/docs-assets/screenshots/images/light/forms/fields/file-upload/simple.jpg index 45bc7b38d3..1bb0e00cf3 100644 Binary files a/docs-assets/screenshots/images/light/forms/fields/file-upload/simple.jpg and b/docs-assets/screenshots/images/light/forms/fields/file-upload/simple.jpg differ diff --git a/docs-assets/screenshots/images/light/forms/fields/modal-table-select/modal.jpg b/docs-assets/screenshots/images/light/forms/fields/modal-table-select/modal.jpg index 04ebbca539..e53fbdf099 100644 Binary files a/docs-assets/screenshots/images/light/forms/fields/modal-table-select/modal.jpg and b/docs-assets/screenshots/images/light/forms/fields/modal-table-select/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/infolists/entries/text/copyable.jpg b/docs-assets/screenshots/images/light/infolists/entries/text/copyable.jpg index c92996e250..d766a1f1e1 100644 Binary files a/docs-assets/screenshots/images/light/infolists/entries/text/copyable.jpg and b/docs-assets/screenshots/images/light/infolists/entries/text/copyable.jpg differ diff --git a/docs-assets/screenshots/images/light/infolists/entries/text/date-tooltip.jpg b/docs-assets/screenshots/images/light/infolists/entries/text/date-tooltip.jpg index 15afb10d4d..b88a0763b6 100644 Binary files a/docs-assets/screenshots/images/light/infolists/entries/text/date-tooltip.jpg and b/docs-assets/screenshots/images/light/infolists/entries/text/date-tooltip.jpg differ diff --git a/docs-assets/screenshots/images/light/infolists/entries/text/since.jpg b/docs-assets/screenshots/images/light/infolists/entries/text/since.jpg index b78564688f..c94f3b4908 100644 Binary files a/docs-assets/screenshots/images/light/infolists/entries/text/since.jpg and b/docs-assets/screenshots/images/light/infolists/entries/text/since.jpg differ diff --git a/docs-assets/screenshots/images/light/notifications/database.jpg b/docs-assets/screenshots/images/light/notifications/database.jpg index 4e8220dfd3..b9ac90fd81 100644 Binary files a/docs-assets/screenshots/images/light/notifications/database.jpg and b/docs-assets/screenshots/images/light/notifications/database.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/configuration/colors.jpg b/docs-assets/screenshots/images/light/panels/configuration/colors.jpg index ed99ba13a8..4fbe350adb 100644 Binary files a/docs-assets/screenshots/images/light/panels/configuration/colors.jpg and b/docs-assets/screenshots/images/light/panels/configuration/colors.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/configuration/content-width-full.jpg b/docs-assets/screenshots/images/light/panels/configuration/content-width-full.jpg index 66b30ecd4e..67c222793e 100644 Binary files a/docs-assets/screenshots/images/light/panels/configuration/content-width-full.jpg and b/docs-assets/screenshots/images/light/panels/configuration/content-width-full.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/dashboard-column-spans.jpg b/docs-assets/screenshots/images/light/panels/dashboard-column-spans.jpg index e5075d2f10..036f5a2f71 100644 Binary files a/docs-assets/screenshots/images/light/panels/dashboard-column-spans.jpg and b/docs-assets/screenshots/images/light/panels/dashboard-column-spans.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/dashboard-filter-action.jpg b/docs-assets/screenshots/images/light/panels/dashboard-filter-action.jpg index 5ef328aa80..f0724009a7 100644 Binary files a/docs-assets/screenshots/images/light/panels/dashboard-filter-action.jpg and b/docs-assets/screenshots/images/light/panels/dashboard-filter-action.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/dashboard-filters.jpg b/docs-assets/screenshots/images/light/panels/dashboard-filters.jpg index 1b55dc178b..7f0885c462 100644 Binary files a/docs-assets/screenshots/images/light/panels/dashboard-filters.jpg and b/docs-assets/screenshots/images/light/panels/dashboard-filters.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/dashboard.jpg b/docs-assets/screenshots/images/light/panels/dashboard.jpg index 716eb38ccf..7c7e84fc0f 100644 Binary files a/docs-assets/screenshots/images/light/panels/dashboard.jpg and b/docs-assets/screenshots/images/light/panels/dashboard.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/mfa.jpg b/docs-assets/screenshots/images/light/panels/mfa.jpg index 9eec28259b..391f01217d 100644 Binary files a/docs-assets/screenshots/images/light/panels/mfa.jpg and b/docs-assets/screenshots/images/light/panels/mfa.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/navigation/user-menu-sidebar.jpg b/docs-assets/screenshots/images/light/panels/navigation/user-menu-sidebar.jpg index ba70c54c92..246fe1441f 100644 Binary files a/docs-assets/screenshots/images/light/panels/navigation/user-menu-sidebar.jpg and b/docs-assets/screenshots/images/light/panels/navigation/user-menu-sidebar.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/navigation/user-menu.jpg b/docs-assets/screenshots/images/light/panels/navigation/user-menu.jpg index f549ade975..bb7a94e0a8 100644 Binary files a/docs-assets/screenshots/images/light/panels/navigation/user-menu.jpg and b/docs-assets/screenshots/images/light/panels/navigation/user-menu.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/profile.jpg b/docs-assets/screenshots/images/light/panels/profile.jpg index a6b216235f..942c828f02 100644 Binary files a/docs-assets/screenshots/images/light/panels/profile.jpg and b/docs-assets/screenshots/images/light/panels/profile.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/deleting.jpg b/docs-assets/screenshots/images/light/panels/resources/deleting.jpg index ae3931f294..a97ff111d6 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/deleting.jpg and b/docs-assets/screenshots/images/light/panels/resources/deleting.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/editing-combined-tabs.jpg b/docs-assets/screenshots/images/light/panels/resources/editing-combined-tabs.jpg index 1712c4b2d9..46519b87b1 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/editing-combined-tabs.jpg and b/docs-assets/screenshots/images/light/panels/resources/editing-combined-tabs.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/editing-header-actions.jpg b/docs-assets/screenshots/images/light/panels/resources/editing-header-actions.jpg index 8e93589fc7..2c8a622aeb 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/editing-header-actions.jpg and b/docs-assets/screenshots/images/light/panels/resources/editing-header-actions.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/editing-save-in-header.jpg b/docs-assets/screenshots/images/light/panels/resources/editing-save-in-header.jpg index 0f89a6cbd3..f2f09fb398 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/editing-save-in-header.jpg and b/docs-assets/screenshots/images/light/panels/resources/editing-save-in-header.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/editing-section-actions.jpg b/docs-assets/screenshots/images/light/panels/resources/editing-section-actions.jpg index d540420608..52f01d656e 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/editing-section-actions.jpg and b/docs-assets/screenshots/images/light/panels/resources/editing-section-actions.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/editing.jpg b/docs-assets/screenshots/images/light/panels/resources/editing.jpg index 8030d63d91..e1fa75ae93 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/editing.jpg and b/docs-assets/screenshots/images/light/panels/resources/editing.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/global-search-actions.jpg b/docs-assets/screenshots/images/light/panels/resources/global-search-actions.jpg index 8e8f4b9084..9399d00b2f 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/global-search-actions.jpg and b/docs-assets/screenshots/images/light/panels/resources/global-search-actions.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/global-search-details.jpg b/docs-assets/screenshots/images/light/panels/resources/global-search-details.jpg index efbbe70528..5ae96b71e9 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/global-search-details.jpg and b/docs-assets/screenshots/images/light/panels/resources/global-search-details.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/global-search.jpg b/docs-assets/screenshots/images/light/panels/resources/global-search.jpg index 7afc629254..ecaa7f3c22 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/global-search.jpg and b/docs-assets/screenshots/images/light/panels/resources/global-search.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/listing-tabs-badge-colors.jpg b/docs-assets/screenshots/images/light/panels/resources/listing-tabs-badge-colors.jpg index 6c9e3d70d7..409f35f3ef 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/listing-tabs-badge-colors.jpg and b/docs-assets/screenshots/images/light/panels/resources/listing-tabs-badge-colors.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/listing-tabs-icons.jpg b/docs-assets/screenshots/images/light/panels/resources/listing-tabs-icons.jpg index 038599f0d9..7d5537e96a 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/listing-tabs-icons.jpg and b/docs-assets/screenshots/images/light/panels/resources/listing-tabs-icons.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/listing-tabs.jpg b/docs-assets/screenshots/images/light/panels/resources/listing-tabs.jpg index f0b109f751..65bdca72de 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/listing-tabs.jpg and b/docs-assets/screenshots/images/light/panels/resources/listing-tabs.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/listing.jpg b/docs-assets/screenshots/images/light/panels/resources/listing.jpg index c0feb1f551..f7ab92e78a 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/listing.jpg and b/docs-assets/screenshots/images/light/panels/resources/listing.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/relation-manager-attach.jpg b/docs-assets/screenshots/images/light/panels/resources/relation-manager-attach.jpg index 26fbe45c00..4b585e807f 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/relation-manager-attach.jpg and b/docs-assets/screenshots/images/light/panels/resources/relation-manager-attach.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/relation-manager-grouped.jpg b/docs-assets/screenshots/images/light/panels/resources/relation-manager-grouped.jpg index b10dac0b56..8e8d6f7082 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/relation-manager-grouped.jpg and b/docs-assets/screenshots/images/light/panels/resources/relation-manager-grouped.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/relation-manager.jpg b/docs-assets/screenshots/images/light/panels/resources/relation-manager.jpg index 09d6fe42ce..8ea7d834ec 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/relation-manager.jpg and b/docs-assets/screenshots/images/light/panels/resources/relation-manager.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/simple-modal-create.jpg b/docs-assets/screenshots/images/light/panels/resources/simple-modal-create.jpg index 3f6097e4ed..db25609576 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/simple-modal-create.jpg and b/docs-assets/screenshots/images/light/panels/resources/simple-modal-create.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/simple-modal-edit.jpg b/docs-assets/screenshots/images/light/panels/resources/simple-modal-edit.jpg index a6dd299ec0..a804cc3efd 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/simple-modal-edit.jpg and b/docs-assets/screenshots/images/light/panels/resources/simple-modal-edit.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/singular.jpg b/docs-assets/screenshots/images/light/panels/resources/singular.jpg index 109aae9fd3..588b9c45a4 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/singular.jpg and b/docs-assets/screenshots/images/light/panels/resources/singular.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/sub-navigation-end.jpg b/docs-assets/screenshots/images/light/panels/resources/sub-navigation-end.jpg index 4257d9dce0..83d823c118 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/sub-navigation-end.jpg and b/docs-assets/screenshots/images/light/panels/resources/sub-navigation-end.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/sub-navigation-top.jpg b/docs-assets/screenshots/images/light/panels/resources/sub-navigation-top.jpg index da5f3a55b7..fa009ba0ad 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/sub-navigation-top.jpg and b/docs-assets/screenshots/images/light/panels/resources/sub-navigation-top.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/sub-navigation.jpg b/docs-assets/screenshots/images/light/panels/resources/sub-navigation.jpg index b9f9e44e35..b3670a2543 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/sub-navigation.jpg and b/docs-assets/screenshots/images/light/panels/resources/sub-navigation.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/trashed.jpg b/docs-assets/screenshots/images/light/panels/resources/trashed.jpg index 9d8401c6ba..00456dfd48 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/trashed.jpg and b/docs-assets/screenshots/images/light/panels/resources/trashed.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/viewing.jpg b/docs-assets/screenshots/images/light/panels/resources/viewing.jpg index e6c13f869a..f45a694b69 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/viewing.jpg and b/docs-assets/screenshots/images/light/panels/resources/viewing.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/resources/widgets.jpg b/docs-assets/screenshots/images/light/panels/resources/widgets.jpg index cc79a486ea..131bbddd8b 100644 Binary files a/docs-assets/screenshots/images/light/panels/resources/widgets.jpg and b/docs-assets/screenshots/images/light/panels/resources/widgets.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/styling/colors.jpg b/docs-assets/screenshots/images/light/panels/styling/colors.jpg index 06ba824ce0..61609fb5a0 100644 Binary files a/docs-assets/screenshots/images/light/panels/styling/colors.jpg and b/docs-assets/screenshots/images/light/panels/styling/colors.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/styling/font.jpg b/docs-assets/screenshots/images/light/panels/styling/font.jpg index 607f9de6de..6ab6a9e944 100644 Binary files a/docs-assets/screenshots/images/light/panels/styling/font.jpg and b/docs-assets/screenshots/images/light/panels/styling/font.jpg differ diff --git a/docs-assets/screenshots/images/light/panels/styling/sidebar-width.jpg b/docs-assets/screenshots/images/light/panels/styling/sidebar-width.jpg index bea9168eec..1d4488c5b7 100644 Binary files a/docs-assets/screenshots/images/light/panels/styling/sidebar-width.jpg and b/docs-assets/screenshots/images/light/panels/styling/sidebar-width.jpg differ diff --git a/docs-assets/screenshots/images/light/primes/text/badge-icon.jpg b/docs-assets/screenshots/images/light/primes/text/badge-icon.jpg index 76558abea8..aeea1d8040 100644 Binary files a/docs-assets/screenshots/images/light/primes/text/badge-icon.jpg and b/docs-assets/screenshots/images/light/primes/text/badge-icon.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/before-cells.jpg b/docs-assets/screenshots/images/light/tables/actions/before-cells.jpg index c9084196a5..c756724bcc 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/before-cells.jpg and b/docs-assets/screenshots/images/light/tables/actions/before-cells.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/before-columns.jpg b/docs-assets/screenshots/images/light/tables/actions/before-columns.jpg index 6cff09fc95..8d5439afbc 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/before-columns.jpg and b/docs-assets/screenshots/images/light/tables/actions/before-columns.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/bulk-not-grouped.jpg b/docs-assets/screenshots/images/light/tables/actions/bulk-not-grouped.jpg index 6c1424d28f..39d1bc46bf 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/bulk-not-grouped.jpg and b/docs-assets/screenshots/images/light/tables/actions/bulk-not-grouped.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/bulk.jpg b/docs-assets/screenshots/images/light/tables/actions/bulk.jpg index f5b38eef1b..683a6321d5 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/bulk.jpg and b/docs-assets/screenshots/images/light/tables/actions/bulk.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/group-button.jpg b/docs-assets/screenshots/images/light/tables/actions/group-button.jpg index 4e010c2081..79702bbe5c 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/group-button.jpg and b/docs-assets/screenshots/images/light/tables/actions/group-button.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/group-tooltip.jpg b/docs-assets/screenshots/images/light/tables/actions/group-tooltip.jpg index 48aec9dd49..2cd39d9d4a 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/group-tooltip.jpg and b/docs-assets/screenshots/images/light/tables/actions/group-tooltip.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/group.jpg b/docs-assets/screenshots/images/light/tables/actions/group.jpg index 98d27f8e19..451ec84290 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/group.jpg and b/docs-assets/screenshots/images/light/tables/actions/group.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/header.jpg b/docs-assets/screenshots/images/light/tables/actions/header.jpg index e67442a9b9..a97c5bbcdd 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/header.jpg and b/docs-assets/screenshots/images/light/tables/actions/header.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/simple.jpg b/docs-assets/screenshots/images/light/tables/actions/simple.jpg index 34d507ca00..ab65691e3d 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/simple.jpg and b/docs-assets/screenshots/images/light/tables/actions/simple.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/actions/toolbar.jpg b/docs-assets/screenshots/images/light/tables/actions/toolbar.jpg index 5374842cb1..8b982388ae 100644 Binary files a/docs-assets/screenshots/images/light/tables/actions/toolbar.jpg and b/docs-assets/screenshots/images/light/tables/actions/toolbar.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/column-manager-columns.jpg b/docs-assets/screenshots/images/light/tables/columns/column-manager-columns.jpg index 709f2100fa..6074859380 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/column-manager-columns.jpg and b/docs-assets/screenshots/images/light/tables/columns/column-manager-columns.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/column-manager-modal.jpg b/docs-assets/screenshots/images/light/tables/columns/column-manager-modal.jpg index 6bdd353ed0..a44167910e 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/column-manager-modal.jpg and b/docs-assets/screenshots/images/light/tables/columns/column-manager-modal.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/column-manager-reorderable.jpg b/docs-assets/screenshots/images/light/tables/columns/column-manager-reorderable.jpg index 51c287cad4..9331f4890a 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/column-manager-reorderable.jpg and b/docs-assets/screenshots/images/light/tables/columns/column-manager-reorderable.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/column-manager.jpg b/docs-assets/screenshots/images/light/tables/columns/column-manager.jpg index 7b92a0ec4e..bc1ec2ea2a 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/column-manager.jpg and b/docs-assets/screenshots/images/light/tables/columns/column-manager.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/grouping.jpg b/docs-assets/screenshots/images/light/tables/columns/grouping.jpg index 79ab307b1b..abc7374a6c 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/grouping.jpg and b/docs-assets/screenshots/images/light/tables/columns/grouping.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/individually-searchable.jpg b/docs-assets/screenshots/images/light/tables/columns/individually-searchable.jpg index a8a5d75e98..2a540846a7 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/individually-searchable.jpg and b/docs-assets/screenshots/images/light/tables/columns/individually-searchable.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/searchable.jpg b/docs-assets/screenshots/images/light/tables/columns/searchable.jpg index cbc95c68a0..c1050de0fb 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/searchable.jpg and b/docs-assets/screenshots/images/light/tables/columns/searchable.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/text/bulleted.jpg b/docs-assets/screenshots/images/light/tables/columns/text/bulleted.jpg index ad45b9d732..a6e71a151d 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/text/bulleted.jpg and b/docs-assets/screenshots/images/light/tables/columns/text/bulleted.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/text/copyable.jpg b/docs-assets/screenshots/images/light/tables/columns/text/copyable.jpg index b9c10b75c6..bc3b890673 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/text/copyable.jpg and b/docs-assets/screenshots/images/light/tables/columns/text/copyable.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/text/date-tooltip.jpg b/docs-assets/screenshots/images/light/tables/columns/text/date-tooltip.jpg index 30b53718ca..2dd8851279 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/text/date-tooltip.jpg and b/docs-assets/screenshots/images/light/tables/columns/text/date-tooltip.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/text/expandable-limited-list.jpg b/docs-assets/screenshots/images/light/tables/columns/text/expandable-limited-list.jpg index 5e4b1b1892..4f645a0269 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/text/expandable-limited-list.jpg and b/docs-assets/screenshots/images/light/tables/columns/text/expandable-limited-list.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/text/list.jpg b/docs-assets/screenshots/images/light/tables/columns/text/list.jpg index 0e7517a2f8..4fb16a4042 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/text/list.jpg and b/docs-assets/screenshots/images/light/tables/columns/text/list.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/width.jpg b/docs-assets/screenshots/images/light/tables/columns/width.jpg index 4afa9935a8..65323938a4 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/width.jpg and b/docs-assets/screenshots/images/light/tables/columns/width.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/columns/wrap-header.jpg b/docs-assets/screenshots/images/light/tables/columns/wrap-header.jpg index 702f0f51f7..31dc5f419e 100644 Binary files a/docs-assets/screenshots/images/light/tables/columns/wrap-header.jpg and b/docs-assets/screenshots/images/light/tables/columns/wrap-header.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/custom-row-classes.jpg b/docs-assets/screenshots/images/light/tables/custom-row-classes.jpg index 07195223a5..78205e2811 100644 Binary files a/docs-assets/screenshots/images/light/tables/custom-row-classes.jpg and b/docs-assets/screenshots/images/light/tables/custom-row-classes.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/example.jpg b/docs-assets/screenshots/images/light/tables/example.jpg index d704582edf..0f784680fe 100644 Binary files a/docs-assets/screenshots/images/light/tables/example.jpg and b/docs-assets/screenshots/images/light/tables/example.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/above-content-collapsible.jpg b/docs-assets/screenshots/images/light/tables/filters/above-content-collapsible.jpg index 93a577f555..6ea24036ef 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/above-content-collapsible.jpg and b/docs-assets/screenshots/images/light/tables/filters/above-content-collapsible.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/above-content.jpg b/docs-assets/screenshots/images/light/tables/filters/above-content.jpg index 8f4f2f79fd..763659c8f7 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/above-content.jpg and b/docs-assets/screenshots/images/light/tables/filters/above-content.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/after-content.jpg b/docs-assets/screenshots/images/light/tables/filters/after-content.jpg index 9a6a77e5ea..cf6817ce66 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/after-content.jpg and b/docs-assets/screenshots/images/light/tables/filters/after-content.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/before-content.jpg b/docs-assets/screenshots/images/light/tables/filters/before-content.jpg index 355d564db2..43d43c711e 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/before-content.jpg and b/docs-assets/screenshots/images/light/tables/filters/before-content.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/below-content.jpg b/docs-assets/screenshots/images/light/tables/filters/below-content.jpg index 37e9f448f1..02a3ce38f0 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/below-content.jpg and b/docs-assets/screenshots/images/light/tables/filters/below-content.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/custom-form-schema.jpg b/docs-assets/screenshots/images/light/tables/filters/custom-form-schema.jpg index dee4f0d25e..f05b250d92 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/custom-form-schema.jpg and b/docs-assets/screenshots/images/light/tables/filters/custom-form-schema.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/custom-form.jpg b/docs-assets/screenshots/images/light/tables/filters/custom-form.jpg index f39680417e..266f46bb05 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/custom-form.jpg and b/docs-assets/screenshots/images/light/tables/filters/custom-form.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/custom-remove-all-action.jpg b/docs-assets/screenshots/images/light/tables/filters/custom-remove-all-action.jpg index 4184578c91..c8ced08673 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/custom-remove-all-action.jpg and b/docs-assets/screenshots/images/light/tables/filters/custom-remove-all-action.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/custom-trigger-action.jpg b/docs-assets/screenshots/images/light/tables/filters/custom-trigger-action.jpg index 1488b02923..4aea352747 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/custom-trigger-action.jpg and b/docs-assets/screenshots/images/light/tables/filters/custom-trigger-action.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/grid-columns.jpg b/docs-assets/screenshots/images/light/tables/filters/grid-columns.jpg index f07b42dc2b..e1f89dddee 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/grid-columns.jpg and b/docs-assets/screenshots/images/light/tables/filters/grid-columns.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/indicators.jpg b/docs-assets/screenshots/images/light/tables/filters/indicators.jpg index 5db3985708..4c6ed5e444 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/indicators.jpg and b/docs-assets/screenshots/images/light/tables/filters/indicators.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/modal.jpg b/docs-assets/screenshots/images/light/tables/filters/modal.jpg index 904061ca21..a087551e48 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/modal.jpg and b/docs-assets/screenshots/images/light/tables/filters/modal.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/multi-select.jpg b/docs-assets/screenshots/images/light/tables/filters/multi-select.jpg index faf01271e8..c9fcf7e085 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/multi-select.jpg and b/docs-assets/screenshots/images/light/tables/filters/multi-select.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/query-builder.jpg b/docs-assets/screenshots/images/light/tables/filters/query-builder.jpg index 8da5f9f885..9cbeb4a503 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/query-builder.jpg and b/docs-assets/screenshots/images/light/tables/filters/query-builder.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/select.jpg b/docs-assets/screenshots/images/light/tables/filters/select.jpg index 3add47c319..acc56a785b 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/select.jpg and b/docs-assets/screenshots/images/light/tables/filters/select.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/simple.jpg b/docs-assets/screenshots/images/light/tables/filters/simple.jpg index bbdce4c551..089fdef423 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/simple.jpg and b/docs-assets/screenshots/images/light/tables/filters/simple.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/ternary.jpg b/docs-assets/screenshots/images/light/tables/filters/ternary.jpg index a97fdeb0fa..eeb3c7a122 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/ternary.jpg and b/docs-assets/screenshots/images/light/tables/filters/ternary.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/filters/toggle.jpg b/docs-assets/screenshots/images/light/tables/filters/toggle.jpg index f51bb5a4cf..9fb206ae71 100644 Binary files a/docs-assets/screenshots/images/light/tables/filters/toggle.jpg and b/docs-assets/screenshots/images/light/tables/filters/toggle.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/grouping-collapsible.jpg b/docs-assets/screenshots/images/light/tables/grouping-collapsible.jpg index 1fb445a38e..8a1b9c0c9e 100644 Binary files a/docs-assets/screenshots/images/light/tables/grouping-collapsible.jpg and b/docs-assets/screenshots/images/light/tables/grouping-collapsible.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/grouping-date.jpg b/docs-assets/screenshots/images/light/tables/grouping-date.jpg index 5a6eb36707..925a4cd376 100644 Binary files a/docs-assets/screenshots/images/light/tables/grouping-date.jpg and b/docs-assets/screenshots/images/light/tables/grouping-date.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/grouping-descriptions.jpg b/docs-assets/screenshots/images/light/tables/grouping-descriptions.jpg index bda9fec52f..3baa38a0c8 100644 Binary files a/docs-assets/screenshots/images/light/tables/grouping-descriptions.jpg and b/docs-assets/screenshots/images/light/tables/grouping-descriptions.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/grouping-groups-only.jpg b/docs-assets/screenshots/images/light/tables/grouping-groups-only.jpg index 03ad5694de..5df9ad7b80 100644 Binary files a/docs-assets/screenshots/images/light/tables/grouping-groups-only.jpg and b/docs-assets/screenshots/images/light/tables/grouping-groups-only.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/grouping-selectable.jpg b/docs-assets/screenshots/images/light/tables/grouping-selectable.jpg index eb59c2b9b5..9d36413d39 100644 Binary files a/docs-assets/screenshots/images/light/tables/grouping-selectable.jpg and b/docs-assets/screenshots/images/light/tables/grouping-selectable.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/grouping.jpg b/docs-assets/screenshots/images/light/tables/grouping.jpg index ec5de631e7..f2a331a3c4 100644 Binary files a/docs-assets/screenshots/images/light/tables/grouping.jpg and b/docs-assets/screenshots/images/light/tables/grouping.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/heading.jpg b/docs-assets/screenshots/images/light/tables/heading.jpg index df22507655..3033b5166e 100644 Binary files a/docs-assets/screenshots/images/light/tables/heading.jpg and b/docs-assets/screenshots/images/light/tables/heading.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/collapsible.jpg b/docs-assets/screenshots/images/light/tables/layout/collapsible.jpg index 6dc3a73cf3..0e49d37a4a 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/collapsible.jpg and b/docs-assets/screenshots/images/light/tables/layout/collapsible.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/collapsible/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/collapsible/mobile.jpg index b39111de1d..91130f2663 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/collapsible/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/collapsible/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/column-grid.jpg b/docs-assets/screenshots/images/light/tables/layout/column-grid.jpg index b2ec869bfb..0664ae6044 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/column-grid.jpg and b/docs-assets/screenshots/images/light/tables/layout/column-grid.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/demo.jpg b/docs-assets/screenshots/images/light/tables/layout/demo.jpg index cb7a9af2e4..d334710e86 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/demo.jpg and b/docs-assets/screenshots/images/light/tables/layout/demo.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/demo/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/demo/mobile.jpg index c884ff584f..36946f3e9e 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/demo/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/demo/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/grid.jpg b/docs-assets/screenshots/images/light/tables/layout/grid.jpg index c3342d0e78..243600004a 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/grid.jpg and b/docs-assets/screenshots/images/light/tables/layout/grid.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/grid/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/grid/mobile.jpg index 4d92301304..19a05abc4f 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/grid/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/grid/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/grow-disabled.jpg b/docs-assets/screenshots/images/light/tables/layout/grow-disabled.jpg index 90417026b4..4d7a084fd6 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/grow-disabled.jpg and b/docs-assets/screenshots/images/light/tables/layout/grow-disabled.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/grow-disabled/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/grow-disabled/mobile.jpg index 544e09eaaa..e720994f06 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/grow-disabled/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/grow-disabled/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/split-desktop.jpg b/docs-assets/screenshots/images/light/tables/layout/split-desktop.jpg index 4f20682b02..cb0a8f873e 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/split-desktop.jpg and b/docs-assets/screenshots/images/light/tables/layout/split-desktop.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/split-desktop/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/split-desktop/mobile.jpg index 544e09eaaa..e720994f06 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/split-desktop/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/split-desktop/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/split.jpg b/docs-assets/screenshots/images/light/tables/layout/split.jpg index 4f20682b02..cb0a8f873e 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/split.jpg and b/docs-assets/screenshots/images/light/tables/layout/split.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/split/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/split/mobile.jpg index cc45b16a70..a71fb2d403 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/split/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/split/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/stack-aligned-right.jpg b/docs-assets/screenshots/images/light/tables/layout/stack-aligned-right.jpg index 2e75e305bd..80dc577bf1 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/stack-aligned-right.jpg and b/docs-assets/screenshots/images/light/tables/layout/stack-aligned-right.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/stack-hidden-on-mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/stack-hidden-on-mobile.jpg index d68d13d698..6826903b30 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/stack-hidden-on-mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/stack-hidden-on-mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/stack-hidden-on-mobile/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/stack-hidden-on-mobile/mobile.jpg index ab243ab1f2..9b523382da 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/stack-hidden-on-mobile/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/stack-hidden-on-mobile/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/stack-spaced.jpg b/docs-assets/screenshots/images/light/tables/layout/stack-spaced.jpg index 13565a1041..ca74341ab3 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/stack-spaced.jpg and b/docs-assets/screenshots/images/light/tables/layout/stack-spaced.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/stack.jpg b/docs-assets/screenshots/images/light/tables/layout/stack.jpg index d68d13d698..6826903b30 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/stack.jpg and b/docs-assets/screenshots/images/light/tables/layout/stack.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/stack/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/stack/mobile.jpg index 5138d75e8f..0288807fbe 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/stack/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/stack/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/stacked-on-mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/stacked-on-mobile.jpg index 8e6e0e0af3..9673f38076 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/stacked-on-mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/stacked-on-mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/layout/stacked-on-mobile/mobile.jpg b/docs-assets/screenshots/images/light/tables/layout/stacked-on-mobile/mobile.jpg index e30c4c5608..99555381f0 100644 Binary files a/docs-assets/screenshots/images/light/tables/layout/stacked-on-mobile/mobile.jpg and b/docs-assets/screenshots/images/light/tables/layout/stacked-on-mobile/mobile.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/overview/actions-modal.jpg b/docs-assets/screenshots/images/light/tables/overview/actions-modal.jpg index f3b8512baa..5f988b5d27 100644 Binary files a/docs-assets/screenshots/images/light/tables/overview/actions-modal.jpg and b/docs-assets/screenshots/images/light/tables/overview/actions-modal.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/overview/actions.jpg b/docs-assets/screenshots/images/light/tables/overview/actions.jpg index d7d5ded2df..ccb297218b 100644 Binary files a/docs-assets/screenshots/images/light/tables/overview/actions.jpg and b/docs-assets/screenshots/images/light/tables/overview/actions.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/overview/filters.jpg b/docs-assets/screenshots/images/light/tables/overview/filters.jpg index b539383da7..7238efc434 100644 Binary files a/docs-assets/screenshots/images/light/tables/overview/filters.jpg and b/docs-assets/screenshots/images/light/tables/overview/filters.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/overview/relationship-columns.jpg b/docs-assets/screenshots/images/light/tables/overview/relationship-columns.jpg index b8f5947afd..471e04ffaf 100644 Binary files a/docs-assets/screenshots/images/light/tables/overview/relationship-columns.jpg and b/docs-assets/screenshots/images/light/tables/overview/relationship-columns.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/overview/searchable-columns.jpg b/docs-assets/screenshots/images/light/tables/overview/searchable-columns.jpg index 1ae57dcb15..c36b293337 100644 Binary files a/docs-assets/screenshots/images/light/tables/overview/searchable-columns.jpg and b/docs-assets/screenshots/images/light/tables/overview/searchable-columns.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/overview/sortable-columns.jpg b/docs-assets/screenshots/images/light/tables/overview/sortable-columns.jpg index 863f9e2f95..c83781d8ef 100644 Binary files a/docs-assets/screenshots/images/light/tables/overview/sortable-columns.jpg and b/docs-assets/screenshots/images/light/tables/overview/sortable-columns.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/pagination/cursor.jpg b/docs-assets/screenshots/images/light/tables/pagination/cursor.jpg index ded908c368..9a8b1abc23 100644 Binary files a/docs-assets/screenshots/images/light/tables/pagination/cursor.jpg and b/docs-assets/screenshots/images/light/tables/pagination/cursor.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/pagination/default.jpg b/docs-assets/screenshots/images/light/tables/pagination/default.jpg index a805272c90..79022f8054 100644 Binary files a/docs-assets/screenshots/images/light/tables/pagination/default.jpg and b/docs-assets/screenshots/images/light/tables/pagination/default.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/pagination/extreme.jpg b/docs-assets/screenshots/images/light/tables/pagination/extreme.jpg index 18526da254..5958d05561 100644 Binary files a/docs-assets/screenshots/images/light/tables/pagination/extreme.jpg and b/docs-assets/screenshots/images/light/tables/pagination/extreme.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/pagination/simple.jpg b/docs-assets/screenshots/images/light/tables/pagination/simple.jpg index ded908c368..9a8b1abc23 100644 Binary files a/docs-assets/screenshots/images/light/tables/pagination/simple.jpg and b/docs-assets/screenshots/images/light/tables/pagination/simple.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/reordering.jpg b/docs-assets/screenshots/images/light/tables/reordering.jpg index 721a6a65f0..4b3525dbef 100644 Binary files a/docs-assets/screenshots/images/light/tables/reordering.jpg and b/docs-assets/screenshots/images/light/tables/reordering.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/reordering/custom-trigger-action.jpg b/docs-assets/screenshots/images/light/tables/reordering/custom-trigger-action.jpg index b6065cf8b6..754b807042 100644 Binary files a/docs-assets/screenshots/images/light/tables/reordering/custom-trigger-action.jpg and b/docs-assets/screenshots/images/light/tables/reordering/custom-trigger-action.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/striped.jpg b/docs-assets/screenshots/images/light/tables/striped.jpg index 4f97288c3e..a3137bea5f 100644 Binary files a/docs-assets/screenshots/images/light/tables/striped.jpg and b/docs-assets/screenshots/images/light/tables/striped.jpg differ diff --git a/docs-assets/screenshots/images/light/tables/summaries.jpg b/docs-assets/screenshots/images/light/tables/summaries.jpg index ff820aac87..79ab92faa1 100644 Binary files a/docs-assets/screenshots/images/light/tables/summaries.jpg and b/docs-assets/screenshots/images/light/tables/summaries.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/bar.jpg b/docs-assets/screenshots/images/light/widgets/chart/bar.jpg index 125bfe23b9..47fcc9577e 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/bar.jpg and b/docs-assets/screenshots/images/light/widgets/chart/bar.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/bubble.jpg b/docs-assets/screenshots/images/light/widgets/chart/bubble.jpg index c40849b73a..9e08729f94 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/bubble.jpg and b/docs-assets/screenshots/images/light/widgets/chart/bubble.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/collapsible.jpg b/docs-assets/screenshots/images/light/widgets/chart/collapsible.jpg index bbf4ac1213..57d04414b5 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/collapsible.jpg and b/docs-assets/screenshots/images/light/widgets/chart/collapsible.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/custom-filters.jpg b/docs-assets/screenshots/images/light/widgets/chart/custom-filters.jpg index 564e6a673f..3706c40393 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/custom-filters.jpg and b/docs-assets/screenshots/images/light/widgets/chart/custom-filters.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/description.jpg b/docs-assets/screenshots/images/light/widgets/chart/description.jpg index f17e241802..498f813ba3 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/description.jpg and b/docs-assets/screenshots/images/light/widgets/chart/description.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/doughnut.jpg b/docs-assets/screenshots/images/light/widgets/chart/doughnut.jpg index 0ba869c021..f30a094edf 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/doughnut.jpg and b/docs-assets/screenshots/images/light/widgets/chart/doughnut.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/filter.jpg b/docs-assets/screenshots/images/light/widgets/chart/filter.jpg index 906832b126..528774750e 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/filter.jpg and b/docs-assets/screenshots/images/light/widgets/chart/filter.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/line.jpg b/docs-assets/screenshots/images/light/widgets/chart/line.jpg index 1af65e798f..21ce89af90 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/line.jpg and b/docs-assets/screenshots/images/light/widgets/chart/line.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/max-height.jpg b/docs-assets/screenshots/images/light/widgets/chart/max-height.jpg index 26e4140270..bed1ce6288 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/max-height.jpg and b/docs-assets/screenshots/images/light/widgets/chart/max-height.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/pie.jpg b/docs-assets/screenshots/images/light/widgets/chart/pie.jpg index 9179eff177..29e624716a 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/pie.jpg and b/docs-assets/screenshots/images/light/widgets/chart/pie.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/polar-area.jpg b/docs-assets/screenshots/images/light/widgets/chart/polar-area.jpg index c13f001f3c..8da48c1b55 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/polar-area.jpg and b/docs-assets/screenshots/images/light/widgets/chart/polar-area.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/radar.jpg b/docs-assets/screenshots/images/light/widgets/chart/radar.jpg index d859b6c25a..30b79e805c 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/radar.jpg and b/docs-assets/screenshots/images/light/widgets/chart/radar.jpg differ diff --git a/docs-assets/screenshots/images/light/widgets/chart/scatter.jpg b/docs-assets/screenshots/images/light/widgets/chart/scatter.jpg index e3c34e0cc5..903b40331b 100644 Binary files a/docs-assets/screenshots/images/light/widgets/chart/scatter.jpg and b/docs-assets/screenshots/images/light/widgets/chart/scatter.jpg differ diff --git a/docs-assets/screenshots/package-lock.json b/docs-assets/screenshots/package-lock.json index 8141dde226..b464744e20 100644 --- a/docs-assets/screenshots/package-lock.json +++ b/docs-assets/screenshots/package-lock.json @@ -5,6 +5,7 @@ "packages": { "": { "dependencies": { + "pixelmatch": "^7.2.0", "puppeteer": "^25.4.0", "sharp": "^0.35.0" } @@ -130,9 +131,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -149,9 +147,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -168,9 +163,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -187,9 +179,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -206,9 +195,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -225,9 +211,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -244,9 +227,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -263,9 +243,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "LGPL-3.0-or-later", "optional": true, "os": [ @@ -282,9 +259,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -307,9 +281,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -332,9 +303,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -357,9 +325,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -382,9 +347,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -407,9 +369,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -432,9 +391,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -457,9 +413,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0", "optional": true, "os": [ @@ -744,6 +697,27 @@ "node": ">=18.0.0" } }, + "node_modules/pixelmatch": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-7.2.0.tgz", + "integrity": "sha512-xhcb4yHu9sM/G7foGzoLtXYcC0zHEaOXXjRKhGup0fw78Nf2Tkiapv4EQyMzrbcmQPsllAI7DbFY2UT7PlI9Pg==", + "license": "ISC", + "dependencies": { + "pngjs": "^7.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "license": "MIT", + "engines": { + "node": ">=14.19.0" + } + }, "node_modules/puppeteer": { "version": "25.4.0", "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.4.0.tgz", diff --git a/docs-assets/screenshots/package.json b/docs-assets/screenshots/package.json index e67889e447..5e9f5ccee7 100644 --- a/docs-assets/screenshots/package.json +++ b/docs-assets/screenshots/package.json @@ -1,6 +1,7 @@ { "type": "module", "dependencies": { + "pixelmatch": "^7.2.0", "puppeteer": "^25.4.0", "sharp": "^0.35.0" } diff --git a/docs-assets/screenshots/schema.js b/docs-assets/screenshots/schema.js index 2c5497d27c..123d96654e 100644 --- a/docs-assets/screenshots/schema.js +++ b/docs-assets/screenshots/schema.js @@ -1,3 +1,16 @@ +// Blur whichever element is focused, repeatedly, for a while: a modal can +// autofocus its first field some time after opening, and whether the focus +// ring renders depends on Chromium's timing-sensitive `:focus-visible` +// heuristic, which varies between runs. +const blurActiveElement = async (page, duration = 2000) => { + const endTime = Date.now() + duration + + while (Date.now() < endTime) { + await page.evaluate(() => document.activeElement?.blur()) + await new Promise((resolve) => setTimeout(resolve, 150)) + } +} + export default { 'actions/create-action/modal': { url: 'actions-crud', @@ -51,6 +64,8 @@ export default { const buttons = await page.$$('[wire\\:click*="mountAction(\'view\'"]') if (buttons.length > 0) await buttons[0].click() await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, @@ -66,6 +81,8 @@ export default { const buttons = await page.$$('[wire\\:click*="mountAction(\'delete\'"]') if (buttons.length > 0) await buttons[0].click() await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, @@ -97,6 +114,8 @@ export default { const buttons = await page.$$('[wire\\:click*="mountAction(\'forceDelete\'"]') if (buttons.length > 0) await buttons[0].click() await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, @@ -112,6 +131,8 @@ export default { const buttons = await page.$$('[wire\\:click*="mountAction(\'restore\'"]') if (buttons.length > 0) await buttons[0].click() await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, @@ -258,6 +279,8 @@ export default { await page.click('#confirmationModalAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 300)) }, selector: '.fi-modal-window-ctn', @@ -273,6 +296,8 @@ export default { await page.click('#confirmationModalCustomTextAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 300)) }, selector: '.fi-modal-window-ctn', @@ -288,6 +313,8 @@ export default { await page.click('#modalIconAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 300)) }, selector: '.fi-modal-window-ctn', @@ -303,7 +330,7 @@ export default { await page.click('#modalFormAction button') await page.waitForSelector('#modal h2') - await new Promise((resolve) => setTimeout(resolve, 300)) + await blurActiveElement(page) }, selector: '.fi-modal-window-ctn', }, @@ -318,6 +345,8 @@ export default { await page.click('#modalSchemaAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 300)) }, selector: '.fi-modal-window-ctn', @@ -333,6 +362,8 @@ export default { await page.click('#wizardAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 300)) }, selector: '.fi-modal-window-ctn', @@ -348,6 +379,8 @@ export default { await page.click('#slideOverAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 500)) }, selector: '.fi-modal-window-ctn', @@ -363,6 +396,8 @@ export default { await page.click('#slideOverStartAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 500)) }, selector: '.fi-modal-window-ctn', @@ -378,6 +413,8 @@ export default { await page.click('#modalNoCloseButtonAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 300)) }, selector: '.fi-modal-window-ctn', @@ -393,6 +430,8 @@ export default { await page.click('#disabledFormAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 500)) }, selector: '.fi-modal-window-ctn', @@ -408,6 +447,8 @@ export default { await page.click('#modalIconColorAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 300)) }, selector: '.fi-modal-window-ctn', @@ -443,6 +484,8 @@ export default { await page.click('#modalAlignmentAction button') await page.waitForSelector('#modal h2') + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 300)) }, selector: '.fi-modal-window-ctn', @@ -621,8 +664,10 @@ export default { }, before: async (page) => { await page.hover('#authorizationTooltipAction button') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'forms/fields/simple': { @@ -1665,6 +1710,8 @@ export default { // Click the text color toolbar button to open the action modal. await page.click('#richEditorTextColors button[aria-label="Text color"]') await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) // Click the select input to open the dropdown showing color options. @@ -1725,6 +1772,10 @@ export default { // Click the custom blocks toolbar button to open the side panel. await page.click('#richEditorCustomBlocks button[aria-label="Blocks"]') + + // Move the mouse away so the button's "Blocks" tooltip cannot + // appear in the screenshot depending on hover timing. + await page.mouse.move(0, 0) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, @@ -1745,6 +1796,10 @@ export default { // Click the custom blocks toolbar button to open the side panel. await page.click('#richEditorGroupedCustomBlocks button[aria-label="Blocks"]') + + // Move the mouse away so the button's "Blocks" tooltip cannot + // appear in the screenshot depending on hover timing. + await page.mouse.move(0, 0) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, @@ -1761,15 +1816,30 @@ export default { await page.evaluate(() => { document.querySelector('#richEditorFloatingToolbar').scrollIntoView() }) - await new Promise((resolve) => setTimeout(resolve, 2000)) - // Click inside the editor to place cursor in the paragraph. - const editor = await page.$('#richEditorFloatingToolbar .tiptap.ProseMirror') - await editor.click() + // Wait for TipTap to initialize; the `.tiptap` element only exists + // once it has. A fixed sleep is not enough on a cold server. + const paragraph = await page.waitForSelector('#richEditorFloatingToolbar .tiptap.ProseMirror p') + await new Promise((resolve) => setTimeout(resolve, 500)) + + // Click to focus the editor, then select the paragraph text with a + // native DOM range, which ProseMirror syncs via `selectionchange`. + // A triple-click is unreliable here: it can select nothing + // depending on where it lands within the editor. + await paragraph.click() await new Promise((resolve) => setTimeout(resolve, 300)) - // Triple-click to select the paragraph text, triggering the floating bubble menu. - await editor.click({ clickCount: 3 }) + await page.evaluate(() => { + const paragraphElement = document.querySelector('#richEditorFloatingToolbar .tiptap.ProseMirror p') + const range = document.createRange() + range.selectNodeContents(paragraphElement) + const selection = window.getSelection() + selection.removeAllRanges() + selection.addRange(range) + }) + await paragraph.dispose() + + await page.waitForSelector('#richEditorFloatingToolbar .fi-fo-rich-editor-floating-toolbar', { visible: true }) await new Promise((resolve) => setTimeout(resolve, 800)) // Remove the focus outline ring from the editor wrapper and add bottom padding @@ -2251,8 +2321,10 @@ export default { // Hover over the "Published" button (label tag) to show its tooltip const labels = await page.$$('#toggleButtonsTooltips .fi-fo-toggle-buttons-btn-ctn label') if (labels.length > 2) await labels[2].hover() - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'forms/fields/toggle-buttons/disabled-option': { @@ -3077,8 +3149,10 @@ export default { }, before: async (page) => { await page.hover('#tooltips [x-tooltip]') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'infolists/entries/alignment': { @@ -3369,9 +3443,15 @@ export default { deviceScaleFactor: 3, }, before: async (page) => { - await page.click('#textCopyable .fi-in-text-item') + // The click handler is on the `.fi-copyable` span, which only + // spans the text itself, so clicking the center of the whole item + // would miss it. + await page.click('#textCopyable .fi-copyable') - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the copy message tooltip to be shown and let its + // position fully settle, so it is not captured mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) } }, 'infolists/entries/text/numeric': { @@ -3420,8 +3500,10 @@ export default { }, before: async (page) => { await page.hover('#textDateTooltip [x-tooltip]') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'infolists/entries/text/markdown': { @@ -3597,7 +3679,10 @@ export default { before: async (page) => { await page.click('#colorCopyable .fi-in-color-item') - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the copy message tooltip to be shown and let its + // position fully settle, so it is not captured mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'infolists/entries/code/simple': { @@ -3752,6 +3837,14 @@ export default { height: 640, deviceScaleFactor: 3, }, + before: async (page) => { + // Wait for the slide-over to be fully open, so it is not captured + // mid-position. + await page.waitForSelector('.fi-modal-window', { visible: true }) + + await blurActiveElement(page) + await new Promise((resolve) => setTimeout(resolve, 1000)) + }, }, 'notifications/positioning': { url: 'notifications?method=positioning', @@ -3958,8 +4051,10 @@ export default { }, before: async (page) => { await page.hover('.fi-badge') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'panels/navigation/group': { @@ -4127,8 +4222,10 @@ export default { }, before: async (page) => { await page.hover('#textTooltip .fi-sc-text') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'primes/icon/simple': { @@ -4168,8 +4265,10 @@ export default { }, before: async (page) => { await page.hover('#iconTooltip .fi-sc-icon') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'primes/image/simple': { @@ -4209,8 +4308,10 @@ export default { }, before: async (page) => { await page.hover('#imageTooltip .fi-sc-image') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'primes/unordered-list/simple': { @@ -4418,7 +4519,10 @@ export default { before: async (page) => { await page.hover('[wire\\:key$="4.column.email_verified_at"] .fi-icon') - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'tables/columns/header-tooltips': { @@ -4431,8 +4535,10 @@ export default { }, before: async (page) => { await page.hover('.fi-ta-header-cell-tooltip') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'tables/columns/alignment': { @@ -4661,9 +4767,15 @@ export default { deviceScaleFactor: 3, }, before: async (page) => { - await page.click('[wire\\:key$="4.column.email"] .fi-ta-text-item') + // The click handler is on the `.fi-copyable` span, which only + // spans the text itself, so clicking the center of the whole item + // would miss it. + await page.click('[wire\\:key$="4.column.email"] .fi-copyable') - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the copy message tooltip to be shown and let its + // position fully settle, so it is not captured mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'tables/columns/text/numeric': { @@ -4712,8 +4824,10 @@ export default { }, before: async (page) => { await page.hover('.fi-ta-text [x-tooltip]') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'tables/columns/text/limit': { @@ -4916,7 +5030,10 @@ export default { before: async (page) => { await page.click('[wire\\:key$="4.column.color"] .fi-ta-color-item') - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the `Color code copied` tooltip to be shown and let its + // position fully settle, so it is not captured mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'tables/columns/color/wrap': { @@ -5358,8 +5475,10 @@ export default { }, before: async (page) => { await page.hover('.fi-dropdown-trigger') - - await new Promise((resolve) => setTimeout(resolve, 500)) + // Wait for the tooltip to be shown and let its position fully + // settle, so it is not captured missing or mid-positioning. + await page.waitForSelector('[data-tippy-root]', { visible: true }) + await new Promise((resolve) => setTimeout(resolve, 800)) }, }, 'tables/layout/demo': { @@ -5883,6 +6002,9 @@ export default { }, }, 'widgets/chart/radar': { + // The canvas-drawn point labels rasterize with sub-pixel differences + // between runs, slightly above the default threshold. + visualDifferenceRatioThreshold: 0.002, url: 'widgets', selector: '#chartRadar', viewport: { @@ -6422,6 +6544,8 @@ export default { before: async (page) => { await page.click('[wire\\:click*="mountAction(\'import\'"]') await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, @@ -6436,6 +6560,8 @@ export default { before: async (page) => { await page.click('[wire\\:click*="mountAction(\'export\'"]') await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) }, crop: (image) => { @@ -6520,6 +6646,8 @@ export default { } } await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, @@ -7227,8 +7355,73 @@ export default { before: async (page) => { const el = await page.$('#chartCustomFilters .fi-wi-chart-filter .fi-dropdown-trigger button') if (el) { - await el.scrollIntoView() - await el.click() + // Scroll the widget to a fixed position in the viewport. With + // a scroll-into-view-if-needed, the trigger can end up near + // the bottom edge of the viewport, and the dropdown panel + // flips above/below the trigger between runs. + await page.evaluate(() => { + document.querySelector('#chartCustomFilters').scrollIntoView({ block: 'center', behavior: 'instant' }) + }) + + // Wait for the chart canvas to render and the page's layout to + // stop changing before opening the dropdown. The widgets page + // loads its charts progressively, and a dropdown opened while + // the layout is still shifting is positioned differently + // between runs. + await page.waitForSelector('#chartCustomFilters canvas') + + let previousPageHeight = 0 + + for (let attempt = 0; attempt < 20; attempt++) { + const pageHeight = await page.evaluate(() => document.body.scrollHeight) + + if (pageHeight === previousPageHeight) { + break + } + + previousPageHeight = pageHeight + await new Promise((resolve) => setTimeout(resolve, 500)) + } + + await new Promise((resolve) => setTimeout(resolve, 500)) + + // A click can be swallowed while the page's many chart widgets + // are still initializing, and if late-loading widgets have + // shifted the trigger near the bottom of the viewport, the + // dropdown panel flips above the trigger instead of below it. + // Position the trigger deterministically immediately before + // each click, and retry until the panel is open below it. + for (let attempt = 0; attempt < 5; attempt++) { + await page.evaluate(() => { + const trigger = document.querySelector('#chartCustomFilters .fi-wi-chart-filter .fi-dropdown-trigger') + window.scrollTo(0, trigger.getBoundingClientRect().top + window.scrollY - 100) + }) + + await el.click() + + try { + await page.waitForSelector('#chartCustomFilters .fi-dropdown-panel', { visible: true, timeout: 2000 }) + } catch { + continue + } + + const isPanelBelowTrigger = await page.evaluate(() => { + const trigger = document.querySelector('#chartCustomFilters .fi-wi-chart-filter .fi-dropdown-trigger') + const panel = document.querySelector('#chartCustomFilters .fi-dropdown-panel') + + return panel.getBoundingClientRect().top > trigger.getBoundingClientRect().top + }) + + if (isPanelBelowTrigger) { + break + } + + // Close the mispositioned panel and try again. + await el.click() + await new Promise((resolve) => setTimeout(resolve, 300)) + } + + await page.mouse.move(0, 0) await new Promise((resolve) => setTimeout(resolve, 500)) } }, @@ -7260,9 +7453,31 @@ export default { deviceScaleFactor: 3, }, before: async (page) => { + // Scroll through the page to force lazy widgets to load, and wait + // for the layout to stop changing, so the dashboard behind the + // modal is always captured fully loaded. + let previousPageHeight = 0 + + for (let attempt = 0; attempt < 20; attempt++) { + await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight)) + + const pageHeight = await page.evaluate(() => document.body.scrollHeight) + + if (pageHeight === previousPageHeight) { + break + } + + previousPageHeight = pageHeight + await new Promise((resolve) => setTimeout(resolve, 500)) + } + + await page.evaluate(() => window.scrollTo(0, 0)) + await new Promise((resolve) => setTimeout(resolve, 500)) + await page.click('[wire\\:click*="mountAction(\'filter\'"]') await page.waitForSelector('.fi-modal-window-ctn') - await new Promise((resolve) => setTimeout(resolve, 500)) + + await blurActiveElement(page) }, }, 'panels/dashboard-column-spans': { @@ -7307,6 +7522,8 @@ export default { } } await page.waitForSelector('.fi-modal-window-ctn') + + await blurActiveElement(page) await new Promise((resolve) => setTimeout(resolve, 500)) }, }, diff --git a/docs-assets/screenshots/script.js b/docs-assets/screenshots/script.js index d5a4cfa0ae..a6337839e9 100644 --- a/docs-assets/screenshots/script.js +++ b/docs-assets/screenshots/script.js @@ -2,25 +2,80 @@ // node script.js // node script.js "absolute/schema/key" // node script.js "wildcard/schema/key/*" +// node script.js --force # Overwrite files even when the new screenshot is visually identical +// node script.js --parallel # Process screenshots in parallel, one server + database copy per worker +// node script.js --parallel=8 # Use a specific number of parallel workers // node script.js --clean # Delete screenshot files with no schema.js entry // node script.js --clean --dry # Preview what --clean would delete // +// Serial mode expects `php artisan serve` to be running on http://127.0.0.1:8000. +// Parallel mode starts its own servers on ports 8001+, each with its own copy of +// `database/database.sqlite`, because many demos mutate the database on mount and +// would corrupt each other's screenshots if they shared one database. +// // For Apple Silicon, you might need to export the following variables if Chromium cannot be found: // export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true // export PUPPETEER_EXECUTABLE_PATH=`which chromium` import fs from 'fs' +import os from 'os' import path from 'path' import puppeteer from 'puppeteer' import schema from './schema.js' import emitter from 'events' -import * as process from 'process' +import process from 'process' import sharp from 'sharp' +import pixelmatch from 'pixelmatch' +import { execFileSync, spawn } from 'child_process' emitter.setMaxListeners(1024) const themes = ['light', 'dark'] +// When a screenshot is regenerated, tiny pixel-level differences (anti-aliasing, +// font rasterization, JPEG encoding) appear between runs and Chrome versions even +// though nothing visible changed. To avoid committing that noise, the existing +// file is kept unless at least this ratio of pixels is visually different. +// Pass --force to overwrite regardless. +const visualDifferenceRatioThreshold = 0.001 + +const isForced = process.argv.includes('--force') + +const parallelArgument = process.argv.find( + (argument) => argument === '--parallel' || argument.startsWith('--parallel='), +) + +const workerCount = parallelArgument + ? parallelArgument.includes('=') + ? Math.max(1, parseInt(parallelArgument.split('=')[1], 10) || 1) + : Math.max(1, Math.min(6, os.cpus().length - 2)) + : 1 + +const visualDifferenceRatio = async (previousImage, newImage) => { + const [previous, current] = await Promise.all([ + sharp(previousImage).ensureAlpha().raw().toBuffer({ resolveWithObject: true }), + sharp(newImage).ensureAlpha().raw().toBuffer({ resolveWithObject: true }), + ]) + + if ( + previous.info.width !== current.info.width || + previous.info.height !== current.info.height + ) { + return 1 + } + + const mismatchedPixels = pixelmatch( + previous.data, + current.data, + null, + previous.info.width, + previous.info.height, + { threshold: 0.1 }, + ) + + return mismatchedPixels / (previous.info.width * previous.info.height) +} + if (process.argv.includes('--clean')) { const dryRun = process.argv.includes('--dry') const schemaKeys = new Set(Object.keys(schema)) @@ -77,8 +132,15 @@ if (process.argv.includes('--clean')) { process.exit(0) } -const processScreenshot = async (file, options, theme) => { - configure(options.configure) +// Launching a Chromium process takes ~800ms, so one browser is shared for the +// whole run and each job gets its own browser context instead, which is just as +// isolated (fresh cookies, storage, and cache) but takes ~100ms. +let sharedBrowser = null + +const getBrowser = async () => (sharedBrowser ??= await puppeteer.launch()) + +const captureEntry = async (page, browser, file, options, theme) => { + console.log(`⏳ Processing ${theme}/${file}`) const directory = file.substring(0, file.lastIndexOf('/')) @@ -86,40 +148,8 @@ const processScreenshot = async (file, options, theme) => { fs.mkdirSync(`images/${theme}/${directory}`, { recursive: true }) } - const browser = await puppeteer.launch() - const page = await browser.newPage() - await page.setViewport( - options.viewport ?? { - width: 1920, - height: 1080, - deviceScaleFactor: 3, - }, - ) - - // Set color scheme preference before navigating so server-rendered - // pages (like auth pages) pick up the correct theme on first load. - await page.emulateMediaFeatures([ - { - name: 'prefers-color-scheme', - value: theme === 'dark' ? 'dark' : 'light', - }, - ]) - - await page.goto(`http://127.0.0.1:8000/${options.url}`, { - waitUntil: 'networkidle2', - }) - - if (theme === 'dark') { - if (options.needsReloadForDarkMode) { - await page.goto(`http://127.0.0.1:8000/${options.url}`, { - waitUntil: 'networkidle2', - }) - } - - await new Promise((resolve) => setTimeout(resolve, 500)) - } else { - await new Promise((resolve) => setTimeout(resolve, 500)) - } + const filePath = `images/${theme}/${file}.jpg` + const previousImage = fs.existsSync(filePath) ? fs.readFileSync(filePath) : null // Scroll element into view so that lazy-loaded / JS-initialised content // renders correctly. Skip the automatic scroll when a `before` callback @@ -127,6 +157,13 @@ const processScreenshot = async (file, options, theme) => { // scroll beforehand can break them (e.g. modals that click buttons, // dropdowns that rely on page position). if (! options.before) { + // Always scroll from the top of the page, so that an element lands at + // the same sub-pixel offset regardless of which entry on a batched + // page was captured before it. A different offset changes how text is + // rasterized, which would count as a visual change against the + // existing file. + await page.evaluate(() => window.scrollTo(0, 0)) + const preElement = await page.waitForSelector(options.selector) await preElement.scrollIntoView() await preElement.dispose() @@ -142,41 +179,209 @@ const processScreenshot = async (file, options, theme) => { if (options.selectorPadding) { const boundingBox = await element.boundingBox() const raw = options.selectorPadding - const padding = typeof raw === 'number' - ? { top: raw, right: raw, bottom: raw, left: raw } - : raw + const padding = + typeof raw === 'number' + ? { top: raw, right: raw, bottom: raw, left: raw } + : raw const rawX = boundingBox.x - (padding.left ?? 0) const rawY = boundingBox.y - (padding.top ?? 0) const clippedX = Math.max(0, rawX) const clippedY = Math.max(0, rawY) await page.screenshot({ - path: `images/${theme}/${file}.jpg`, + path: filePath, clip: { x: clippedX, y: clippedY, - width: boundingBox.width + (padding.left ?? 0) + (padding.right ?? 0) - (clippedX - rawX), - height: boundingBox.height + (padding.top ?? 0) + (padding.bottom ?? 0) - (clippedY - rawY), + width: + boundingBox.width + + (padding.left ?? 0) + + (padding.right ?? 0) - + (clippedX - rawX), + height: + boundingBox.height + + (padding.top ?? 0) + + (padding.bottom ?? 0) - + (clippedY - rawY), }, }) } else if (options.selector === 'body') { - await page.screenshot({ path: `images/${theme}/${file}.jpg` }) + await page.screenshot({ path: filePath }) } else { - await element.screenshot({ path: `images/${theme}/${file}.jpg` }) + await element.screenshot({ path: filePath }) } await element.dispose() - await browser.close() - - configure() if (options.crop) { - fs.createWriteStream(`images/${theme}/${file}.jpg`).write( - await options.crop(sharp(fs.readFileSync(`images/${theme}/${file}.jpg`))).toBuffer() + fs.writeFileSync( + filePath, + await options.crop(sharp(fs.readFileSync(filePath))).toBuffer(), ) } + + if (previousImage && (! isForced)) { + const differenceRatio = await visualDifferenceRatio(previousImage, fs.readFileSync(filePath)) + + if (differenceRatio <= (options.visualDifferenceRatioThreshold ?? visualDifferenceRatioThreshold)) { + fs.writeFileSync(filePath, previousImage) + console.log(`💤 ${theme}/${file} is visually unchanged (${(differenceRatio * 100).toFixed(4)}% of pixels), kept the existing file`) + + return + } + + console.log(`✏️ ${theme}/${file} changed (${(differenceRatio * 100).toFixed(4)}% of pixels)`) + } } -const failures = [] +// A job is one page load capturing one or more schema entries. Entries without +// page interactions (`before`, `configure`) that share the same URL, viewport, +// and theme are batched into a single job, because loading and settling a page +// costs far more than capturing an extra element from it. +const processJob = async (job, baseUrl = 'http://127.0.0.1:8000') => { + const { theme, entries } = job + const options = entries[0].options + + if (options.configure) { + configure(options.configure) + } + + let context = null + + try { + const browser = await getBrowser() + context = await browser.createBrowserContext() + + // Allow clipboard writes, so that clicking `copyable()` text shows its + // copy message. Without this, the clipboard write is rejected and the + // message never appears. + await context.overridePermissions(baseUrl, ['clipboard-read', 'clipboard-write', 'clipboard-sanitized-write']) + + const page = await context.newPage() + await page.setViewport( + options.viewport ?? { + width: 1920, + height: 1080, + deviceScaleFactor: 3, + }, + ) + + // Set color scheme preference before navigating so server-rendered + // pages (like auth pages) pick up the correct theme on first load. + await page.emulateMediaFeatures([ + { + name: 'prefers-color-scheme', + value: theme === 'dark' ? 'dark' : 'light', + }, + { + name: 'prefers-reduced-motion', + value: 'reduce', + }, + ]) + + // Freeze CSS animations, transitions, and the blinking input caret, so + // that a screenshot never depends on which animation frame it happened + // to capture (e.g. spinning loading indicators, modal fade-ins). + await page.evaluateOnNewDocument(() => { + document.addEventListener('DOMContentLoaded', () => { + const style = document.createElement('style') + style.textContent = ` + *, ::before, ::after { + animation: none !important; + transition: none !important; + caret-color: transparent !important; + } + + html { + scroll-behavior: auto !important; + } + ` + document.head.append(style) + }) + }) + + await page.goto(`${baseUrl}/${options.url}`, { + waitUntil: 'networkidle2', + }) + + if (theme === 'dark' && options.needsReloadForDarkMode) { + await page.goto(`${baseUrl}/${options.url}`, { + waitUntil: 'networkidle2', + }) + } + + // If webfonts finish loading after a canvas-based chart has already + // drawn itself, fallback-font labels stay baked into the canvas, so + // wait for the fonts and have any charts re-render with them. The + // font must be requested explicitly: painting a canvas does not + // trigger a CSS font load, so `document.fonts.ready` can resolve + // while the font was never loaded at all. + const hasCanvas = await page.evaluate(async () => { + const fontFamily = getComputedStyle(document.body).fontFamily + + await Promise.all( + ['12px', 'bold 12px', '16px', 'bold 16px'].map((size) => + document.fonts.load(`${size} ${fontFamily}`).catch(() => {}), + ), + ) + + await document.fonts.ready + + if (! document.querySelector('canvas')) { + return false + } + + window.dispatchEvent(new Event('resize')) + + return true + }) + + if (hasCanvas) { + await new Promise((resolve) => setTimeout(resolve, 1000)) + } + + await new Promise((resolve) => setTimeout(resolve, 500)) + + for (const entry of entries) { + try { + await captureEntry(page, browser, entry.file, entry.options, theme) + } catch (error) { + console.error(`❌ Failed to generate ${theme}/${entry.file} - ${error}`) + failedJobs.push({ theme, entries: [entry] }) + } + } + } catch (error) { + for (const { file } of entries) { + console.error(`❌ Failed to generate ${theme}/${file} - ${error}`) + } + + failedJobs.push({ theme, entries }) + } finally { + await context?.close() + + if (options.configure) { + configure() + } + } +} + +// Jobs that failed are retried once at the end of the run, because rare +// transient errors (a navigation timeout, a DevTools protocol stall) would +// otherwise fail screenshots that generate fine moments later. +const failedJobs = [] + +const retryFailedJobs = async (run) => { + if (! failedJobs.length) { + return + } + + const retryJobs = failedJobs.splice(0) + + console.log(`🔁 Retrying ${retryJobs.length} failed job(s)...`) + + for (const job of retryJobs) { + await run(job) + } +} const stringMatchesRule = (string, rule) => { const escapeRegex = (str) => str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1') @@ -184,25 +389,194 @@ const stringMatchesRule = (string, rule) => { return new RegExp('^' + rule.split('*').map(escapeRegex).join('.*') + '$').test(string) } +const filters = process.argv.slice(2).filter((argument) => ! argument.startsWith('--')) + +const jobs = [] +const batchedJobs = new Map() + for (const theme of themes) { for (const [file, options] of Object.entries(schema)) { - const filters = process.argv.slice(2) - if (filters.length && ! filters.some((filter) => stringMatchesRule(file, filter))) { continue } - console.log(`⏳ Processing ${theme}/${file}`) + const entry = { file, options } - try { - await processScreenshot(file, options, theme) - } catch (error) { - console.error(`❌ Failed to generate ${theme}/${file} - ${error}`) - failures.push(`${theme}/${file}`) + // Entries with page interactions get their own page load. + if (options.before || options.configure) { + jobs.push({ theme, entries: [entry] }) + + continue } + + const batchKey = [ + theme, + options.url, + JSON.stringify(options.viewport ?? null), + options.needsReloadForDarkMode ? 'reload' : '', + ].join('|') + + if (! batchedJobs.has(batchKey)) { + const job = { theme, entries: [] } + batchedJobs.set(batchKey, job) + jobs.push(job) + } + + batchedJobs.get(batchKey).entries.push(entry) } } +// Reset `configure.php` in case a previous run crashed while it held a value. +configure() + +if (workerCount <= 1) { + for (const job of jobs) { + await processJob(job) + } + + await retryFailedJobs((job) => processJob(job)) +} else { + const appDirectory = path.resolve('../app') + const sourceDatabasePath = path.join(appDirectory, 'database', 'database.sqlite') + + if (! fs.existsSync(sourceDatabasePath)) { + fs.closeSync(fs.openSync(sourceDatabasePath, 'w')) + } + + // Reseed the database, so that every worker's copy starts from pristine + // seed data even if a previous run or a manual browsing session mutated + // it (many demos truncate and rebuild tables when they render). + console.log('🌱 Seeding the database...') + execFileSync('php', ['artisan', 'migrate:fresh', '--seed', '--force'], { + cwd: appDirectory, + stdio: 'ignore', + }) + + // Screenshots that write `configure.php` mutate state shared by every + // server, so they run serially after the parallel pool has finished. + const parallelJobs = jobs.filter(({ entries }) => ! entries[0].options.configure) + const configureJobs = jobs.filter(({ entries }) => entries[0].options.configure) + + const servers = [] + + const stopServers = () => { + for (const server of servers) { + try { + process.kill(-server.pid, 'SIGTERM') + } catch { + // + } + + try { + fs.unlinkSync(server.databasePath) + } catch { + // + } + } + } + + process.on('exit', stopServers) + process.on('SIGINT', () => process.exit(130)) + process.on('SIGTERM', () => process.exit(143)) + + const startServer = async (workerIndex) => { + const port = 8001 + workerIndex + const databasePath = path.join(appDirectory, 'database', `parallel-worker-${workerIndex}.sqlite`) + + fs.copyFileSync(sourceDatabasePath, databasePath) + + const baseUrl = `http://127.0.0.1:${port}` + + // `--no-reload` is required for `PHP_CLI_SERVER_WORKERS` to take + // effect; without it, `artisan serve` ignores the variable. + const serverProcess = spawn('php', ['artisan', 'serve', '--port', `${port}`, '--no-reload'], { + cwd: appDirectory, + env: { + ...process.env, + DB_DATABASE: databasePath, + // Absolute URLs the server generates (e.g. `/storage` file + // URLs from the `public` disk) must point at this worker's own + // port, not the default port 8000. + APP_URL: baseUrl, + // Serve a page's many static asset requests concurrently. + PHP_CLI_SERVER_WORKERS: process.env.PHP_CLI_SERVER_WORKERS ?? '8', + }, + stdio: 'ignore', + detached: true, + }) + + servers.push({ pid: serverProcess.pid, databasePath }) + + for (let attempt = 0; attempt < 60; attempt++) { + try { + const response = await fetch(`${baseUrl}/up`) + + if (response.status === 200) { + // Warm up the application with a real page request, so a + // cold first request does not eat into a screenshot's + // settle waits. + await fetch(`${baseUrl}/forms/overview`).catch(() => {}) + + return { baseUrl, databasePath } + } + } catch { + // + } + + await new Promise((resolve) => setTimeout(resolve, 500)) + } + + throw new Error(`Server on port ${port} did not become ready.`) + } + + console.log(`🚀 Starting ${workerCount} servers for ${parallelJobs.length} page loads...`) + + const workers = await Promise.all( + Array.from({ length: workerCount }, (item, workerIndex) => startServer(workerIndex)), + ) + + // Demos mutate the database when they render (truncating and rebuilding + // tables), so a job's outcome would otherwise depend on which jobs ran + // before it on the same worker. Restoring the pristine database before + // every job keeps each screenshot deterministic regardless of scheduling. + const resetWorkerDatabase = (worker) => fs.copyFileSync(sourceDatabasePath, worker.databasePath) + + let nextJobIndex = 0 + + await Promise.all( + workers.map(async (worker) => { + while (nextJobIndex < parallelJobs.length) { + const job = parallelJobs[nextJobIndex++] + + resetWorkerDatabase(worker) + await processJob(job, worker.baseUrl) + } + }), + ) + + for (const job of configureJobs) { + resetWorkerDatabase(workers[0]) + await processJob(job, workers[0].baseUrl) + } + + await retryFailedJobs(async (job) => { + resetWorkerDatabase(workers[0]) + await processJob(job, workers[0].baseUrl) + }) + + stopServers() +} + +if (sharedBrowser) { + await sharedBrowser.close() +} + +const failures = [ + ...new Set( + failedJobs.flatMap(({ theme, entries }) => entries.map(({ file }) => `${theme}/${file}`)), + ), +] + if (failures.length) { console.error(`❌ Failed to generate ${failures.length} screenshots:`) failures.forEach((failure) => console.error(`- ${failure}`))