diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 00000000..9bd9f8c9 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,6 @@ +{ + "enabledMcpjsonServers": [ + "laravel-boost" + ], + "enableAllProjectMcpServers": true +} \ No newline at end of file diff --git a/.env.example b/.env.example index f1fcbfaa..083f10d9 100644 --- a/.env.example +++ b/.env.example @@ -10,16 +10,23 @@ APP_FALLBACK_LOCALE=fr APP_PORT=8080 APP_SERVICE=laravelcm +BCRYPT_ROUNDS=12 + LOG_CHANNEL=stack LOG_STACK=single,nightwatch LOG_LEVEL=debug +LOG_SOCKET_URL=buggregator:9913 +# Ray Configuration RAY_HOST=ray@buggregator RAY_PORT=8000 +# Sentry SENTRY_LARAVEL_DSN=http://sentry@buggregator:8000/1 SENTRY_TRACES_SAMPLE_RATE=1.0 +#Var Dumper VAR_DUMPER_FORMAT=server VAR_DUMPER_SERVER=tcp://buggregator:9912 +# Inspector INSPECTOR_URL=http://inspector@buggregator:8000 INSPECTOR_API_KEY=test INSPECTOR_INGESTION_KEY=1test @@ -34,8 +41,7 @@ DB_PASSWORD=password BROADCAST_DRIVER=log MEDIA_DISK=media -FILESYSTEM_DISK=${MEDIA_DISK} -FILAMENT_FILESYSTEM_DISK=${MEDIA_DISK} +FILESYSTEM_DISK="${MEDIA_DISK}" FILAMENT_PATH=cpanel QUEUE_CONNECTION=database diff --git a/.env.testing b/.env.testing index 19c2dd76..caa918d8 100644 --- a/.env.testing +++ b/.env.testing @@ -31,4 +31,3 @@ SENTRY_LARAVEL_DSN= INSPECTOR_ENABLE=false BCRYPT_ROUNDS=4 -VIEW_COMPILED_PATH=/tmp/views diff --git a/.gitignore b/.gitignore index daf70699..1891ec24 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,9 @@ /node_modules npm-debug.log yarn-error.log -yarn.lock package-json.lock -pnpm-lock.yml /vendor composer.phar -/.junie -/.claude /.idea /.vscode .phpunit.cache @@ -15,6 +11,7 @@ composer.phar /public/build /public/hot /public/storage +/public/fonts /public/media /public/css /public/js diff --git a/.mcp.json b/.mcp.json index 4b9bacdf..29eda418 100644 --- a/.mcp.json +++ b/.mcp.json @@ -1,10 +1,10 @@ { "mcpServers": { "laravel-boost": { - "command": "php", + "command": "./vendor/bin/sail", "args": [ - "artisan", - "boost:mcp" + "artisan", + "boost:mcp" ] } } diff --git a/CLAUDE.md b/CLAUDE.md index f7bff9e7..e86b7619 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,15 +8,18 @@ The Laravel Boost guidelines are specifically curated by Laravel maintainers for ## Foundational Context This application is a Laravel application and its main Laravel ecosystems package & versions are below. You are an expert with them all. Ensure you abide by these specific packages & versions. -- php - 8.4.12 -- filament/filament (FILAMENT) - v3 +- php - 8.4.10 +- filament/filament (FILAMENT) - v4 - laravel/framework (LARAVEL) - v12 +- laravel/nightwatch (NIGHTWATCH) - v1 +- laravel/octane (OCTANE) - v2 - laravel/prompts (PROMPTS) - v0 - laravel/socialite (SOCIALITE) - v5 - livewire/livewire (LIVEWIRE) - v3 - livewire/volt (VOLT) - v1 - larastan/larastan (LARASTAN) - v3 - laravel/breeze (BREEZE) - v2 +- laravel/mcp (MCP) - v0 - laravel/pint (PINT) - v1 - laravel/sail (SAIL) - v1 - pestphp/pest (PEST) - v3 @@ -24,7 +27,7 @@ This application is a Laravel application and its main Laravel ecosystems packag - rector/rector (RECTOR) - v2 - alpinejs (ALPINEJS) - v3 - prettier (PRETTIER) - v3 -- tailwindcss (TAILWINDCSS) - v3 +- tailwindcss (TAILWINDCSS) - v4 ## Conventions @@ -201,19 +204,25 @@ Forms\Components\Select::make('user_id') -=== filament/v3 rules === +=== filament/v4 rules === -## Filament 3 +## Filament 4 -## Version 3 Changes To Focus On -- Resources are located in `app/Filament/Resources/` directory. -- Resource pages (List, Create, Edit) are auto-generated within the resource's directory - e.g., `app/Filament/Resources/PostResource/Pages/`. -- Forms use the `Forms\Components` namespace for form fields. -- Tables use the `Tables\Columns` namespace for table columns. -- A new `Filament\Forms\Components\RichEditor` component is available. -- Form and table schemas now use fluent method chaining. -- Added `php artisan filament:optimize` command for production optimization. -- Requires implementing `FilamentUser` contract for production access control. +### Important Version 4 Changes +- File visibility is now `private` by default. +- The `deferFilters` method from Filament v3 is now the default behavior in Filament v4, so users must click a button before the filters are applied to the table. To disable this behavior, you can use the `deferFilters(false)` method. +- The `Grid`, `Section`, and `Fieldset` layout components no longer span all columns by default. +- The `all` pagination page method is not available for tables by default. +- All action classes extend `Filament\Actions\Action`. No action classes exist in `Filament\Tables\Actions`. +- The `Form` & `Infolist` layout components have been moved to `Filament\Schemas\Components`, for example `Grid`, `Section`, `Fieldset`, `Tabs`, `Wizard`, etc. +- A new `Repeater` component for Forms has been added. +- Icons now use the `Filament\Support\Icons\Heroicon` Enum by default. Other options are available and documented. + +### Organize Component Classes Structure +- Schema components: `Schemas/Components/` +- Table columns: `Tables/Columns/` +- Table filters: `Tables/Filters/` +- Actions: `Actions/` === laravel/core rules === @@ -288,7 +297,7 @@ Forms\Components\Select::make('user_id') ## Livewire Core - Use the `search-docs` tool to find exact version specific documentation for how to write Livewire & Livewire tests. -- Use the `php artisan make:livewire [Posts\\CreatePost]` artisan command to create new components +- Use the `php artisan make:livewire [Posts\CreatePost]` artisan command to create new components - State should live on the server, with the UI reflecting it. - All Livewire requests hit the Laravel backend, they're like regular HTTP requests. Always validate form data, and run authorization checks in Livewire actions. @@ -305,7 +314,7 @@ Forms\Components\Select::make('user_id') @endforeach ``` -- Prefer lifecycle hooks like `mount()`, `updatedFoo()`) for initialization and reactive side effects: +- Prefer lifecycle hooks like `mount()`, `updatedFoo()` for initialization and reactive side effects: public function mount(User $user) { $this->user = $user; } @@ -564,11 +573,39 @@ it('has emails', function (string $email) { - If existing pages and components support dark mode, new pages and components must support dark mode in a similar way, typically using `dark:`. -=== tailwindcss/v3 rules === +=== tailwindcss/v4 rules === + +## Tailwind 4 + +- Always use Tailwind CSS v4 - do not use the deprecated utilities. +- `corePlugins` is not supported in Tailwind v4. +- In Tailwind v4, you import Tailwind using a regular CSS `@import` statement, not using the `@tailwind` directives used in v3: + + + - @tailwind base; + - @tailwind components; + - @tailwind utilities; + + @import "tailwindcss"; + + -## Tailwind 3 +### Replaced Utilities +- Tailwind v4 removed deprecated utilities. Do not use the deprecated option - use the replacement. +- Opacity values are still numeric. -- Always use Tailwind CSS v3 - verify you're using only classes supported by this version. +| Deprecated | Replacement | +|------------+--------------| +| bg-opacity-* | bg-black/* | +| text-opacity-* | text-black/* | +| border-opacity-* | border-black/* | +| divide-opacity-* | divide-black/* | +| ring-opacity-* | ring-black/* | +| placeholder-opacity-* | placeholder-black/* | +| flex-shrink-* | shrink-* | +| flex-grow-* | grow-* | +| overflow-ellipsis | text-ellipsis | +| decoration-slice | box-decoration-slice | +| decoration-clone | box-decoration-clone | === tests rules === @@ -577,4 +614,4 @@ it('has emails', function (string $email) { - Every change must be programmatically tested. Write a new test or update an existing test, then run the affected tests to make sure they pass. - Run the minimum number of tests needed to ensure code quality and speed. Use `php artisan test` with a specific filename or filter. - \ No newline at end of file + diff --git a/app-modules/gamify/composer.json b/app-modules/gamify/composer.json index b142ab48..7899c1a7 100644 --- a/app-modules/gamify/composer.json +++ b/app-modules/gamify/composer.json @@ -5,11 +5,11 @@ "version": "1.1.0", "license": "proprietary", "require": { - "filament/filament": "^3.2" + "php": "^8.4" }, "require-dev": { - "pestphp/pest": "^2.32", - "pestphp/pest-plugin-laravel": "^2.1" + "pestphp/pest": "^3.8", + "pestphp/pest-plugin-laravel": "^3.0" }, "autoload": { "psr-4": { diff --git a/app-modules/gamify/src/Models/Reputation.php b/app-modules/gamify/src/Models/Reputation.php index 8314f260..b5b348c5 100644 --- a/app-modules/gamify/src/Models/Reputation.php +++ b/app-modules/gamify/src/Models/Reputation.php @@ -11,7 +11,7 @@ /** * @property-read int $id - * @property int $point + * @property-read int $point * @property-read User|null $payee * @property-read \Illuminate\Support\Carbon $created_at * @property-read \Illuminate\Support\Carbon $updated_at @@ -28,19 +28,11 @@ public function payee(): BelongsTo return $this->belongsTo(config('gamify.payee_model'), 'payee_id'); // @phpstan-ignore-line } - /** - * Get the owning subject model - */ public function subject(): MorphTo { return $this->morphTo(); } - /** - * Undo last point - * - * @throws \Exception - */ public function undo(): void { if ($this->exists) { diff --git a/app-modules/gamify/tests/Feature/PointTest.php b/app-modules/gamify/tests/Feature/PointTest.php index 61ac56d8..3b85ef0a 100644 --- a/app-modules/gamify/tests/Feature/PointTest.php +++ b/app-modules/gamify/tests/Feature/PointTest.php @@ -3,131 +3,30 @@ declare(strict_types=1); use App\Models\User; -use Illuminate\Database\Eloquent\Model; use Laravelcm\Gamify\Exceptions\InvalidPayeeModelException; use Laravelcm\Gamify\Exceptions\PointsNotDefinedException; use Laravelcm\Gamify\Exceptions\PointSubjectNotSetException; -use Laravelcm\Gamify\PointType; - -final class FakeCreatePostPoint extends PointType -{ - public int $points = 10; - - public ?User $author; - - public function __construct(mixed $subject, ?User $author = null) - { - $this->subject = $subject; - $this->author = $author; - } - - public function payee(): ?User - { - return $this->author; - } -} - -final class FakeWelcomeUserWithNamePoint extends PointType -{ - public int $points = 30; - - public string $name = 'FakeName'; - - public function __construct(mixed $subject, public ?User $author = null) {} - - public function payee(): ?User - { - return $this->author; - } -} - -final class FakePointTypeWithoutSubject extends PointType -{ - protected int $point = 12; - - public function __construct($subject = null) - { - $this->subject = $subject; - } - - public function payee(): User - { - return new User; - } -} - -final class FakePointTypeWithoutPayee extends PointType -{ - protected int $point = 24; - - public function __construct(mixed $subject = null) - { - $this->subject = $subject; - } -} - -final class FakePointWithoutPoint extends PointType -{ - protected string $payee = 'user'; - - public function __construct($subject = null) - { - $this->subject = $subject; - } -} - -final class FakeWelcomeUserWithFalseQualifier extends PointType -{ - protected int $points = 10; - - public function __construct($subject) - { - $this->subject = $subject; - } - - public function qualifier(): bool - { - return false; - } - - public function payee(): ?User - { - return $this->getSubject()->user; - } -} - -final class FakePayeeFieldPoint extends PointType -{ - protected int $points = 10; - - /** @var string payee model relation on subject */ - protected string $payee = 'user'; - - public function __construct(mixed $subject) - { - $this->subject = $subject; - } -} +use Laravelcm\Gamify\Tests\Fixtures; beforeEach(function (): void { $this->user = $this->createUser(); }); -describe(PointType::class, function (): void { +describe('PointType', function (): void { it('sets point type name from class name', function (): void { - $point = new FakeCreatePostPoint($this->user); + $point = new Fixtures\FakeCreatePostPoint($this->user); expect($point->getName())->toBe('FakeCreatePostPoint'); }); it('uses name property for point name if provided', function (): void { - $point = new FakeWelcomeUserWithNamePoint($this->user); + $point = new Fixtures\FakeWelcomeUserWithNamePoint($this->user); expect($point->getName())->toBe('FakeName'); }); it('can get points for a point type', function (): void { - $point = new FakeCreatePostPoint($this->user); + $point = new Fixtures\FakeCreatePostPoint($this->user); expect($point->getPoints())->toBe(10); }); @@ -135,51 +34,51 @@ public function __construct(mixed $subject) it('gives point to a user', function (): void { $post = $this->createPost(['user_id' => $this->user->id]); - $this->user->givePoint(new FakeCreatePostPoint($post, $this->user)); + $this->user->givePoint(new Fixtures\FakeCreatePostPoint($post, $this->user)); - expect($this->user->getPoints())->toBe(10); - expect($this->user->reputations)->toHaveCount(1); + expect($this->user->getPoints())->toBe(10) + ->and($this->user->reputations)->toHaveCount(1); }); it('can access a reputation payee and subject', function (): void { $post = $this->createPost(['user_id' => $this->user->id]); - $this->user->givePoint(new FakeCreatePostPoint($post, $this->user)); + $this->user->givePoint(new Fixtures\FakeCreatePostPoint($post, $this->user)); $point = $this->user->reputations()->first(); - expect($point->payee)->toBeInstanceOf(User::class); - expect($point->subject)->toBeInstanceOf($post::class); - expect($point->name)->toBe('FakeCreatePostPoint'); + expect($point->payee)->toBeInstanceOf(User::class) + ->and($point->subject)->toBeInstanceOf($post::class) + ->and($point->name)->toBe('FakeCreatePostPoint'); }); it('do not give point if qualifier returns false', function (): void { $post = $this->createPost(['user_id' => $this->user->id]); - $this->user->givePoint(new FakeWelcomeUserWithFalseQualifier($post->user)); + $this->user->givePoint(new Fixtures\FakeWelcomeUserWithFalseQualifier($post->user)); expect($this->user->fresh()->getPoints())->toBe(0); }); it('throws exception if no payee is returned', function (): void { - $this->user->givePoint(new FakePointTypeWithoutPayee); + $this->user->givePoint(new Fixtures\FakePointTypeWithoutPayee); expect($this->user->fresh()->getPoints())->toBe(0); }) ->throws(InvalidPayeeModelException::class); it('throws exception if no subject is set', function (): void { - $this->user->givePoint(new FakePointTypeWithoutSubject); + $this->user->givePoint(new Fixtures\FakePointTypeWithoutSubject); - expect($this->user->getPoints())->toBe(0); - expect($this->user->reputations)->toHaveCount(0); + expect($this->user->getPoints())->toBe(0) + ->and($this->user->reputations)->toHaveCount(0); }) ->throws(PointSubjectNotSetException::class); it('throws exception if no points field or method is defined', function (): void { $post = $this->createPost(['user_id' => $this->user->id]); - $this->user->givePoint(new FakePointWithoutPoint($post)); + $this->user->givePoint(new Fixtures\FakePointWithoutPoint($post)); expect($this->user->getPoint())->toBe(0); }) @@ -189,13 +88,13 @@ public function __construct(mixed $subject) it('gives and undo point via helper functions', function (): void { $post = $this->createPost(['user_id' => $this->user->id]); - givePoint(new FakePayeeFieldPoint($post), $this->user); + givePoint(new Fixtures\FakePayeeFieldPoint($post), $this->user); expect($this->user->fresh()->getPoints())->toBe(10); - undoPoint(new FakePayeeFieldPoint($post), $this->user); + undoPoint(new Fixtures\FakePayeeFieldPoint($post), $this->user); - $user = $this->user->fresh(); + $this->user->fresh(); expect($this->user->fresh()->getPoints())->toBe(0); }); }); diff --git a/app-modules/gamify/tests/Fixtures/FakeCreatePostPoint.php b/app-modules/gamify/tests/Fixtures/FakeCreatePostPoint.php new file mode 100644 index 00000000..1738ff64 --- /dev/null +++ b/app-modules/gamify/tests/Fixtures/FakeCreatePostPoint.php @@ -0,0 +1,26 @@ +subject = $subject; + $this->author = $author; + } + + public function payee(): ?User + { + return $this->author; + } +} diff --git a/app-modules/gamify/tests/Fixtures/FakePayeeFieldPoint.php b/app-modules/gamify/tests/Fixtures/FakePayeeFieldPoint.php new file mode 100644 index 00000000..8c6f5486 --- /dev/null +++ b/app-modules/gamify/tests/Fixtures/FakePayeeFieldPoint.php @@ -0,0 +1,20 @@ +subject = $subject; + } +} diff --git a/app-modules/gamify/tests/Fixtures/FakePointTypeWithoutPayee.php b/app-modules/gamify/tests/Fixtures/FakePointTypeWithoutPayee.php new file mode 100644 index 00000000..6dd36aa0 --- /dev/null +++ b/app-modules/gamify/tests/Fixtures/FakePointTypeWithoutPayee.php @@ -0,0 +1,17 @@ +subject = $subject; + } +} diff --git a/app-modules/gamify/tests/Fixtures/FakePointTypeWithoutSubject.php b/app-modules/gamify/tests/Fixtures/FakePointTypeWithoutSubject.php new file mode 100644 index 00000000..4f4e2fcc --- /dev/null +++ b/app-modules/gamify/tests/Fixtures/FakePointTypeWithoutSubject.php @@ -0,0 +1,23 @@ +subject = $subject; + } + + public function payee(): User + { + return new User; + } +} diff --git a/app-modules/gamify/tests/Fixtures/FakePointWithoutPoint.php b/app-modules/gamify/tests/Fixtures/FakePointWithoutPoint.php new file mode 100644 index 00000000..fd1507c4 --- /dev/null +++ b/app-modules/gamify/tests/Fixtures/FakePointWithoutPoint.php @@ -0,0 +1,17 @@ +subject = $subject; + } +} diff --git a/app-modules/gamify/tests/Fixtures/FakeWelcomeUserWithFalseQualifier.php b/app-modules/gamify/tests/Fixtures/FakeWelcomeUserWithFalseQualifier.php new file mode 100644 index 00000000..eda96f37 --- /dev/null +++ b/app-modules/gamify/tests/Fixtures/FakeWelcomeUserWithFalseQualifier.php @@ -0,0 +1,28 @@ +subject = $subject; + } + + public function qualifier(): bool + { + return false; + } + + public function payee(): ?User + { + return $this->getSubject()->user; + } +} diff --git a/app-modules/gamify/tests/Fixtures/FakeWelcomeUserWithNamePoint.php b/app-modules/gamify/tests/Fixtures/FakeWelcomeUserWithNamePoint.php new file mode 100644 index 00000000..79dd0f41 --- /dev/null +++ b/app-modules/gamify/tests/Fixtures/FakeWelcomeUserWithNamePoint.php @@ -0,0 +1,22 @@ +author; + } +} diff --git a/app/Actions/Article/ApprovedArticleAction.php b/app/Actions/Article/ApprovedArticleAction.php index d2bef220..aa24b86f 100644 --- a/app/Actions/Article/ApprovedArticleAction.php +++ b/app/Actions/Article/ApprovedArticleAction.php @@ -11,8 +11,7 @@ final class ApprovedArticleAction { public function execute(Article $article): Article { - $article->approved_at = now(); - $article->save(); + $article->update(['approved_at' => now()]); givePoint(new ArticlePublished($article)); diff --git a/app/Actions/Forum/CreateReplyAction.php b/app/Actions/Forum/CreateReplyAction.php index 4dba1a59..2552fd9c 100644 --- a/app/Actions/Forum/CreateReplyAction.php +++ b/app/Actions/Forum/CreateReplyAction.php @@ -24,6 +24,7 @@ public function execute(string $body, ReplyInterface|Reply $model): void $reply->save(); givePoint(new ReplyCreated($model, $user)); + event(new ReplyWasCreated($reply)); } } diff --git a/app/Actions/Forum/UpdateThreadAction.php b/app/Actions/Forum/UpdateThreadAction.php index 2efc2dad..e05ba955 100644 --- a/app/Actions/Forum/UpdateThreadAction.php +++ b/app/Actions/Forum/UpdateThreadAction.php @@ -12,7 +12,6 @@ final class UpdateThreadAction public function execute(array $formValues, Thread $thread): Thread { return DB::transaction(function () use ($formValues, $thread): Thread { - $thread->update($formValues); return $thread; diff --git a/app/Actions/GetGithubRepositoriesAction.php b/app/Actions/GetGithubRepositoriesAction.php index aef58be8..4aad7a73 100644 --- a/app/Actions/GetGithubRepositoriesAction.php +++ b/app/Actions/GetGithubRepositoriesAction.php @@ -29,7 +29,7 @@ public function __invoke(): Collection return Cache::remember( key: 'github-repositories', - ttl: now()->addWeek(), + ttl: now()->addMonth(), callback: fn () => collect($response->json()) ->reject(fn (array $value): bool => $value['fork'] === true || ! in_array($value['name'], $only)) ->map(fn (array $data): RepositoryData => RepositoryData::from($data)) diff --git a/app/Contracts/HasCachedMediaInterface.php b/app/Contracts/HasCachedMediaInterface.php index 44906c2e..e7ef601a 100644 --- a/app/Contracts/HasCachedMediaInterface.php +++ b/app/Contracts/HasCachedMediaInterface.php @@ -4,11 +4,13 @@ namespace App\Contracts; +use DateTimeInterface; + interface HasCachedMediaInterface { public function getCacheKey(string $collection): string; - public function getCacheTtl(): \DateTimeInterface; + public function getCacheTtl(): DateTimeInterface; public function flushMediaCache(?string $collection = null): void; diff --git a/app/Exceptions/CannotUpdateApprovedArticle.php b/app/Exceptions/CannotUpdateApprovedArticle.php index 32f2b8b9..a5f21a04 100644 --- a/app/Exceptions/CannotUpdateApprovedArticle.php +++ b/app/Exceptions/CannotUpdateApprovedArticle.php @@ -4,4 +4,6 @@ namespace App\Exceptions; -final class CannotUpdateApprovedArticle extends \Exception {} +use Exception; + +final class CannotUpdateApprovedArticle extends Exception {} diff --git a/app/Filament/Resources/ArticleResource.php b/app/Filament/Resources/Articles/ArticleResource.php similarity index 74% rename from app/Filament/Resources/ArticleResource.php rename to app/Filament/Resources/Articles/ArticleResource.php index 98ecb813..a2113e3c 100644 --- a/app/Filament/Resources/ArticleResource.php +++ b/app/Filament/Resources/Articles/ArticleResource.php @@ -2,21 +2,21 @@ declare(strict_types=1); -namespace App\Filament\Resources; +namespace App\Filament\Resources\Articles; use App\Actions\Article\ApprovedArticleAction; use App\Actions\Article\DeclineArticleAction; -use App\Filament\Resources\ArticleResource\Pages; use App\Models\Article; -use Awcodes\FilamentBadgeableColumn\Components\Badge; -use Awcodes\FilamentBadgeableColumn\Components\BadgeableColumn; +use Awcodes\BadgeableColumn\Components\Badge; +use Awcodes\BadgeableColumn\Components\BadgeableColumn; +use Filament\Actions; use Filament\Forms\Components\Textarea; use Filament\Notifications\Notification; use Filament\Resources\Resource; -use Filament\Support\Enums\MaxWidth; -use Filament\Tables; -use Filament\Tables\Actions\BulkAction; +use Filament\Support\Enums\Width; +use Filament\Tables\Columns; use Filament\Tables\Enums\FiltersLayout; +use Filament\Tables\Filters; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; @@ -26,7 +26,7 @@ final class ArticleResource extends Resource { protected static ?string $model = Article::class; - protected static ?string $navigationIcon = 'heroicon-o-newspaper'; + protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-newspaper'; public static function getNavigationGroup(): string { @@ -38,13 +38,13 @@ public static function table(Table $table): Table return $table ->modifyQueryUsing(fn (Builder $query): Builder => $query->latest()) ->columns([ - Tables\Columns\SpatieMediaLibraryImageColumn::make('media') + Columns\SpatieMediaLibraryImageColumn::make('media') ->collection('media') ->label('Image'), - Tables\Columns\TextColumn::make('title') + Columns\TextColumn::make('title') ->label('Titre') ->limit(50) - ->tooltip(function (Tables\Columns\TextColumn $column): ?string { + ->tooltip(function (Columns\TextColumn $column): ?string { $state = $column->getState(); if (strlen($state) <= $column->getCharacterLimit()) { @@ -55,24 +55,24 @@ public static function table(Table $table): Table }) ->sortable() ->searchable(), - Tables\Columns\TextColumn::make('user.name') + Columns\TextColumn::make('user.name') ->label('Auteur') ->sortable() ->searchable(), - Tables\Columns\TextColumn::make('created_at') + Columns\TextColumn::make('created_at') ->label(__('Date de création')) ->date(), - Tables\Columns\IconColumn::make('published_at') + Columns\IconColumn::make('published_at') ->label('Publié') ->getStateUsing(fn (Article $record): bool => $record->isPublished()) ->boolean(), - Tables\Columns\TextColumn::make('submitted_at') + Columns\TextColumn::make('submitted_at') ->label('Soumission') ->placeholder('N/A') ->date(), BadgeableColumn::make('status') ->label('Statut') - ->getStateUsing(function ($record) { + ->getStateUsing(function ($record): string { if ($record->approved_at) { return $record->approved_at->format('d/m/Y'); } @@ -83,28 +83,26 @@ public static function table(Table $table): Table return ''; }) - ->prefixBadges(function ($record): array|string { + ->prefixBadges(function ($record): array { if ($record->approved_at) { return [ - Badge::make('Approuvé') - ->color('success'), + Badge::make('Approuvé')->color('success'), ]; } if ($record->declined_at) { return [ - Badge::make('Décliné') - ->color('danger'), + Badge::make('Décliné')->color('danger'), ]; } - return ''; + return []; }) ->sortable(), ]) - ->actions([ - Tables\Actions\ActionGroup::make([ - Tables\Actions\Action::make('approved') + ->recordActions([ + Actions\ActionGroup::make([ + Actions\Action::make('approved') ->visible(fn (Article $record): bool => $record->isAwaitingApproval()) ->label('Approuver') ->icon('heroicon-s-check') @@ -113,17 +111,17 @@ public static function table(Table $table): Table ->successNotificationTitle(__('Opération effectuée avec succès')) ->requiresConfirmation() ->modalIcon('heroicon-s-check') - ->action(function ($record): void { + ->action(function (Article $record): void { Gate::authorize('approve', $record); app(ApprovedArticleAction::class)->execute($record); }), - Tables\Actions\Action::make('declined') + Actions\Action::make('declined') ->visible(fn (Article $record): bool => $record->isAwaitingApproval()) ->label('Décliner') ->icon('heroicon-s-x-mark') ->color('warning') - ->form([ + ->schema([ Textarea::make('reason') ->label(__('Raison du refus')) ->maxLength(255) @@ -145,17 +143,17 @@ public static function table(Table $table): Table ->success() ->send(); }), - Tables\Actions\Action::make('show') + Actions\Action::make('show') ->icon('untitledui-eye') ->url(fn (Article $record): string => route('articles.show', $record)) ->openUrlInNewTab() ->label('Afficher'), - Tables\Actions\DeleteAction::make(), + Actions\DeleteAction::make(), ]), ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - BulkAction::make('declined') + ->toolbarActions([ + Actions\BulkActionGroup::make([ + Actions\BulkAction::make('declined') ->label('Décliner la sélection') ->icon('heroicon-s-x-mark') ->color('warning') @@ -166,22 +164,22 @@ public static function table(Table $table): Table ->modalHeading('Décliner') ->modalDescription('Voulez-vous vraiment décliner ces articles ?') ->modalSubmitActionLabel('Confirmer'), - Tables\Actions\DeleteBulkAction::make(), + Actions\DeleteBulkAction::make(), ]), ]) ->filters([ - Tables\Filters\TernaryFilter::make('submitted_at') + Filters\TernaryFilter::make('submitted_at') ->label('Soumis') ->nullable(), - Tables\Filters\TernaryFilter::make('declined_at') + Filters\TernaryFilter::make('declined_at') ->label('Décliner') ->nullable(), - Tables\Filters\TernaryFilter::make('approved_at') + Filters\TernaryFilter::make('approved_at') ->label('Approuver') ->nullable(), ], layout: FiltersLayout::AboveContentCollapsible) ->filtersFormColumns(4) - ->filtersFormWidth(MaxWidth::FourExtraLarge); + ->filtersFormWidth(Width::FourExtraLarge); } public static function getPages(): array diff --git a/app/Filament/Resources/ArticleResource/Pages/ListArticles.php b/app/Filament/Resources/Articles/Pages/ListArticles.php similarity index 82% rename from app/Filament/Resources/ArticleResource/Pages/ListArticles.php rename to app/Filament/Resources/Articles/Pages/ListArticles.php index f8be7594..c83ecf31 100644 --- a/app/Filament/Resources/ArticleResource/Pages/ListArticles.php +++ b/app/Filament/Resources/Articles/Pages/ListArticles.php @@ -2,13 +2,13 @@ declare(strict_types=1); -namespace App\Filament\Resources\ArticleResource\Pages; +namespace App\Filament\Resources\Articles\Pages; -use App\Filament\Resources\ArticleResource; +use App\Filament\Resources\Articles\ArticleResource; use App\Models\Article; use Closure; -use Filament\Resources\Components\Tab; use Filament\Resources\Pages\ListRecords; +use Filament\Schemas\Components\Tabs\Tab; final class ListArticles extends ListRecords { diff --git a/app/Filament/Resources/ChannelResource/Pages/ListChannels.php b/app/Filament/Resources/ChannelResource/Pages/ListChannels.php deleted file mode 100644 index 7118d2f7..00000000 --- a/app/Filament/Resources/ChannelResource/Pages/ListChannels.php +++ /dev/null @@ -1,27 +0,0 @@ -slideOver() - ->modalWidth(MaxWidth::Large), - ]; - } -} diff --git a/app/Filament/Resources/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php similarity index 59% rename from app/Filament/Resources/ChannelResource.php rename to app/Filament/Resources/Channels/ChannelResource.php index a656ca01..9e9fa676 100644 --- a/app/Filament/Resources/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -2,18 +2,19 @@ declare(strict_types=1); -namespace App\Filament\Resources; +namespace App\Filament\Resources\Channels; -use App\Filament\Resources\ChannelResource\Pages; use App\Models\Channel; -use Filament\Forms; -use Filament\Forms\Form; -use Filament\Resources\Concerns\Translatable; +use Filament\Actions; +use Filament\Forms\Components; use Filament\Resources\Resource; -use Filament\Tables; +use Filament\Schemas\Components\Utilities; +use Filament\Schemas\Schema; +use Filament\Tables\Columns; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Str; +use LaraZeus\SpatieTranslatable\Resources\Concerns\Translatable; final class ChannelResource extends Resource { @@ -21,27 +22,27 @@ final class ChannelResource extends Resource protected static ?string $model = Channel::class; - protected static ?string $navigationIcon = 'untitledui-git-branch'; + protected static string|\BackedEnum|null $navigationIcon = 'untitledui-git-branch'; public static function getNavigationGroup(): string { return __('Forum'); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name') + return $schema + ->components([ + Components\TextInput::make('name') ->required() ->live(onBlur: true) - ->afterStateUpdated(fn ($state, Forms\Set $set): mixed => $set('slug', Str::slug($state))) + ->afterStateUpdated(fn ($state, Utilities\Set $set): mixed => $set('slug', Str::slug($state))) ->columnSpanFull(), - Forms\Components\TextInput::make('slug') + Components\TextInput::make('slug') ->readOnly() ->required() ->columnSpanFull(), - Forms\Components\Select::make('parent_id') + Components\Select::make('parent_id') ->relationship( name: 'parent', titleAttribute: 'name', @@ -50,13 +51,13 @@ public static function form(Form $form): Form ->live() ->default(null) ->columnSpanFull(), - Forms\Components\ColorPicker::make('color') + Components\ColorPicker::make('color') ->label('Couleur') ->hex() ->live() ->columnSpanFull() - ->required(fn (Forms\Get $get): bool => $get('parent_id') === null), - Forms\Components\Textarea::make('description') + ->required(fn (Utilities\Get $get): bool => $get('parent_id') === null), + Components\Textarea::make('description') ->rows(4) ->columnSpanFull(), ]); @@ -66,32 +67,31 @@ public static function table(Table $table): Table { return $table ->columns([ - Tables\Columns\TextColumn::make('name') + Columns\TextColumn::make('name') ->label('Nom') ->searchable(), - Tables\Columns\TextColumn::make('parent.name') + Columns\TextColumn::make('parent.name') ->label('Parent') ->placeholder('N/A') ->sortable(), - Tables\Columns\TextColumn::make('thread_number') + Columns\TextColumn::make('thread_number') ->label('Nombre de sujets') ->getStateUsing(fn ($record) => $record->threads()->count()), - Tables\Columns\ColorColumn::make('color') + Columns\ColorColumn::make('color') ->label('Couleur') ->placeholder('N/A'), - Tables\Columns\TextColumn::make('created_at') + Columns\TextColumn::make('created_at') ->label('Date') ->date() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make() - ->iconButton(), + ->recordActions([ + Actions\EditAction::make(), + Actions\DeleteAction::make()->iconButton(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + Actions\DeleteBulkAction::make(), ]); } diff --git a/app/Filament/Resources/Channels/Pages/ListChannels.php b/app/Filament/Resources/Channels/Pages/ListChannels.php new file mode 100644 index 00000000..5bebe993 --- /dev/null +++ b/app/Filament/Resources/Channels/Pages/ListChannels.php @@ -0,0 +1,29 @@ +slideOver() + ->modalWidth(Width::Large), + ]; + } +} diff --git a/app/Filament/Resources/DiscussionResource.php b/app/Filament/Resources/Discussions/DiscussionResource.php similarity index 52% rename from app/Filament/Resources/DiscussionResource.php rename to app/Filament/Resources/Discussions/DiscussionResource.php index cdf5acff..e3b72341 100644 --- a/app/Filament/Resources/DiscussionResource.php +++ b/app/Filament/Resources/Discussions/DiscussionResource.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace App\Filament\Resources; +namespace App\Filament\Resources\Discussions; -use App\Filament\Resources\DiscussionResource\Pages; use App\Models\Discussion; +use Filament\Actions; use Filament\Resources\Resource; -use Filament\Tables; +use Filament\Tables\Columns; use Filament\Tables\Filters\Filter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -16,7 +16,7 @@ final class DiscussionResource extends Resource { protected static ?string $model = Discussion::class; - protected static ?string $navigationIcon = 'untitledui-message-chat-square'; + protected static string|\BackedEnum|null $navigationIcon = 'untitledui-message-chat-square'; public static function getNavigationGroup(): string { @@ -27,45 +27,48 @@ public static function table(Table $table): Table { return $table ->columns([ - Tables\Columns\TextColumn::make('title') - ->label('Titre') + Columns\TextColumn::make('title') + ->label(__('Titre')) ->limit(50) ->sortable() ->searchable(), - Tables\Columns\TextColumn::make('user.name') - ->label('Auteur') + Columns\TextColumn::make('user.name') + ->label(__('Auteur')) ->sortable() ->searchable(), - Tables\Columns\TextColumn::make('count_all_replies_with_child') - ->label('Commentaires'), - Tables\Columns\IconColumn::make('locked') - ->label('Vérrouillé') + Columns\TextColumn::make('count_all_replies_with_child') + ->label(__('Commentaires')), + Columns\IconColumn::make('locked') + ->label(__('Vérrouillé')) ->boolean() ->trueIcon('untitledui-lock-04') ->trueColor('warning') ->falseIcon('untitledui-lock-unlocked-04') ->falseColor('gray'), - Tables\Columns\TextColumn::make('created_at') - ->label('Date') + Columns\TextColumn::make('created_at') + ->label(__('Date')) ->date(), ]) ->filters([ - Filter::make('is_pinned')->query(fn (Builder $query) => $query->where('is_pinned', true))->label('Epinglé'), - Filter::make('is_locked')->query(fn (Builder $query) => $query->where('locked', true))->label('Vérrouillé'), + Filter::make('is_pinned') + ->query(fn (Builder $query) => $query->where('is_pinned', true)) + ->label(__('Epinglé')), + Filter::make('is_locked') + ->query(fn (Builder $query) => $query->where('locked', true)) + ->label(__('Vérrouillé')), ]) - ->actions([ - Tables\Actions\Action::make('show') + ->recordActions([ + Actions\Action::make('show') ->icon('untitledui-eye') ->iconButton() ->color('gray') ->url(fn (Discussion $record): string => route('discussions.show', $record)) ->openUrlInNewTab(), - Tables\Actions\DeleteAction::make() - ->iconButton(), + Actions\DeleteAction::make()->iconButton(), ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + Actions\BulkActionGroup::make([ + Actions\DeleteBulkAction::make(), ]), ]); } diff --git a/app/Filament/Resources/DiscussionResource/Pages/ListDiscussions.php b/app/Filament/Resources/Discussions/Pages/ListDiscussions.php similarity index 63% rename from app/Filament/Resources/DiscussionResource/Pages/ListDiscussions.php rename to app/Filament/Resources/Discussions/Pages/ListDiscussions.php index 01661beb..44eeb1b0 100644 --- a/app/Filament/Resources/DiscussionResource/Pages/ListDiscussions.php +++ b/app/Filament/Resources/Discussions/Pages/ListDiscussions.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace App\Filament\Resources\DiscussionResource\Pages; +namespace App\Filament\Resources\Discussions\Pages; -use App\Filament\Resources\DiscussionResource; +use App\Filament\Resources\Discussions\DiscussionResource; use Filament\Resources\Pages\ListRecords; final class ListDiscussions extends ListRecords diff --git a/app/Filament/Resources/TagResource/Pages/ListTags.php b/app/Filament/Resources/Tags/Pages/ListTags.php similarity index 55% rename from app/Filament/Resources/TagResource/Pages/ListTags.php rename to app/Filament/Resources/Tags/Pages/ListTags.php index d40fbf2b..5e27eb9b 100644 --- a/app/Filament/Resources/TagResource/Pages/ListTags.php +++ b/app/Filament/Resources/Tags/Pages/ListTags.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace App\Filament\Resources\TagResource\Pages; +namespace App\Filament\Resources\Tags\Pages; -use App\Filament\Resources\TagResource; -use Filament\Actions; +use App\Filament\Resources\Tags\TagResource; +use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\MaxWidth; +use Filament\Support\Enums\Width; final class ListTags extends ListRecords { @@ -16,9 +16,9 @@ final class ListTags extends ListRecords protected function getHeaderActions(): array { return [ - Actions\CreateAction::make() + CreateAction::make() ->slideOver() - ->modalWidth(MaxWidth::Large), + ->modalWidth(Width::Large), ]; } } diff --git a/app/Filament/Resources/TagResource.php b/app/Filament/Resources/Tags/TagResource.php similarity index 52% rename from app/Filament/Resources/TagResource.php rename to app/Filament/Resources/Tags/TagResource.php index eacae266..073e6896 100644 --- a/app/Filament/Resources/TagResource.php +++ b/app/Filament/Resources/Tags/TagResource.php @@ -2,14 +2,15 @@ declare(strict_types=1); -namespace App\Filament\Resources; +namespace App\Filament\Resources\Tags; -use App\Filament\Resources\TagResource\Pages; use App\Models\Tag; -use Filament\Forms; -use Filament\Forms\Form; +use Filament\Actions; +use Filament\Forms\Components; use Filament\Resources\Resource; -use Filament\Tables; +use Filament\Schemas\Components\Utilities\Set; +use Filament\Schemas\Schema; +use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Support\Str; @@ -17,28 +18,28 @@ final class TagResource extends Resource { protected static ?string $model = Tag::class; - protected static ?string $navigationIcon = 'untitledui-tag-03'; + protected static string|\BackedEnum|null $navigationIcon = 'untitledui-tag-03'; public static function getNavigationGroup(): string { return __('Contenu'); } - public static function form(Form $form): Form + public static function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name') + return $schema + ->components([ + Components\TextInput::make('name') ->live(onBlur: true) ->required() ->unique(ignoreRecord: true) - ->afterStateUpdated(fn ($state, Forms\Set $set): mixed => $set('slug', Str::slug($state))) + ->afterStateUpdated(fn ($state, Set $set): mixed => $set('slug', Str::slug($state))) ->columnSpanFull(), - Forms\Components\TextInput::make('slug') + Components\TextInput::make('slug') ->readOnly() ->required() ->columnSpanFull(), - Forms\Components\Select::make('concerns') + Components\Select::make('concerns') ->multiple() ->options([ 'post' => 'Article', @@ -47,8 +48,7 @@ public static function form(Form $form): Form ]) ->required() ->columnSpanFull(), - Forms\Components\Textarea::make('description') - ->columnSpanFull(), + Components\Textarea::make('description')->columnSpanFull(), ]); } @@ -56,18 +56,16 @@ public static function table(Table $table): Table { return $table ->columns([ - Tables\Columns\TextColumn::make('name') - ->searchable(), - Tables\Columns\TextColumn::make(name: 'concerns'), + TextColumn::make('name')->searchable(), + TextColumn::make(name: 'concerns'), ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make() - ->iconButton(), + ->recordActions([ + Actions\EditAction::make(), + Actions\DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + Actions\BulkActionGroup::make([ + Actions\DeleteBulkAction::make(), ]), ]); } diff --git a/app/Filament/Resources/ThreadResource/Pages/ListThreads.php b/app/Filament/Resources/Threads/Pages/ListThreads.php similarity index 65% rename from app/Filament/Resources/ThreadResource/Pages/ListThreads.php rename to app/Filament/Resources/Threads/Pages/ListThreads.php index ffbc8eff..5ded5804 100644 --- a/app/Filament/Resources/ThreadResource/Pages/ListThreads.php +++ b/app/Filament/Resources/Threads/Pages/ListThreads.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace App\Filament\Resources\ThreadResource\Pages; +namespace App\Filament\Resources\Threads\Pages; -use App\Filament\Resources\ThreadResource; +use App\Filament\Resources\Threads\ThreadResource; use Filament\Resources\Pages\ListRecords; final class ListThreads extends ListRecords diff --git a/app/Filament/Resources/ThreadResource.php b/app/Filament/Resources/Threads/ThreadResource.php similarity index 58% rename from app/Filament/Resources/ThreadResource.php rename to app/Filament/Resources/Threads/ThreadResource.php index 6d09386f..187898d7 100644 --- a/app/Filament/Resources/ThreadResource.php +++ b/app/Filament/Resources/Threads/ThreadResource.php @@ -2,19 +2,20 @@ declare(strict_types=1); -namespace App\Filament\Resources; +namespace App\Filament\Resources\Threads; -use App\Filament\Resources\ThreadResource\Pages; use App\Models\Thread; +use Filament\Actions; use Filament\Resources\Resource; -use Filament\Tables; +use Filament\Tables\Columns; +use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; final class ThreadResource extends Resource { protected static ?string $model = Thread::class; - protected static ?string $navigationIcon = 'heroicon-o-chat-bubble-left-right'; + protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-chat-bubble-left-right'; public static function getNavigationGroup(): string { @@ -25,45 +26,45 @@ public static function table(Table $table): Table { return $table ->columns([ - Tables\Columns\TextColumn::make('title') - ->label('Titre') + Columns\TextColumn::make('title') + ->label(__('Titre')) ->sortable(), - Tables\Columns\TextColumn::make('user.name') - ->label('Auteur'), - Tables\Columns\IconColumn::make('locked') - ->label('Vérrouillé') + Columns\TextColumn::make('user.name') + ->label(__('Auteur')), + Columns\IconColumn::make('locked') + ->label(__('Vérrouillé')) ->boolean() ->trueIcon('heroicon-s-lock-closed') ->trueColor('warning') ->falseIcon('heroicon-s-lock-open') ->falseColor('success'), - Tables\Columns\TextColumn::make('resolved_by') - ->label('Résolu') + Columns\TextColumn::make('resolved_by') + ->label(__('Résolu')) ->badge() ->getStateUsing(fn (Thread $record): string => $record->resolved_by === null ? 'Non' : 'Oui') ->color(fn (Thread $record): string => $record->resolved_by === null ? 'gray' : 'success'), - Tables\Columns\TextColumn::make('created_at') - ->label('Date de publication') + Columns\TextColumn::make('created_at') + ->label(__('Date de publication')) ->dateTime(), ]) - ->actions([ - Tables\Actions\ActionGroup::make([ - Tables\Actions\Action::make('view') - ->label('Voir le thread') + ->recordActions([ + Actions\ActionGroup::make([ + Actions\Action::make('view') + ->label(__('Voir le thread')) ->icon('heroicon-o-eye') ->color('success') ->url(fn (Thread $record): string => route('forum.show', $record)) ->openUrlInNewTab(), - Tables\Actions\DeleteAction::make(), + Actions\DeleteAction::make(), ]), ]) - ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), + ->toolbarActions([ + Actions\BulkActionGroup::make([ + Actions\DeleteBulkAction::make(), ]), ]) ->filters([ - Tables\Filters\SelectFilter::make('Channels') + SelectFilter::make('Channels') ->relationship('channels', 'name') ->searchable() ->preload(), diff --git a/app/Filament/Resources/UserResource/Pages/ListUsers.php b/app/Filament/Resources/Users/Pages/ListUsers.php similarity index 76% rename from app/Filament/Resources/UserResource/Pages/ListUsers.php rename to app/Filament/Resources/Users/Pages/ListUsers.php index f9c8e4a0..e1348100 100644 --- a/app/Filament/Resources/UserResource/Pages/ListUsers.php +++ b/app/Filament/Resources/Users/Pages/ListUsers.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace App\Filament\Resources\UserResource\Pages; +namespace App\Filament\Resources\Users\Pages; -use App\Filament\Resources\UserResource; -use Filament\Resources\Components\Tab; +use App\Filament\Resources\Users\UserResource; use Filament\Resources\Pages\ListRecords; +use Filament\Schemas\Components\Tabs\Tab; final class ListUsers extends ListRecords { diff --git a/app/Filament/Resources/UserResource.php b/app/Filament/Resources/Users/UserResource.php similarity index 81% rename from app/Filament/Resources/UserResource.php rename to app/Filament/Resources/Users/UserResource.php index 9fc017c7..95e54d01 100644 --- a/app/Filament/Resources/UserResource.php +++ b/app/Filament/Resources/Users/UserResource.php @@ -2,18 +2,19 @@ declare(strict_types=1); -namespace App\Filament\Resources; +namespace App\Filament\Resources\Users; use App\Actions\User\BanUserAction; use App\Actions\User\UnBanUserAction; -use App\Filament\Resources\UserResource\Pages; use App\Models\User; -use Awcodes\FilamentBadgeableColumn\Components\Badge; -use Awcodes\FilamentBadgeableColumn\Components\BadgeableColumn; +use Awcodes\BadgeableColumn\Components\Badge; +use Awcodes\BadgeableColumn\Components\BadgeableColumn; +use Filament\Actions; use Filament\Forms\Components\TextInput; use Filament\Notifications\Notification; use Filament\Resources\Resource; -use Filament\Tables; +use Filament\Tables\Columns; +use Filament\Tables\Filters\TernaryFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -21,7 +22,7 @@ final class UserResource extends Resource { protected static ?string $model = User::class; - protected static ?string $navigationIcon = 'untitledui-users-02'; + protected static string|\BackedEnum|null $navigationIcon = 'untitledui-users-02'; public static function getNavigationGroup(): string { @@ -38,7 +39,7 @@ public static function table(Table $table): Table ->latest(); }) ->columns([ - Tables\Columns\ImageColumn::make('profile_photo_url') + Columns\ImageColumn::make('profile_photo_url') ->label('Avatar') ->circular(), BadgeableColumn::make('name') @@ -50,25 +51,25 @@ public static function table(Table $table): Table ->description(fn (User $record): ?string => $record->location) ->searchable() ->sortable(), - Tables\Columns\TextColumn::make('email') - ->label('Email') + Columns\TextColumn::make('email') + ->label(__('Email')) ->icon('untitledui-inbox') ->description(fn (User $record): ?string => $record->phone_number), - Tables\Columns\TextColumn::make('email_verified_at') + Columns\TextColumn::make('email_verified_at') ->label(__('user.validate_email')) ->placeholder('N/A') ->date(), - Tables\Columns\TextColumn::make(name: 'created_at') + Columns\TextColumn::make(name: 'created_at') ->label(__('user.inscription')) ->date(), ]) ->filters([ - Tables\Filters\TernaryFilter::make('email_verified_at') + TernaryFilter::make('email_verified_at') ->label(__('user.email_verified')) ->nullable(), ]) - ->actions([ - Tables\Actions\Action::make('ban') + ->recordActions([ + Actions\Action::make('ban') ->label(__('actions.ban')) ->icon('untitledui-archive') ->color('warning') @@ -76,7 +77,7 @@ public static function table(Table $table): Table ->modalHeading(__('user.ban.heading')) ->modalDescription(__('user.ban.description')) ->authorize('ban', User::class) - ->form([ + ->schema([ TextInput::make('banned_reason') ->label(__('user.ban.reason')) ->required(), @@ -92,7 +93,7 @@ public static function table(Table $table): Table ->send(); }) ->requiresConfirmation(), - Tables\Actions\Action::make('unban') + Actions\Action::make('unban') ->label(__('actions.unban')) ->icon('heroicon-o-check-circle') ->color('success') @@ -109,11 +110,11 @@ public static function table(Table $table): Table ->send(); }) ->requiresConfirmation(), - Tables\Actions\DeleteAction::make(), + Actions\DeleteAction::make(), ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), - Tables\Actions\BulkAction::make('delete_banned') + ->toolbarActions([ + Actions\DeleteBulkAction::make(), + Actions\BulkAction::make('delete_banned') ->label(__('Supprimer les utilisateurs bannis')) ->icon('heroicon-o-trash') ->color('danger') @@ -131,9 +132,7 @@ public static function table(Table $table): Table return; } - $bannedUsers->each(function (User $user): void { - $user->delete(); - }); + $bannedUsers->each(fn (User $user): ?bool => $user->delete()); Notification::make() ->success() diff --git a/app/Http/Controllers/Api/Auth/RegisterController.php b/app/Http/Controllers/Api/Auth/RegisterController.php index be359ca9..56212c64 100644 --- a/app/Http/Controllers/Api/Auth/RegisterController.php +++ b/app/Http/Controllers/Api/Auth/RegisterController.php @@ -85,9 +85,10 @@ public function googleAuthenticator(Request $request): JsonResponse // TODO: Send new company registration notification on Slack - $user->last_login_at = Carbon::now(); - $user->last_login_ip = $request->ip(); - $user->save(); + $user->update([ + 'last_login_at' => now(), + 'last_login_ip' => $request->getClientIp(), + ]); return response()->json([ 'message' => __('Votre compte a été crée avec succès via Google.'), diff --git a/app/Http/Controllers/NotchPayCallBackController.php b/app/Http/Controllers/NotchPayCallBackController.php index 4a185338..892d1ac5 100644 --- a/app/Http/Controllers/NotchPayCallBackController.php +++ b/app/Http/Controllers/NotchPayCallBackController.php @@ -7,6 +7,7 @@ use App\Enums\TransactionStatus; use App\Events\SponsoringPaymentInitialize; use App\Models\Transaction; +use Exception; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; @@ -49,7 +50,7 @@ public function __invoke(Request $request): RedirectResponse ); } - } catch (\Exception $e) { + } catch (Exception $e) { Log::error($e->getMessage()); session()->flash( diff --git a/app/Http/Controllers/SubscriptionController.php b/app/Http/Controllers/SubscriptionController.php index 83df2f8d..8d8d067b 100644 --- a/app/Http/Controllers/SubscriptionController.php +++ b/app/Http/Controllers/SubscriptionController.php @@ -5,13 +5,14 @@ namespace App\Http\Controllers; use App\Models\Subscribe; +use App\Models\Thread; use Illuminate\Http\RedirectResponse; final class SubscriptionController extends Controller { public function unsubscribe(Subscribe $subscription): RedirectResponse { - /** @var \App\Models\Thread $thread */ + /** @var Thread $thread */ $thread = $subscription->subscribeAble; $thread->subscribes()->where('user_id', $subscription->user->id)->delete(); diff --git a/app/Listeners/SendNewReplyNotification.php b/app/Listeners/SendNewReplyNotification.php index bf627b2f..2181011e 100644 --- a/app/Listeners/SendNewReplyNotification.php +++ b/app/Listeners/SendNewReplyNotification.php @@ -6,6 +6,7 @@ use App\Events\ReplyWasCreated; use App\Models\Subscribe; +use App\Models\Thread; use App\Models\User; use App\Notifications\NewReplyNotification; use Illuminate\Contracts\Queue\ShouldQueue; @@ -17,7 +18,7 @@ final class SendNewReplyNotification implements ShouldQueue public function handle(ReplyWasCreated $event): void { - /** @var \App\Models\Thread $thread */ + /** @var Thread $thread */ $thread = $event->reply->replyAble; foreach ($thread->subscribes as $subscription) { diff --git a/app/Livewire/Components/Discussion/Comments.php b/app/Livewire/Components/Discussion/Comments.php index 9f9e4d5d..ebcbe929 100644 --- a/app/Livewire/Components/Discussion/Comments.php +++ b/app/Livewire/Components/Discussion/Comments.php @@ -7,11 +7,13 @@ use App\Actions\Discussion\CreateDiscussionReplyAction; use App\Models\Discussion; use App\Models\Reply; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components\Textarea; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; use Filament\Notifications\Notification; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Auth; @@ -20,10 +22,11 @@ use Livewire\Component; /** - * @property Form $form + * @property \Filament\Schemas\Schema $form */ -final class Comments extends Component implements HasForms +final class Comments extends Component implements HasActions, HasForms { + use InteractsWithActions; use InteractsWithForms; public Discussion $discussion; @@ -35,11 +38,11 @@ public function mount(): void $this->form->fill(); } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Textarea::make('body') + return $schema + ->components([ + Textarea::make('body') ->hiddenLabel() ->placeholder(__('pages/discussion.placeholder')) ->rows(3) diff --git a/app/Livewire/Components/Forum/ReplyForm.php b/app/Livewire/Components/Forum/ReplyForm.php index 1a934ddb..53dc4a28 100644 --- a/app/Livewire/Components/Forum/ReplyForm.php +++ b/app/Livewire/Components/Forum/ReplyForm.php @@ -7,20 +7,23 @@ use App\Actions\Forum\CreateReplyAction; use App\Models\Reply; use App\Models\Thread; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components\MarkdownEditor; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; use Filament\Notifications\Notification; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Livewire\Attributes\On; use Livewire\Component; /** - * @property Form $form + * @property \Filament\Schemas\Schema $form */ -final class ReplyForm extends Component implements HasForms +final class ReplyForm extends Component implements HasActions, HasForms { + use InteractsWithActions; use InteractsWithForms; public Thread $thread; @@ -53,11 +56,11 @@ public function close(): void $this->reply = null; } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\MarkdownEditor::make('body') + return $schema + ->components([ + MarkdownEditor::make('body') ->hiddenLabel() ->fileAttachmentsDisk('public') ->autofocus() diff --git a/app/Livewire/Components/Slideovers/ArticleForm.php b/app/Livewire/Components/Slideovers/ArticleForm.php index 1acd983a..382f3676 100644 --- a/app/Livewire/Components/Slideovers/ArticleForm.php +++ b/app/Livewire/Components/Slideovers/ArticleForm.php @@ -11,11 +11,17 @@ use App\Livewire\Traits\WithAuthenticatedUser; use App\Models\Article; use Carbon\Carbon; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; +use Filament\Infolists\Components\TextEntry; use Filament\Notifications\Notification; +use Filament\Schemas\Components\Grid; +use Filament\Schemas\Components\Group; +use Filament\Schemas\Components\Utilities; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Auth; @@ -25,10 +31,11 @@ use Laravelcm\LivewireSlideOvers\SlideOverComponent; /** - * @property-read Form $form + * @property-read \Filament\Schemas\Schema $form */ -final class ArticleForm extends SlideOverComponent implements HasForms +final class ArticleForm extends SlideOverComponent implements HasActions, HasForms { + use InteractsWithActions; use InteractsWithForms; use WithAuthenticatedUser; @@ -60,48 +67,48 @@ public static function closePanelOnClickAway(): bool return false; } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Group::make() + return $schema + ->components([ + Group::make() ->schema([ - Forms\Components\TextInput::make('title') + Components\TextInput::make('title') ->label(__('validation.attributes.title')) ->minLength(10) ->required() ->live(onBlur: true) - ->afterStateUpdated(fn ($state, Forms\Set $set): mixed => $set('slug', Str::slug($state))), - Forms\Components\Hidden::make('slug'), - Forms\Components\TextInput::make('canonical_url') + ->afterStateUpdated(fn ($state, Utilities\Set $set): mixed => $set('slug', Str::slug($state))), + Components\Hidden::make('slug'), + Components\TextInput::make('canonical_url') ->label(__('pages/article.form.canonical_url')) ->helperText(__('pages/article.canonical_help')), - Forms\Components\Grid::make() + Grid::make() ->schema([ - Forms\Components\Toggle::make('is_draft') + Components\Toggle::make('is_draft') ->label(__('pages/article.form.draft')) ->live() ->offIcon('untitledui-check') ->onColor('success') ->onIcon('untitledui-pencil-line') ->helperText(__('pages/article.draft_help')), - Forms\Components\DatePicker::make('published_at') + Components\DatePicker::make('published_at') ->label(__('pages/article.form.published_at')) ->closeOnDateSelection() ->prefixIcon('untitledui-calendar-date') ->native(false) - ->visible(fn (Forms\Get $get): bool => $get('is_draft') === false) - ->required(fn (Forms\Get $get): bool => $get('is_draft') === false), + ->visible(fn (Utilities\Get $get): bool => $get('is_draft') === false) + ->required(fn (Utilities\Get $get): bool => $get('is_draft') === false), ]), ]) ->columnSpan(2), - Forms\Components\Group::make() + Group::make() ->schema([ - Forms\Components\SpatieMediaLibraryFileUpload::make('media') + Components\SpatieMediaLibraryFileUpload::make('media') ->collection('media') ->label(__('pages/article.form.cover')) ->maxSize(1024), - Forms\Components\Select::make('tags') + Components\Select::make('tags') ->multiple() ->relationship( name: 'tags', @@ -112,16 +119,16 @@ public function form(Form $form): Form ->required() ->minItems(1) ->maxItems(3), - Forms\Components\ToggleButtons::make('locale') + Components\ToggleButtons::make('locale') ->label(__('validation.attributes.locale')) ->options(['en' => 'En', 'fr' => 'Fr']) ->helperText(__('global.locale_help')) ->grouped(), ]) ->columnSpan(1), - Forms\Components\Group::make() + Group::make() ->schema([ - Forms\Components\MarkdownEditor::make('body') + Components\MarkdownEditor::make('body') ->toolbarButtons([ 'attachFiles', 'blockquote', @@ -139,8 +146,9 @@ public function form(Form $form): Form ->minLength(10) ->maxHeight('20.25rem') ->required(), - Forms\Components\Placeholder::make('') - ->content(fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' + TextEntry::make('placeholder') + ->hiddenLabel() + ->state(fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' Blade))), ]) diff --git a/app/Livewire/Components/Slideovers/DiscussionForm.php b/app/Livewire/Components/Slideovers/DiscussionForm.php index 1ed49ff9..cc4c3f34 100644 --- a/app/Livewire/Components/Slideovers/DiscussionForm.php +++ b/app/Livewire/Components/Slideovers/DiscussionForm.php @@ -8,11 +8,15 @@ use App\Exceptions\UnverifiedUserException; use App\Livewire\Traits\WithAuthenticatedUser; use App\Models\Discussion; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; +use Filament\Infolists\Components\TextEntry; use Filament\Notifications\Notification; +use Filament\Schemas\Components\Utilities\Set; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Blade; @@ -21,10 +25,11 @@ use Laravelcm\LivewireSlideOvers\SlideOverComponent; /** - * @property Form $form + * @property \Filament\Schemas\Schema $form */ -final class DiscussionForm extends SlideOverComponent implements HasForms +final class DiscussionForm extends SlideOverComponent implements HasActions, HasForms { + use InteractsWithActions; use InteractsWithForms; use WithAuthenticatedUser; @@ -45,38 +50,38 @@ public function mount(?int $discussionId = null): void ])); } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Hidden::make('user_id'), - Forms\Components\TextInput::make('title') + return $schema + ->components([ + Components\Hidden::make('user_id'), + Components\TextInput::make('title') ->label(__('validation.attributes.title')) ->helperText(__('pages/discussion.min_discussion_length')) ->required() ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, $state, Forms\Set $set): void { + ->afterStateUpdated(function (string $operation, $state, Set $set): void { $set('slug', Str::slug($state)); }) ->minLength(10), - Forms\Components\Hidden::make('slug'), - Forms\Components\Select::make('tags') + Components\Hidden::make('slug'), + Components\Select::make('tags') ->multiple() ->relationship( name: 'tags', titleAttribute: 'name', - modifyQueryUsing: fn ($query) => $query->whereRaw("jsonb_exists(concerns::jsonb, ?)", ['discussion']) + modifyQueryUsing: fn ($query) => $query->whereRaw('jsonb_exists(concerns::jsonb, ?)', ['discussion']) ) ->required() ->minItems(1) ->maxItems(3) ->preload(), - Forms\Components\ToggleButtons::make('locale') + Components\ToggleButtons::make('locale') ->label(__('validation.attributes.locale')) ->options(['en' => 'En', 'fr' => 'Fr']) ->helperText(__('global.locale_help')) ->grouped(), - Forms\Components\MarkdownEditor::make('body') + Components\MarkdownEditor::make('body') ->toolbarButtons([ 'blockquote', 'bold', @@ -88,8 +93,9 @@ public function form(Form $form): Form ->maxHeight('18.25rem') ->required() ->minLength(20), - Forms\Components\Placeholder::make('') - ->content(fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' + TextEntry::make('placeholder') + ->hiddenLabel() + ->state(fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' Blade))), ]) diff --git a/app/Livewire/Components/Slideovers/ThreadForm.php b/app/Livewire/Components/Slideovers/ThreadForm.php index 3fae788d..686828a6 100644 --- a/app/Livewire/Components/Slideovers/ThreadForm.php +++ b/app/Livewire/Components/Slideovers/ThreadForm.php @@ -9,11 +9,15 @@ use App\Exceptions\UnverifiedUserException; use App\Livewire\Traits\WithAuthenticatedUser; use App\Models\Thread; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; +use Filament\Infolists\Components\TextEntry; use Filament\Notifications\Notification; +use Filament\Schemas\Components\Utilities\Set; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Blade; @@ -22,10 +26,11 @@ use Laravelcm\LivewireSlideOvers\SlideOverComponent; /** - * @property Form $form + * @property \Filament\Schemas\Schema $form */ -final class ThreadForm extends SlideOverComponent implements HasForms +final class ThreadForm extends SlideOverComponent implements HasActions, HasForms { + use InteractsWithActions; use InteractsWithForms; use WithAuthenticatedUser; @@ -55,29 +60,29 @@ public static function closePanelOnClickAway(): bool return false; } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Hidden::make('user_id'), - Forms\Components\TextInput::make('title') + return $schema + ->components([ + Components\Hidden::make('user_id'), + Components\TextInput::make('title') ->label(__('validation.attributes.title')) ->helperText(__('pages/forum.min_thread_length')) ->required() ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, $state, Forms\Set $set): void { + ->afterStateUpdated(function (string $operation, $state, Set $set): void { $set('slug', Str::slug($state)); }) ->minLength(10), - Forms\Components\Hidden::make('slug'), - Forms\Components\Select::make('channels') + Components\Hidden::make('slug'), + Components\Select::make('channels') ->multiple() ->relationship(titleAttribute: 'name') ->preload() ->required() ->minItems(1) ->maxItems(3), - Forms\Components\ToggleButtons::make('locale') + Components\ToggleButtons::make('locale') ->label(__('validation.attributes.locale')) ->options([ 'en' => 'En', @@ -85,7 +90,7 @@ public function form(Form $form): Form ]) ->helperText(__('global.locale_help')) ->grouped(), - Forms\Components\MarkdownEditor::make('body') + Components\MarkdownEditor::make('body') ->fileAttachmentsDisk('public') ->toolbarButtons([ 'attachFiles', @@ -98,8 +103,9 @@ public function form(Form $form): Form ->label(__('validation.attributes.content')) ->required() ->minLength(20), - Forms\Components\Placeholder::make('') - ->content(fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' + TextEntry::make('placeholder') + ->hiddenLabel() + ->state(fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' Blade))), ]) diff --git a/app/Livewire/Components/SponsorSubscription.php b/app/Livewire/Components/SponsorSubscription.php index d55b7b70..fa81b18e 100644 --- a/app/Livewire/Components/SponsorSubscription.php +++ b/app/Livewire/Components/SponsorSubscription.php @@ -8,11 +8,17 @@ use App\Enums\TransactionType; use App\Models\Transaction; use App\Models\User; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; +use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; use Filament\Notifications\Notification; +use Filament\Schemas\Components\Group; +use Filament\Schemas\Components\Utilities\Get; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Cache; @@ -23,10 +29,11 @@ use NotchPay\Payment; /** - * @property-read Form $form + * @property-read \Filament\Schemas\Schema $form */ -final class SponsorSubscription extends Component implements HasForms +final class SponsorSubscription extends Component implements HasActions, HasForms { + use InteractsWithActions; use InteractsWithForms; public ?array $data = []; @@ -44,19 +51,19 @@ public function mount(): void ]); } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('name') + return $schema + ->components([ + TextInput::make('name') ->label(__('validation.attributes.name')) ->minLength(5) ->required(), - Forms\Components\TextInput::make('email') + TextInput::make('email') ->label(__('validation.attributes.email')) ->email() ->required(), - Forms\Components\ToggleButtons::make('profile') + ToggleButtons::make('profile') ->label(__('pages/sponsoring.sponsor_form.profile')) ->options([ 'developer' => __('validation.attributes.freelance'), @@ -67,13 +74,13 @@ public function form(Form $form): Form 'company' => 'phosphor-buildings-duotone', ]) ->grouped(), - Forms\Components\TextInput::make('website') + TextInput::make('website') ->label(__('global.website')) ->prefixIcon('heroicon-m-globe-alt') ->url(), - Forms\Components\Group::make() + Group::make() ->schema([ - Forms\Components\Select::make('currency') + Select::make('currency') ->label(__('validation.attributes.currency')) ->live() ->native() @@ -82,16 +89,16 @@ public function form(Form $form): Form 'eur' => 'EUR', 'usd' => 'USD', ]), - Forms\Components\TextInput::make('amount') + TextInput::make('amount') ->label(__('validation.attributes.amount')) ->integer() ->required() ->afterStateUpdated(fn (?int $state): float|int => filled($state) ? abs($state) : 0) // @phpstan-ignore-line - ->prefix(fn (Forms\Get $get): ?string => match ($get('currency')) { + ->prefix(fn (Get $get): ?string => match ($get('currency')) { 'usd' => '$', default => null }) - ->suffix(fn (Forms\Get $get): ?string => match ($get('currency')) { + ->suffix(fn (Get $get): ?string => match ($get('currency')) { 'eur' => '€', 'xaf' => 'FCFA', default => null, diff --git a/app/Livewire/Components/User/Activities.php b/app/Livewire/Components/User/Activities.php index ee683fa8..c23eedec 100644 --- a/app/Livewire/Components/User/Activities.php +++ b/app/Livewire/Components/User/Activities.php @@ -20,7 +20,7 @@ final class Activities extends Component public function activities(): Collection { return Cache::remember( - key: 'activities.'.$this->user->id, + key: 'user.'.$this->user->id.'.activities', ttl: now()->addDays(3), callback: fn (): Collection => Activity::latestFeed($this->user) ); diff --git a/app/Livewire/Components/User/Password.php b/app/Livewire/Components/User/Password.php index 82d3ddfe..d437490d 100644 --- a/app/Livewire/Components/User/Password.php +++ b/app/Livewire/Components/User/Password.php @@ -4,11 +4,13 @@ namespace App\Livewire\Components\User; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components\TextInput; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; use Filament\Notifications\Notification; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; @@ -16,10 +18,11 @@ use Livewire\Component; /** - * @property Form $form + * @property \Filament\Schemas\Schema $form */ -final class Password extends Component implements HasForms +final class Password extends Component implements HasActions, HasForms { + use InteractsWithActions; use InteractsWithForms; public ?array $data = []; @@ -29,17 +32,17 @@ public function mount(): void $this->form->fill(); } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\TextInput::make('current_password') + return $schema + ->components([ + TextInput::make('current_password') ->label(__('validation.attributes.current_password')) ->password() ->currentPassword() ->required() ->visible(fn (): bool => Auth::user()?->hasPassword() ?? false), - Forms\Components\TextInput::make('password') + TextInput::make('password') ->label(__('validation.attributes.password')) ->helperText(__('pages/account.settings.password_helpText')) ->password() @@ -54,7 +57,7 @@ public function form(Form $form): Form ->uncompromised(), ]) ->confirmed(), - Forms\Components\TextInput::make('password_confirmation') + TextInput::make('password_confirmation') ->label(__('validation.attributes.password_confirmation')) ->password() ->revealable() diff --git a/app/Livewire/Components/User/Preferences.php b/app/Livewire/Components/User/Preferences.php index 8a7a6f63..c5d9dd67 100644 --- a/app/Livewire/Components/User/Preferences.php +++ b/app/Livewire/Components/User/Preferences.php @@ -5,22 +5,26 @@ namespace App\Livewire\Components\User; use App\Models\User; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\ToggleButtons; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; use Filament\Notifications\Notification; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Auth; use Livewire\Attributes\Computed; use Livewire\Component; /** - * @property Form $form + * @property \Filament\Schemas\Schema $form * @property User $user */ -final class Preferences extends Component implements HasForms +final class Preferences extends Component implements HasActions, HasForms { + use InteractsWithActions; use InteractsWithForms; public ?array $data = []; @@ -39,11 +43,11 @@ public function user(): User return Auth::user(); // @phpstan-ignore-line } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\ToggleButtons::make('theme') + return $schema + ->components([ + ToggleButtons::make('theme') ->label('Theme') ->options([ 'light' => 'Light', @@ -54,7 +58,7 @@ public function form(Form $form): Form 'dark' => 'phosphor-moon-duotone', ]) ->grouped(), - Forms\Components\Select::make('locale') + Select::make('locale') ->label(__('global.language')) ->options([ 'fr' => __('global.french'), diff --git a/app/Livewire/Components/User/Profile.php b/app/Livewire/Components/User/Profile.php index 83e27b54..dab55205 100644 --- a/app/Livewire/Components/User/Profile.php +++ b/app/Livewire/Components/User/Profile.php @@ -7,11 +7,17 @@ use App\Actions\User\UpdateUserProfileAction; use App\Models\User; use App\Traits\FormatSocialAccount; -use Filament\Forms; +use Filament\Actions\Concerns\InteractsWithActions; +use Filament\Actions\Contracts\HasActions; +use Filament\Forms\Components\SpatieMediaLibraryFileUpload; +use Filament\Forms\Components\Textarea; +use Filament\Forms\Components\TextInput; use Filament\Forms\Concerns\InteractsWithForms; use Filament\Forms\Contracts\HasForms; -use Filament\Forms\Form; use Filament\Notifications\Notification; +use Filament\Schemas\Components\Section; +use Filament\Schemas\Components\Utilities\Set; +use Filament\Schemas\Schema; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Blade; use Illuminate\Support\HtmlString; @@ -19,12 +25,13 @@ use Ysfkaya\FilamentPhoneInput\Forms\PhoneInput; /** - * @property Form $form + * @property \Filament\Schemas\Schema $form * @property User $user */ -final class Profile extends Component implements HasForms +final class Profile extends Component implements HasActions, HasForms { use FormatSocialAccount; + use InteractsWithActions; use InteractsWithForms; public ?array $data = []; @@ -40,49 +47,49 @@ public function mount(): void $this->currentUserEmail = $this->user->email; } - public function form(Form $form): Form + public function form(Schema $schema): Schema { - return $form - ->schema([ - Forms\Components\Section::make(__('pages/account.settings.profile_title')) + return $schema + ->components([ + Section::make(__('pages/account.settings.profile_title')) ->description(__('pages/account.settings.profile_description')) ->aside() ->schema([ - Forms\Components\SpatieMediaLibraryFileUpload::make('avatar') + SpatieMediaLibraryFileUpload::make('avatar') ->label(__('validation.attributes.avatar')) ->collection('avatar') ->helperText(__('pages/account.settings.avatar_description')) ->image() ->avatar() ->maxSize(1024), - Forms\Components\TextInput::make('username') + TextInput::make('username') ->label(__('validation.attributes.username')) ->prefix('laravel.cm/user/@') ->required() ->unique(ignoreRecord: true) ->maxLength(30) ->rules(['lowercase', 'alpha_dash']), - Forms\Components\Textarea::make('bio') + Textarea::make('bio') ->label(__('validation.attributes.bio')) ->hint(__('global.characters', ['number' => 160])) ->maxLength(160) ->afterStateUpdated(fn (?string $state): string => trim(strip_tags((string) $state))) ->helperText(__('pages/account.settings.bio_description')), - Forms\Components\TextInput::make('website') + TextInput::make('website') ->label(__('validation.attributes.website')) ->prefixIcon('untitledui-globe') ->placeholder('https://laravel.cm') ->url(), ]), - Forms\Components\Section::make(__('pages/account.settings.personal_information_title')) + Section::make(__('pages/account.settings.personal_information_title')) ->description(__('pages/account.settings.personal_information_description')) ->aside() ->schema([ - Forms\Components\TextInput::make('name') + TextInput::make('name') ->label(__('validation.attributes.last_name')) ->required(), - Forms\Components\TextInput::make('email') + TextInput::make('email') ->label(__('validation.attributes.email')) ->suffixIcon(fn (): string => $this->user->hasVerifiedEmail() ? 'heroicon-m-check-circle' : 'heroicon-m-exclamation-triangle') ->suffixIconColor(fn (): string => $this->user->hasVerifiedEmail() ? 'success' : 'warning') @@ -90,22 +97,22 @@ public function form(Form $form): Form ->email() ->unique(ignoreRecord: true) ->required(), - Forms\Components\TextInput::make('location') + TextInput::make('location') ->label(__('validation.attributes.location')), PhoneInput::make('phone_number') ->label(__('validation.attributes.phone')), ]), - Forms\Components\Section::make(__('pages/account.settings.social_network_title')) + Section::make(__('pages/account.settings.social_network_title')) ->description(__('pages/account.settings.social_network_description')) ->aside() ->schema([ - Forms\Components\TextInput::make('github_profile') + TextInput::make('github_profile') ->label(__('GitHub')) ->placeholder('laravelcm') ->unique(ignoreRecord: true) ->maxLength(255) - ->afterStateUpdated(fn (Forms\Set $set, ?string $state): mixed => $set('github_profile', $this->formatGithubHandle($state))) + ->afterStateUpdated(fn (Set $set, ?string $state): mixed => $set('github_profile', $this->formatGithubHandle($state))) ->prefix( fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' Blade)) ), - Forms\Components\TextInput::make('twitter_profile') + TextInput::make('twitter_profile') ->label(__('Twitter')) ->helperText(__('pages/account.settings.twitter_helper_text')) ->unique(ignoreRecord: true) ->maxLength(255) - ->afterStateUpdated(fn (Forms\Set $set, ?string $state): mixed => $set('twitter_profile', $this->formatTwitterHandle($state))) + ->afterStateUpdated(fn (Set $set, ?string $state): mixed => $set('twitter_profile', $this->formatTwitterHandle($state))) ->prefix( fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' Blade)) ), - Forms\Components\TextInput::make('linkedin_profile') + TextInput::make('linkedin_profile') ->label(__('LinkedIn')) ->placeholder('laravelcm') ->unique(ignoreRecord: true) ->maxLength(255) - ->afterStateUpdated(fn (Forms\Set $set, ?string $state): mixed => $set('linkedin_profile', $this->formatLinkedinHandle($state))) + ->afterStateUpdated(fn (Set $set, ?string $state): mixed => $set('linkedin_profile', $this->formatLinkedinHandle($state))) ->prefix( fn (): HtmlString => new HtmlString(Blade::render(<<<'Blade' $tags + * @property Collection $tags */ #[ObservedBy(ArticleObserver::class)] final class Article extends Model implements HasMedia, ReactableInterface, Sitemapable, Viewable diff --git a/app/Models/Channel.php b/app/Models/Channel.php index afb44073..aad1dbfb 100644 --- a/app/Models/Channel.php +++ b/app/Models/Channel.php @@ -12,6 +12,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\Pivot; +use Illuminate\Support\Collection; use Spatie\Translatable\HasTranslations; /** @@ -22,8 +23,8 @@ * @property-read string $color * @property-read int|null $parent_id * @property-read Channel|null $parent - * @property-read \Illuminate\Support\Collection $items - * @property-read \Illuminate\Support\Collection $threads + * @property-read Collection $items + * @property-read Collection $threads */ final class Channel extends Model { diff --git a/app/Models/Discussion.php b/app/Models/Discussion.php index f43763f9..ef69fceb 100644 --- a/app/Models/Discussion.php +++ b/app/Models/Discussion.php @@ -23,6 +23,7 @@ use CyrildeWit\EloquentViewable\InteractsWithViews; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Collection; use Illuminate\Support\Str; use Spatie\Sitemap\Contracts\Sitemapable; use Spatie\Sitemap\Tags\Url; @@ -40,10 +41,10 @@ * @property-read User $user * @property-read \Illuminate\Support\Carbon $created_at * @property-read \Illuminate\Support\Carbon $updated_at - * @property-read \Illuminate\Support\Collection $spamReports - * @property-read \Illuminate\Support\Collection $replies - * @property-read \Illuminate\Support\Collection $tags - * @property-read \Illuminate\Support\Collection $reactions + * @property-read Collection $spamReports + * @property-read Collection $replies + * @property-read Collection $tags + * @property-read Collection $reactions */ final class Discussion extends Model implements ReactableInterface, ReplyInterface, Sitemapable, SpamReportableContract, SubscribeInterface, Viewable { diff --git a/app/Models/Reply.php b/app/Models/Reply.php index 8aaa3dd5..4159aedb 100644 --- a/app/Models/Reply.php +++ b/app/Models/Reply.php @@ -77,7 +77,7 @@ public function mentionedUsers(): array return $matches[1]; } - public function to(ReplyInterface $replyable): void + public function to(ReplyInterface|Model $replyable): void { $this->replyAble()->associate($replyable); // @phpstan-ignore-line } @@ -86,9 +86,9 @@ public function to(ReplyInterface $replyable): void * @param Builder $query */ #[Scope] - protected function isSolution(Builder $query): void + protected function isSolution(Builder $query): Builder { - $query->has('solutionTo'); + return $query->has('solutionTo'); } public function delete(): bool diff --git a/app/Models/Tag.php b/app/Models/Tag.php index b78b4f48..26030b08 100644 --- a/app/Models/Tag.php +++ b/app/Models/Tag.php @@ -7,7 +7,9 @@ use App\Models\Traits\HasSlug; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\MorphPivot; use Illuminate\Database\Eloquent\Relations\MorphToMany; +use Illuminate\Support\Collection; /** * @property-read int $id @@ -15,7 +17,7 @@ * @property-read string $slug * @property-read string|null $description * @property-read array $concerns - * @property-read \Illuminate\Support\Collection $articles + * @property-read Collection $articles */ final class Tag extends Model { @@ -34,7 +36,7 @@ protected function casts(): array } /** - * @return MorphToMany + * @return MorphToMany */ public function articles(): MorphToMany { diff --git a/app/Models/Thread.php b/app/Models/Thread.php index c65426d6..60c77b3c 100644 --- a/app/Models/Thread.php +++ b/app/Models/Thread.php @@ -21,6 +21,7 @@ use Carbon\Carbon; use CyrildeWit\EloquentViewable\Contracts\Viewable; use CyrildeWit\EloquentViewable\InteractsWithViews; +use Database\Factories\ThreadFactory; use Exception; use Illuminate\Database\Eloquent\Attributes\Scope; use Illuminate\Database\Eloquent\Builder; @@ -59,6 +60,8 @@ final class Thread extends Model implements Feedable, ReactableInterface, ReplyInterface, SpamReportableContract, SubscribeInterface, Viewable { use HasAuthor; + + /** @use HasFactory */ use HasFactory; use HasLocaleScope; use HasReplies; @@ -70,7 +73,7 @@ final class Thread extends Model implements Feedable, ReactableInterface, ReplyI use Reactable; use RecordsActivity; - public const FEED_PAGE_SIZE = 20; + public const int FEED_PAGE_SIZE = 20; protected $guarded = []; diff --git a/app/Models/User.php b/app/Models/User.php index 05adb35e..4f43f091 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -27,6 +27,7 @@ use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; +use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Auth; use Laravel\Socialite\Contracts\User as SocialUser; use Laravelcm\Gamify\Traits\Gamify; @@ -51,12 +52,12 @@ * @property-read string|null $website * @property-read string|null $banned_reason * @property-read array|null $settings - * @property-read \Illuminate\Support\Carbon|null $email_verified_at - * @property-read \Illuminate\Support\Carbon|null $last_login_at - * @property-read \Illuminate\Support\Carbon|null $banned_at - * @property-read \Illuminate\Support\Carbon $created_at - * @property-read \Illuminate\Support\Carbon $updated_at - * @property-read \Illuminate\Support\Carbon|null $last_active_at + * @property-read Carbon|null $email_verified_at + * @property-read Carbon|null $last_login_at + * @property-read Carbon|null $banned_at + * @property-read Carbon $created_at + * @property-read Carbon $updated_at + * @property-read Carbon|null $last_active_at * @property-read \Illuminate\Support\Collection $activities * @property-read \Illuminate\Support\Collection $articles * @property-read \Illuminate\Support\Collection $threads @@ -68,10 +69,10 @@ #[ObservedBy(UserObserver::class)] final class User extends Authenticatable implements FilamentUser, HasAvatar, HasCachedMediaInterface, HasMedia, HasName, MustVerifyEmail { + use Gamify; + /** @use HasFactory */ use HasFactory; - - use Gamify; use HasPlanSubscriptions; use HasProfilePhoto; use HasRoles; diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index dbddac59..36820b0f 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -13,12 +13,13 @@ use App\View\Composers\InactiveDiscussionsComposer; use App\View\Composers\ProfileUsersComposer; use App\View\Composers\TopContributorsComposer; +use ArchTech\SEO\SEOManager; use Carbon\Carbon; +use Filament\Actions; use Filament\Support\Colors\Color; -use Filament\Support\Enums\MaxWidth; +use Filament\Support\Enums\Width; use Filament\Support\Facades\FilamentColor; use Filament\Support\Facades\FilamentIcon; -use Filament\Tables; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\DB; @@ -86,7 +87,6 @@ protected function configureEloquent(): void protected function configureFilament(): void { FilamentColor::register([ - 'primary' => Color::Emerald, 'danger' => Color::Red, 'info' => Color::Blue, 'success' => Color::Green, @@ -99,17 +99,21 @@ protected function configureFilament(): void 'actions::edit-action' => 'untitledui-edit-03', ]); - Tables\Actions\CreateAction::configureUsing( - fn (Tables\Actions\Action $action): Tables\Actions\Action => $action->iconButton() - ->modalWidth(MaxWidth::ExtraLarge) + Actions\CreateAction::configureUsing( + fn (Actions\Action $action): Actions\Action => $action->iconButton() + ->modalWidth(Width::ExtraLarge) ->slideOver() ); - Tables\Actions\EditAction::configureUsing( - fn (Tables\Actions\Action $action): Tables\Actions\Action => $action->iconButton() - ->modalWidth(MaxWidth::ExtraLarge) + Actions\EditAction::configureUsing( + fn (Actions\Action $action): Actions\Action => $action->iconButton() + ->modalWidth(Width::ExtraLarge) ->slideOver() ); + + Actions\DeleteAction::configureUsing( + fn (Actions\Action $action): Actions\Action => $action->iconButton() + ); } protected function registerLocaleDate(): void @@ -123,8 +127,10 @@ protected function registerLocaleDate(): void protected function configureSeo(): void { - // @phpstan-ignore-next-line - seo() + /** @var SEOManager $seoManager */ + $seoManager = seo(); + + $seoManager ->title( default: __('pages/home.title'), modify: fn (string $title): string => $title.' | '.__('global.site_name') diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index e59fe0af..7684c28a 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -7,10 +7,9 @@ use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; -use Filament\Pages; +use Filament\Pages\Dashboard; use Filament\Panel; use Filament\PanelProvider; -use Filament\SpatieLaravelTranslatablePlugin; use Illuminate\Contracts\View\View; use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse; use Illuminate\Cookie\Middleware\EncryptCookies; @@ -19,8 +18,7 @@ use Illuminate\Session\Middleware\AuthenticateSession; use Illuminate\Session\Middleware\StartSession; use Illuminate\View\Middleware\ShareErrorsFromSession; -use Vormkracht10\FilamentMails\Facades\FilamentMails; -use Vormkracht10\FilamentMails\FilamentMailsPlugin; +use LaraZeus\SpatieTranslatable\SpatieTranslatablePlugin; final class AdminPanelProvider extends PanelProvider { @@ -39,22 +37,19 @@ public function panel(Panel $panel): Panel ->viteTheme('resources/css/filament/admin/theme.css') ->brandLogo(fn (): View => view('filament.brand')) ->favicon(asset('images/favicons/favicon-32x32.png')) - ->spa() + ->spa(hasPrefetching: true) ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources') ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages') ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets') ->pages([ - Pages\Dashboard::class, + Dashboard::class, ]) ->widgets([ // ]) ->plugins([ - SpatieLaravelTranslatablePlugin::make() - ->defaultLocales(['fr', 'en']), - FilamentMailsPlugin::make(), + SpatieTranslatablePlugin::make()->defaultLocales(['fr', 'en']), ]) - ->routes(fn () => FilamentMails::routes()) ->middleware([ EncryptCookies::class, AddQueuedCookiesToResponse::class, diff --git a/app/Services/CacheInvalidationService.php b/app/Services/CacheInvalidationService.php index 89f875dd..6e201aac 100644 --- a/app/Services/CacheInvalidationService.php +++ b/app/Services/CacheInvalidationService.php @@ -38,6 +38,7 @@ namespace App\Services; +use Exception; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Redis; @@ -64,7 +65,7 @@ private function invalidateRedisPattern(string $pattern): void if (! empty($keys)) { Redis::connection($connection)->del($keys); } - } catch (\Exception $e) { + } catch (Exception $e) { $this->invalidateFallbackPattern(); } } diff --git a/app/Traits/HasCachedMedia.php b/app/Traits/HasCachedMedia.php index 986c5baf..680d5cff 100644 --- a/app/Traits/HasCachedMedia.php +++ b/app/Traits/HasCachedMedia.php @@ -5,6 +5,7 @@ namespace App\Traits; use App\Services\MediaCacheService; +use DateTimeInterface; trait HasCachedMedia { @@ -18,7 +19,7 @@ public function getCacheKey(string $collection): string ); } - public function getCacheTtl(): \DateTimeInterface + public function getCacheTtl(): DateTimeInterface { return now()->addYear(); } diff --git a/app/Traits/HasSubscribers.php b/app/Traits/HasSubscribers.php index 5f93e959..bea006ac 100644 --- a/app/Traits/HasSubscribers.php +++ b/app/Traits/HasSubscribers.php @@ -7,9 +7,10 @@ use App\Models\Subscribe; use App\Models\User; use Illuminate\Database\Eloquent\Relations\MorphMany; +use Illuminate\Support\Collection; /** - * @property-read \Illuminate\Support\Collection $subscribes + * @property-read Collection $subscribes */ trait HasSubscribers { diff --git a/app/Traits/Reactable.php b/app/Traits/Reactable.php index a04b4621..629b3723 100644 --- a/app/Traits/Reactable.php +++ b/app/Traits/Reactable.php @@ -7,6 +7,7 @@ use App\Models\Reaction; use App\Models\User; use Illuminate\Database\Eloquent\Collection; +use Illuminate\Database\Eloquent\Relations\MorphPivot; use Illuminate\Database\Eloquent\Relations\MorphToMany; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; @@ -42,7 +43,7 @@ public function reacted(?User $responder = null): bool } /** - * @return MorphToMany + * @return MorphToMany */ public function reactions(): MorphToMany { diff --git a/app/Traits/RecordsActivity.php b/app/Traits/RecordsActivity.php index 4eaa9edd..755ed390 100644 --- a/app/Traits/RecordsActivity.php +++ b/app/Traits/RecordsActivity.php @@ -50,7 +50,7 @@ protected function recordActivity(string $event, bool $useDefaultEvent = true, a protected function getActivityType(string $event): string { - $type = mb_strtolower((new ReflectionClass($this))->getShortName()); + $type = mb_strtolower(new ReflectionClass($this)->getShortName()); return "{$event}_{$type}"; } diff --git a/app/Traits/UserResponse.php b/app/Traits/UserResponse.php index e075c99f..2748f2ee 100644 --- a/app/Traits/UserResponse.php +++ b/app/Traits/UserResponse.php @@ -7,6 +7,7 @@ use App\Http\Resources\AuthenticateUserResource; use App\Http\Resources\EnterpriseResource; use App\Models\User; +use Illuminate\Support\Collection; /** * @phpstan-ignore trait.unused @@ -14,13 +15,7 @@ trait UserResponse { /** - * @return array{ - * user: AuthenticateUserResource, - * token: string, - * roles: \Illuminate\Support\Collection, - * permissions: \Illuminate\Support\Collection, - * enterprise: EnterpriseResource|null - * } + * @return array{user: AuthenticateUserResource, token: string, roles: Collection, permissions: Collection, enterprise: EnterpriseResource|null} */ public function userMetaData(User $user): array { diff --git a/app/helpers.php b/app/helpers.php index b84b125e..b8c2dd2c 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -2,6 +2,8 @@ declare(strict_types=1); +use App\Models\Discussion; +use App\Models\Thread; use Carbon\Carbon; use GrahamCampbell\Markdown\Facades\Markdown; use Illuminate\Support\Facades\Auth; @@ -83,11 +85,11 @@ function getFilter(string $key, array $filters = [], string $default = 'recent') /** * Returns the route for the replyAble. * - * @param App\Models\Thread|App\Models\Discussion $replyAble + * @param Thread|Discussion $replyAble */ function route_to_reply_able(mixed $replyAble): string { - $routeName = $replyAble instanceof \App\Models\Thread ? 'forum.show' : 'discussions.show'; + $routeName = $replyAble instanceof Thread ? 'forum.show' : 'discussions.show'; return route($routeName, $replyAble->slug); } diff --git a/composer.json b/composer.json index 8f7704e5..01438ac7 100644 --- a/composer.json +++ b/composer.json @@ -14,18 +14,18 @@ "ext-fileinfo": "*", "ext-json": "*", "archtechx/laravel-seo": "^0.10", - "awcodes/filament-badgeable-column": "^2.3", + "awcodes/filament-badgeable-column": "^3.0", "codeat3/blade-phosphor-icons": "^2.0", "cyrildewit/eloquent-viewable": "^7.0", "doctrine/dbal": "^4.2.1", - "filament/filament": "^3.3", - "filament/spatie-laravel-media-library-plugin": "^3.3", - "filament/spatie-laravel-translatable-plugin": "^3.3", + "filament/filament": "^4.0", + "filament/spatie-laravel-media-library-plugin": "^4.0", "gehrisandro/tailwind-merge-laravel": "^1.3", "graham-campbell/markdown": "^16.0", "guzzlehttp/guzzle": "^7.7.0", "internachi/modular": "^2.3", "jenssegers/agent": "^2.6.4", + "lara-zeus/spatie-translatable": "^1.0", "laravel-notification-channels/telegram": "^6.0", "laravel-notification-channels/twitter": "^8.1", "laravel/framework": "^12.0", @@ -49,16 +49,17 @@ "spatie/laravel-sitemap": "^7.3", "stevebauman/location": "^7.4.0", "torchlight/torchlight-laravel": "^0.6", - "vormkracht10/filament-mails": "^2.0", + "vormkracht10/filament-mails": "^3.0", "wire-elements/modal": "^2.0", "wire-elements/spotlight": "^2.0", "yarri/link-finder": "^2.7.10", - "ysfkaya/filament-phone-input": "^3.1" + "ysfkaya/filament-phone-input": "^4.0" }, "require-dev": { "barryvdh/laravel-debugbar": "^3.14", "driftingly/rector-laravel": "^2.0", "fakerphp/faker": "^1.23.0", + "filament/upgrade": "^4.0", "larastan/larastan": "^3.0", "laravel/boost": "^1.1", "laravel/breeze": "^2.0", @@ -132,8 +133,6 @@ "php-http/discovery": false } }, - "prefer-stable": true, - "minimum-stability": "dev", "repositories": [ { "type": "path", @@ -142,5 +141,7 @@ "symlink": true } } - ] + ], + "prefer-stable": true, + "minimum-stability": "stable" } diff --git a/composer.lock b/composer.lock index 9ff42f13..18d72e2b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "385c5568979dfa8b9579bf223bf15492", + "content-hash": "e6a46905189ec7d3b819e5548e20989d", "packages": [ { "name": "abraham/twitteroauth", @@ -194,38 +194,43 @@ }, { "name": "awcodes/filament-badgeable-column", - "version": "v2.3.3", + "version": "v3.0.1", "source": { "type": "git", "url": "https://github.com/awcodes/filament-badgeable-column.git", - "reference": "cd063e35670ed1f7303ed2be9a86afd66d45e5e7" + "reference": "c2c9d1c38f6059f38b4d0f756fbfacd4865afb2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awcodes/filament-badgeable-column/zipball/cd063e35670ed1f7303ed2be9a86afd66d45e5e7", - "reference": "cd063e35670ed1f7303ed2be9a86afd66d45e5e7", + "url": "https://api.github.com/repos/awcodes/filament-badgeable-column/zipball/c2c9d1c38f6059f38b4d0f756fbfacd4865afb2f", + "reference": "c2c9d1c38f6059f38b4d0f756fbfacd4865afb2f", "shasum": "" }, "require": { - "filament/filament": "^3.0", - "php": "^8.1", + "filament/filament": "^4.0", + "php": "^8.2", "spatie/laravel-package-tools": "^1.15" }, "require-dev": { "laravel/pint": "^1.0", + "orchestra/testbench": "^9.0|^10.0", + "pestphp/pest": "^3.7", + "pestphp/pest-plugin-laravel": "^3.0", + "pestphp/pest-plugin-livewire": "^3.0", + "rector/rector": "^2.0", "spatie/laravel-ray": "^1.26" }, "type": "library", "extra": { "laravel": { "providers": [ - "Awcodes\\FilamentBadgeableColumn\\BadgeableColumnServiceProvider" + "Awcodes\\BadgeableColumn\\BadgeableColumnServiceProvider" ] } }, "autoload": { "psr-4": { - "Awcodes\\FilamentBadgeableColumn\\": "src" + "Awcodes\\BadgeableColumn\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -240,17 +245,17 @@ } ], "description": "Filament Tables column to append and prepend badges.", - "homepage": "https://github.com/awcodes/badger", + "homepage": "https://github.com/awcodes/filament-badgeable-column", "keywords": [ "awcodes", - "badger", + "badgeable-column", "filament", - "filament-badgeable-column", - "laravel" + "laravel", + "plugin" ], "support": { "issues": "https://github.com/awcodes/filament-badgeable-column/issues", - "source": "https://github.com/awcodes/filament-badgeable-column/tree/v2.3.3" + "source": "https://github.com/awcodes/filament-badgeable-column/tree/v3.0.1" }, "funding": [ { @@ -258,7 +263,7 @@ "type": "github" } ], - "time": "2025-05-12T00:33:53+00:00" + "time": "2025-11-17T18:33:17+00:00" }, { "name": "aws/aws-crt-php", @@ -316,16 +321,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.356.23", + "version": "3.363.3", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "e9253cf6073f06080a7458af54e18fc474f0c864" + "reference": "0ec2218d32e291b988b1602583032ca5d11f8e8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/e9253cf6073f06080a7458af54e18fc474f0c864", - "reference": "e9253cf6073f06080a7458af54e18fc474f0c864", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/0ec2218d32e291b988b1602583032ca5d11f8e8d", + "reference": "0ec2218d32e291b988b1602583032ca5d11f8e8d", "shasum": "" }, "require": { @@ -407,9 +412,88 @@ "support": { "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.356.23" + "source": "https://github.com/aws/aws-sdk-php/tree/3.363.3" + }, + "time": "2025-11-26T19:05:22+00:00" + }, + { + "name": "backstage/laravel-mails", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/backstagephp/laravel-mails.git", + "reference": "b590728f2295be781ea19abd0275783d1598ca5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/backstagephp/laravel-mails/zipball/b590728f2295be781ea19abd0275783d1598ca5c", + "reference": "b590728f2295be781ea19abd0275783d1598ca5c", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0 || ^11.0 || ^12.0", + "laravel/helpers": "^1.7.0", + "php": "^8.2", + "spatie/laravel-package-tools": "^1.15.0" + }, + "require-dev": { + "larastan/larastan": "^3.0", + "laravel-notification-channels/discord": "^1.6", + "laravel-notification-channels/telegram": "^4.0 || ^5.0 || ^6.0", + "laravel/pint": "^1.17.0", + "laravel/slack-notification-channel": "^2.5 || ^3.3.2", + "nunomaduro/collision": "^7.5.0|^8.4", + "orchestra/testbench": "^8.5.0|^9.4.0", + "pestphp/pest": "^3.0", + "pestphp/pest-plugin-laravel": "^3.0", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Backstage\\Mails\\MailsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Backstage\\Mails\\": "src", + "Backstage\\Mails\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark van Eijk", + "email": "mark@vormkracht10.nl", + "role": "Developer" + } + ], + "description": "Laravel Mails can collect everything you might want to track about the mails that has been sent by your Laravel app.", + "homepage": "https://github.com/backstagephp/laravel-mails", + "keywords": [ + "backstagephp", + "laravel", + "laravel-mails" + ], + "support": { + "issues": "https://github.com/backstagephp/laravel-mails/issues", + "source": "https://github.com/backstagephp/laravel-mails/tree/v2.1.0" }, - "time": "2025-09-22T18:10:31+00:00" + "funding": [ + { + "url": "https://github.com/vormkracht10", + "type": "github" + } + ], + "time": "2025-07-22T08:08:52+00:00" }, { "name": "blade-ui-kit/blade-heroicons", @@ -563,16 +647,16 @@ }, { "name": "brick/math", - "version": "0.14.0", + "version": "0.14.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2" + "reference": "f05858549e5f9d7bb45875a75583240a38a281d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", - "reference": "113a8ee2656b882d4c3164fa31aa6e12cbb7aaa2", + "url": "https://api.github.com/repos/brick/math/zipball/f05858549e5f9d7bb45875a75583240a38a281d0", + "reference": "f05858549e5f9d7bb45875a75583240a38a281d0", "shasum": "" }, "require": { @@ -611,7 +695,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.14.0" + "source": "https://github.com/brick/math/tree/0.14.1" }, "funding": [ { @@ -619,7 +703,7 @@ "type": "github" } ], - "time": "2025-08-29T12:40:03+00:00" + "time": "2025-11-24T14:40:29+00:00" }, { "name": "carbonphp/carbon-doctrine-types", @@ -690,6 +774,165 @@ ], "time": "2024-02-09T16:56:22+00:00" }, + { + "name": "chillerlan/php-qrcode", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-qrcode.git", + "reference": "7b66282572fc14075c0507d74d9837dab25b38d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/7b66282572fc14075c0507d74d9837dab25b38d6", + "reference": "7b66282572fc14075c0507d74d9837dab25b38d6", + "shasum": "" + }, + "require": { + "chillerlan/php-settings-container": "^2.1.6 || ^3.2.1", + "ext-mbstring": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "chillerlan/php-authenticator": "^4.3.1 || ^5.2.1", + "ext-fileinfo": "*", + "phan/phan": "^5.5.2", + "phpcompatibility/php-compatibility": "10.x-dev", + "phpmd/phpmd": "^2.15", + "phpunit/phpunit": "^9.6", + "setasign/fpdf": "^1.8.2", + "slevomat/coding-standard": "^8.23.0", + "squizlabs/php_codesniffer": "^4.0.0" + }, + "suggest": { + "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", + "setasign/fpdf": "Required to use the QR FPDF output.", + "simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code" + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\QRCode\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT", + "Apache-2.0" + ], + "authors": [ + { + "name": "Kazuhiko Arase", + "homepage": "https://github.com/kazuhikoarase/qrcode-generator" + }, + { + "name": "ZXing Authors", + "homepage": "https://github.com/zxing/zxing" + }, + { + "name": "Ashot Khanamiryan", + "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder" + }, + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + }, + { + "name": "Contributors", + "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors" + } + ], + "description": "A QR Code generator and reader with a user-friendly API. PHP 7.4+", + "homepage": "https://github.com/chillerlan/php-qrcode", + "keywords": [ + "phpqrcode", + "qr", + "qr code", + "qr-reader", + "qrcode", + "qrcode-generator", + "qrcode-reader" + ], + "support": { + "docs": "https://php-qrcode.readthedocs.io", + "issues": "https://github.com/chillerlan/php-qrcode/issues", + "source": "https://github.com/chillerlan/php-qrcode" + }, + "funding": [ + { + "url": "https://ko-fi.com/codemasher", + "type": "Ko-Fi" + } + ], + "time": "2025-11-23T23:51:44+00:00" + }, + { + "name": "chillerlan/php-settings-container", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/chillerlan/php-settings-container.git", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.1" + }, + "require-dev": { + "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "chillerlan\\Settings\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Smiley", + "email": "smiley@chillerlan.net", + "homepage": "https://github.com/codemasher" + } + ], + "description": "A container class for immutable settings objects. Not a DI container.", + "homepage": "https://github.com/chillerlan/php-settings-container", + "keywords": [ + "Settings", + "configuration", + "container", + "helper" + ], + "support": { + "issues": "https://github.com/chillerlan/php-settings-container/issues", + "source": "https://github.com/chillerlan/php-settings-container" + }, + "funding": [ + { + "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4", + "type": "custom" + }, + { + "url": "https://ko-fi.com/codemasher", + "type": "ko_fi" + } + ], + "time": "2024-07-16T11:13:48+00:00" + }, { "name": "codeat3/blade-phosphor-icons", "version": "2.3.0", @@ -763,16 +1006,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.5.8", + "version": "1.5.9", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "719026bb30813accb68271fee7e39552a58e9f65" + "reference": "1905981ee626e6f852448b7aaa978f8666c5bc54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/719026bb30813accb68271fee7e39552a58e9f65", - "reference": "719026bb30813accb68271fee7e39552a58e9f65", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/1905981ee626e6f852448b7aaa978f8666c5bc54", + "reference": "1905981ee626e6f852448b7aaa978f8666c5bc54", "shasum": "" }, "require": { @@ -819,7 +1062,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.8" + "source": "https://github.com/composer/ca-bundle/tree/1.5.9" }, "funding": [ { @@ -831,26 +1074,26 @@ "type": "github" } ], - "time": "2025-08-20T18:49:47+00:00" + "time": "2025-11-06T11:46:17+00:00" }, { "name": "composer/class-map-generator", - "version": "1.6.2", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "ba9f089655d4cdd64e762a6044f411ccdaec0076" + "reference": "2373419b7709815ed323ebf18c3c72d03ff4a8a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/ba9f089655d4cdd64e762a6044f411ccdaec0076", - "reference": "ba9f089655d4cdd64e762a6044f411ccdaec0076", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/2373419b7709815ed323ebf18c3c72d03ff4a8a6", + "reference": "2373419b7709815ed323ebf18c3c72d03ff4a8a6", "shasum": "" }, "require": { "composer/pcre": "^2.1 || ^3.1", "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7 || ^8" }, "require-dev": { "phpstan/phpstan": "^1.12 || ^2", @@ -858,7 +1101,7 @@ "phpstan/phpstan-phpunit": "^1 || ^2", "phpstan/phpstan-strict-rules": "^1.1 || ^2", "phpunit/phpunit": "^8", - "symfony/filesystem": "^5.4 || ^6" + "symfony/filesystem": "^5.4 || ^6 || ^7 || ^8" }, "type": "library", "extra": { @@ -888,7 +1131,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.6.2" + "source": "https://github.com/composer/class-map-generator/tree/1.7.0" }, "funding": [ { @@ -900,30 +1143,31 @@ "type": "github" } ], - "time": "2025-08-20T18:52:43+00:00" + "time": "2025-11-19T10:41:15+00:00" }, { "name": "composer/composer", - "version": "2.8.12", + "version": "2.9.2", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "3e38919bc9a2c3c026f2151b5e56d04084ce8f0b" + "reference": "8d5358f147c63a3a681b002076deff8c90e0b19d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/3e38919bc9a2c3c026f2151b5e56d04084ce8f0b", - "reference": "3e38919bc9a2c3c026f2151b5e56d04084ce8f0b", + "url": "https://api.github.com/repos/composer/composer/zipball/8d5358f147c63a3a681b002076deff8c90e0b19d", + "reference": "8d5358f147c63a3a681b002076deff8c90e0b19d", "shasum": "" }, "require": { "composer/ca-bundle": "^1.5", "composer/class-map-generator": "^1.4.0", "composer/metadata-minifier": "^1.0", - "composer/pcre": "^2.2 || ^3.2", + "composer/pcre": "^2.3 || ^3.3", "composer/semver": "^3.3", "composer/spdx-licenses": "^1.5.7", "composer/xdebug-handler": "^2.0.2 || ^3.0.3", + "ext-json": "*", "justinrainbow/json-schema": "^6.5.1", "php": "^7.2.5 || ^8.0", "psr/log": "^1.0 || ^2.0 || ^3.0", @@ -931,13 +1175,14 @@ "seld/jsonlint": "^1.4", "seld/phar-utils": "^1.2", "seld/signal-handler": "^2.0", - "symfony/console": "^5.4.47 || ^6.4.25 || ^7.1.10", - "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.1.10", - "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.1.10", + "symfony/console": "^5.4.47 || ^6.4.25 || ^7.1.10 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.1.10 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.1.10 || ^8.0", "symfony/polyfill-php73": "^1.24", "symfony/polyfill-php80": "^1.24", "symfony/polyfill-php81": "^1.24", - "symfony/process": "^5.4.47 || ^6.4.25 || ^7.1.10" + "symfony/polyfill-php84": "^1.30", + "symfony/process": "^5.4.47 || ^6.4.25 || ^7.1.10 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.11.8", @@ -945,12 +1190,13 @@ "phpstan/phpstan-phpunit": "^1.4.0", "phpstan/phpstan-strict-rules": "^1.6.0", "phpstan/phpstan-symfony": "^1.4.0", - "symfony/phpunit-bridge": "^6.4.25 || ^7.3.3" + "symfony/phpunit-bridge": "^6.4.25 || ^7.3.3 || ^8.0" }, "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" + "ext-curl": "Provides HTTP support (will fallback to PHP streams if missing)", + "ext-openssl": "Enables access to repositories and packages over HTTPS", + "ext-zip": "Allows direct extraction of ZIP archives (unzip/7z binaries will be used instead if available)", + "ext-zlib": "Enables gzip for HTTP requests" }, "bin": [ "bin/composer" @@ -963,7 +1209,7 @@ ] }, "branch-alias": { - "dev-main": "2.8-dev" + "dev-main": "2.9-dev" } }, "autoload": { @@ -998,7 +1244,7 @@ "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", "security": "https://github.com/composer/composer/security/policy", - "source": "https://github.com/composer/composer/tree/2.8.12" + "source": "https://github.com/composer/composer/tree/2.9.2" }, "funding": [ { @@ -1010,7 +1256,7 @@ "type": "github" } ], - "time": "2025-09-19T11:41:59+00:00" + "time": "2025-11-19T20:57:25+00:00" }, { "name": "composer/metadata-minifier", @@ -1649,16 +1895,16 @@ }, { "name": "doctrine/dbal", - "version": "4.3.3", + "version": "4.3.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "231959669bb2173194c95636eae7f1b41b2a8b19" + "reference": "1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/231959669bb2173194c95636eae7f1b41b2a8b19", - "reference": "231959669bb2173194c95636eae7f1b41b2a8b19", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc", + "reference": "1a2fbd0e93b8dec7c3d1ac2b6396a7b929b130dc", "shasum": "" }, "require": { @@ -1668,15 +1914,15 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "13.0.1", + "doctrine/coding-standard": "14.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "2.1.22", - "phpstan/phpstan-phpunit": "2.0.6", + "phpstan/phpstan": "2.1.30", + "phpstan/phpstan-phpunit": "2.0.7", "phpstan/phpstan-strict-rules": "^2", "phpunit/phpunit": "11.5.23", - "slevomat/coding-standard": "8.16.2", - "squizlabs/php_codesniffer": "3.13.1", + "slevomat/coding-standard": "8.24.0", + "squizlabs/php_codesniffer": "4.0.0", "symfony/cache": "^6.3.8|^7.0", "symfony/console": "^5.4|^6.3|^7.0" }, @@ -1735,7 +1981,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.3.3" + "source": "https://github.com/doctrine/dbal/tree/4.3.4" }, "funding": [ { @@ -1751,7 +1997,7 @@ "type": "tidelift" } ], - "time": "2025-09-04T23:52:42+00:00" + "time": "2025-10-09T09:11:36+00:00" }, { "name": "doctrine/deprecations", @@ -1970,29 +2216,28 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "8c784d071debd117328803d86b2097615b457500" + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", - "reference": "8c784d071debd117328803d86b2097615b457500", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" + "php": "^8.2|^8.3|^8.4|^8.5" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" }, "type": "library", "extra": { @@ -2023,7 +2268,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" }, "funding": [ { @@ -2031,7 +2276,7 @@ "type": "github" } ], - "time": "2024-10-09T13:47:03+00:00" + "time": "2025-10-31T18:51:33+00:00" }, { "name": "egulias/email-validator", @@ -2102,16 +2347,16 @@ }, { "name": "filament/actions", - "version": "v3.3.39", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "9eaddc610d9adc00d738b8b116cea1be35a88f85" + "reference": "43a0012caaca601e1cb3536d354a586ef8c3f318" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/9eaddc610d9adc00d738b8b116cea1be35a88f85", - "reference": "9eaddc610d9adc00d738b8b116cea1be35a88f85", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/43a0012caaca601e1cb3536d354a586ef8c3f318", + "reference": "43a0012caaca601e1cb3536d354a586ef8c3f318", "shasum": "" }, "require": { @@ -2120,13 +2365,9 @@ "filament/infolists": "self.version", "filament/notifications": "self.version", "filament/support": "self.version", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "league/csv": "^9.16", + "league/csv": "^9.27", "openspout/openspout": "^4.23", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" + "php": "^8.2" }, "type": "library", "extra": { @@ -2151,43 +2392,35 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-07-16T08:51:11+00:00" + "time": "2025-11-28T11:21:07+00:00" }, { "name": "filament/filament", - "version": "v3.3.39", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "243d0493131ed01e3442d8f023f08f07c85c338f" + "reference": "b9a65067099683dfaace04043dfb8c5a50c19bfe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/243d0493131ed01e3442d8f023f08f07c85c338f", - "reference": "243d0493131ed01e3442d8f023f08f07c85c338f", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/b9a65067099683dfaace04043dfb8c5a50c19bfe", + "reference": "b9a65067099683dfaace04043dfb8c5a50c19bfe", "shasum": "" }, "require": { - "danharrin/livewire-rate-limiting": "^0.3|^1.0|^2.0", + "chillerlan/php-qrcode": "^5.0", "filament/actions": "self.version", "filament/forms": "self.version", "filament/infolists": "self.version", "filament/notifications": "self.version", + "filament/schemas": "self.version", "filament/support": "self.version", "filament/tables": "self.version", "filament/widgets": "self.version", - "illuminate/auth": "^10.45|^11.0|^12.0", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/cookie": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/http": "^10.45|^11.0|^12.0", - "illuminate/routing": "^10.45|^11.0|^12.0", - "illuminate/session": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" + "php": "^8.2", + "pragmarx/google2fa": "^8.0|^9.0", + "pragmarx/google2fa-qrcode": "^3.0" }, "type": "library", "extra": { @@ -2216,35 +2449,29 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-09-16T09:11:33+00:00" + "time": "2025-11-28T11:21:48+00:00" }, { "name": "filament/forms", - "version": "v3.3.39", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "1927793682979fa435f7c3d29a40306b8a526297" + "reference": "4772a165a16cb9ea5da346fc3ba0ffca5b47a53b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/1927793682979fa435f7c3d29a40306b8a526297", - "reference": "1927793682979fa435f7c3d29a40306b8a526297", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/4772a165a16cb9ea5da346fc3ba0ffca5b47a53b", + "reference": "4772a165a16cb9ea5da346fc3ba0ffca5b47a53b", "shasum": "" }, "require": { "danharrin/date-format-converter": "^0.3", "filament/actions": "self.version", + "filament/schemas": "self.version", "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/validation": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" + "php": "^8.2", + "ueberdosis/tiptap-php": "^2.0" }, "type": "library", "extra": { @@ -2272,33 +2499,27 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-09-16T09:09:34+00:00" + "time": "2025-11-28T11:21:32+00:00" }, { "name": "filament/infolists", - "version": "v3.3.39", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "4533c2ccb6ef06ab7f27d81e27be0cdd4f5e72de" + "reference": "0a85cf19262610d607d873644d4fb33e620fe126" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/4533c2ccb6ef06ab7f27d81e27be0cdd4f5e72de", - "reference": "4533c2ccb6ef06ab7f27d81e27be0cdd4f5e72de", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/0a85cf19262610d607d873644d4fb33e620fe126", + "reference": "0a85cf19262610d607d873644d4fb33e620fe126", "shasum": "" }, "require": { "filament/actions": "self.version", + "filament/schemas": "self.version", "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" + "php": "^8.2" }, "type": "library", "extra": { @@ -2323,31 +2544,26 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-08-12T13:15:27+00:00" + "time": "2025-11-28T11:18:41+00:00" }, { "name": "filament/notifications", - "version": "v3.3.39", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", - "reference": "adc118c7fc34a423f3c01d6936ad0316f489949c" + "reference": "f8657e9b98f549f316daf74cf24a659b85a10e12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/notifications/zipball/adc118c7fc34a423f3c01d6936ad0316f489949c", - "reference": "adc118c7fc34a423f3c01d6936ad0316f489949c", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/f8657e9b98f549f316daf74cf24a659b85a10e12", + "reference": "f8657e9b98f549f316daf74cf24a659b85a10e12", "shasum": "" }, "require": { "filament/actions": "self.version", "filament/support": "self.version", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/notifications": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" + "php": "^8.2" }, "type": "library", "extra": { @@ -2359,7 +2575,7 @@ }, "autoload": { "files": [ - "src/Testing/Autoload.php" + "src/Testing/helpers.php" ], "psr-4": { "Filament\\Notifications\\": "src" @@ -2375,74 +2591,119 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-07-08T20:42:18+00:00" + "time": "2025-11-28T11:21:34+00:00" }, { - "name": "filament/spatie-laravel-media-library-plugin", - "version": "v3.3.39", + "name": "filament/query-builder", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/filamentphp/spatie-laravel-media-library-plugin.git", - "reference": "bd7c12baf30cc66b2f088bd0257b12071e15addf" + "url": "https://github.com/filamentphp/query-builder.git", + "reference": "82aa18f09039d015a1d1b9a1b8efb9625fe42129" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/spatie-laravel-media-library-plugin/zipball/bd7c12baf30cc66b2f088bd0257b12071e15addf", - "reference": "bd7c12baf30cc66b2f088bd0257b12071e15addf", + "url": "https://api.github.com/repos/filamentphp/query-builder/zipball/82aa18f09039d015a1d1b9a1b8efb9625fe42129", + "reference": "82aa18f09039d015a1d1b9a1b8efb9625fe42129", "shasum": "" }, "require": { + "filament/actions": "self.version", + "filament/forms": "self.version", + "filament/schemas": "self.version", "filament/support": "self.version", - "illuminate/support": "^10.45|^11.0|^12.0", - "php": "^8.1", - "spatie/laravel-medialibrary": "^10.0|^11.0" + "php": "^8.2" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\QueryBuilder\\QueryBuilderServiceProvider" + ] + } + }, "autoload": { "psr-4": { - "Filament\\": "src" + "Filament\\QueryBuilder\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Filament support for `spatie/laravel-medialibrary`.", + "description": "A powerful query builder component for Filament.", "homepage": "https://github.com/filamentphp/filament", "support": { "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-07-08T20:42:14+00:00" + "time": "2025-11-28T11:19:23+00:00" }, { - "name": "filament/spatie-laravel-translatable-plugin", - "version": "v3.3.39", + "name": "filament/schemas", + "version": "v4.2.4", "source": { "type": "git", - "url": "https://github.com/filamentphp/spatie-laravel-translatable-plugin.git", - "reference": "7de417487ee7a4edd9e66fb3243a27f84db3f543" + "url": "https://github.com/filamentphp/schemas.git", + "reference": "79fa31a8f691f542471a603e754f941f7d9ad09d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/spatie-laravel-translatable-plugin/zipball/7de417487ee7a4edd9e66fb3243a27f84db3f543", - "reference": "7de417487ee7a4edd9e66fb3243a27f84db3f543", + "url": "https://api.github.com/repos/filamentphp/schemas/zipball/79fa31a8f691f542471a603e754f941f7d9ad09d", + "reference": "79fa31a8f691f542471a603e754f941f7d9ad09d", "shasum": "" }, "require": { + "danharrin/date-format-converter": "^0.3", + "filament/actions": "self.version", "filament/support": "self.version", - "illuminate/support": "^10.45|^11.0|^12.0", - "php": "^8.1", - "spatie/laravel-translatable": "^6.0" + "php": "^8.2" }, "type": "library", "extra": { "laravel": { "providers": [ - "Filament\\SpatieLaravelTranslatablePluginServiceProvider" + "Filament\\Schemas\\SchemasServiceProvider" ] } }, + "autoload": { + "psr-4": { + "Filament\\Schemas\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Easily add beautiful UI to any Livewire component.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2025-11-28T11:21:50+00:00" + }, + { + "name": "filament/spatie-laravel-media-library-plugin", + "version": "v4.2.4", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/spatie-laravel-media-library-plugin.git", + "reference": "220d1ad5f6c5a52dcf9e45eca6461f9a93ae8be2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/spatie-laravel-media-library-plugin/zipball/220d1ad5f6c5a52dcf9e45eca6461f9a93ae8be2", + "reference": "220d1ad5f6c5a52dcf9e45eca6461f9a93ae8be2", + "shasum": "" + }, + "require": { + "filament/support": "self.version", + "php": "^8.2", + "spatie/laravel-medialibrary": "^11.0" + }, + "type": "library", "autoload": { "psr-4": { "Filament\\": "src" @@ -2452,44 +2713,43 @@ "license": [ "MIT" ], - "description": "Filament support for `spatie/laravel-translatable`.", + "description": "Filament support for `spatie/laravel-medialibrary`.", "homepage": "https://github.com/filamentphp/filament", "support": { "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-08-12T13:15:45+00:00" + "time": "2025-11-28T11:22:08+00:00" }, { "name": "filament/support", - "version": "v3.3.39", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "afafd5e7a2f8cf052f70f989b52d82d0a1df5c78" + "reference": "50d19b69fecc0636485c0329b9bd35136066ef8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/afafd5e7a2f8cf052f70f989b52d82d0a1df5c78", - "reference": "afafd5e7a2f8cf052f70f989b52d82d0a1df5c78", + "url": "https://api.github.com/repos/filamentphp/support/zipball/50d19b69fecc0636485c0329b9bd35136066ef8c", + "reference": "50d19b69fecc0636485c0329b9bd35136066ef8c", "shasum": "" }, "require": { "blade-ui-kit/blade-heroicons": "^2.5", - "doctrine/dbal": "^3.2|^4.0", + "danharrin/livewire-rate-limiting": "^2.0", "ext-intl": "*", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", - "kirschbaum-development/eloquent-power-joins": "^3.0|^4.0", + "illuminate/contracts": "^11.28|^12.0", + "kirschbaum-development/eloquent-power-joins": "^4.0", + "league/uri-components": "^7.0", "livewire/livewire": "^3.5", - "php": "^8.1", - "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", - "spatie/color": "^1.5", - "spatie/invade": "^1.0|^2.0", + "nette/php-generator": "^4.0", + "php": "^8.2", + "ryangjchandler/blade-capture-directive": "^1.0", + "spatie/invade": "^2.0", "spatie/laravel-package-tools": "^1.9", - "symfony/console": "^6.0|^7.0", - "symfony/html-sanitizer": "^6.1|^7.0" + "symfony/console": "^7.0", + "symfony/html-sanitizer": "^7.0" }, "type": "library", "extra": { @@ -2517,34 +2777,28 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-08-12T13:15:44+00:00" + "time": "2025-11-28T11:20:04+00:00" }, { "name": "filament/tables", - "version": "v3.3.39", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "2e1e3aeeeccd6b74e5d038325af52635d1108e4c" + "reference": "7408f290bda5e908fbe010ba20ab59a01e7e932f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/2e1e3aeeeccd6b74e5d038325af52635d1108e4c", - "reference": "2e1e3aeeeccd6b74e5d038325af52635d1108e4c", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/7408f290bda5e908fbe010ba20ab59a01e7e932f", + "reference": "7408f290bda5e908fbe010ba20ab59a01e7e932f", "shasum": "" }, "require": { "filament/actions": "self.version", "filament/forms": "self.version", + "filament/query-builder": "self.version", "filament/support": "self.version", - "illuminate/console": "^10.45|^11.0|^12.0", - "illuminate/contracts": "^10.45|^11.0|^12.0", - "illuminate/database": "^10.45|^11.0|^12.0", - "illuminate/filesystem": "^10.45|^11.0|^12.0", - "illuminate/support": "^10.45|^11.0|^12.0", - "illuminate/view": "^10.45|^11.0|^12.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" + "php": "^8.2" }, "type": "library", "extra": { @@ -2569,26 +2823,26 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-09-17T10:47:13+00:00" + "time": "2025-11-28T11:20:04+00:00" }, { "name": "filament/widgets", - "version": "v3.3.39", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", - "reference": "5b956f884aaef479f6091463cb829e7c9f2afc2c" + "reference": "495409437dfcd524313dcd6d605b97298fc487b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/widgets/zipball/5b956f884aaef479f6091463cb829e7c9f2afc2c", - "reference": "5b956f884aaef479f6091463cb829e7c9f2afc2c", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/495409437dfcd524313dcd6d605b97298fc487b2", + "reference": "495409437dfcd524313dcd6d605b97298fc487b2", "shasum": "" }, "require": { + "filament/schemas": "self.version", "filament/support": "self.version", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.9" + "php": "^8.2" }, "type": "library", "extra": { @@ -2613,7 +2867,7 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-06-12T15:11:14+00:00" + "time": "2025-11-28T11:22:05+00:00" }, { "name": "firebase/php-jwt", @@ -2894,29 +3148,29 @@ }, { "name": "geoip2/geoip2", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/maxmind/GeoIP2-php.git", - "reference": "b7aa58760a6bf89a608dd92ee2d9436b52557ce2" + "reference": "49fceddd694295e76e970a32848e03bb19e56b42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/b7aa58760a6bf89a608dd92ee2d9436b52557ce2", - "reference": "b7aa58760a6bf89a608dd92ee2d9436b52557ce2", + "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/49fceddd694295e76e970a32848e03bb19e56b42", + "reference": "49fceddd694295e76e970a32848e03bb19e56b42", "shasum": "" }, "require": { "ext-json": "*", - "maxmind-db/reader": "^1.12.1", - "maxmind/web-service-common": "~0.10", + "maxmind-db/reader": "^1.13.0", + "maxmind/web-service-common": "~0.11", "php": ">=8.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "3.*", "phpstan/phpstan": "*", "phpunit/phpunit": "^10.0", - "squizlabs/php_codesniffer": "3.*" + "squizlabs/php_codesniffer": "4.*" }, "type": "library", "autoload": { @@ -2946,22 +3200,22 @@ ], "support": { "issues": "https://github.com/maxmind/GeoIP2-php/issues", - "source": "https://github.com/maxmind/GeoIP2-php/tree/v3.2.0" + "source": "https://github.com/maxmind/GeoIP2-php/tree/v3.3.0" }, - "time": "2025-05-05T21:18:27+00:00" + "time": "2025-11-20T18:50:15+00:00" }, { "name": "giggsey/libphonenumber-for-php-lite", - "version": "9.0.14", + "version": "9.0.19", "source": { "type": "git", "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git", - "reference": "af794cc2ed18edeebadf5ffe08eb6add04275709" + "reference": "b8b7fcb1a78c1423d633d28fc79297c246686d1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/af794cc2ed18edeebadf5ffe08eb6add04275709", - "reference": "af794cc2ed18edeebadf5ffe08eb6add04275709", + "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/b8b7fcb1a78c1423d633d28fc79297c246686d1b", + "reference": "b8b7fcb1a78c1423d633d28fc79297c246686d1b", "shasum": "" }, "require": { @@ -3026,7 +3280,7 @@ "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues", "source": "https://github.com/giggsey/libphonenumber-for-php-lite" }, - "time": "2025-09-16T07:09:25+00:00" + "time": "2025-11-20T18:22:51+00:00" }, { "name": "graham-campbell/markdown", @@ -3653,16 +3907,16 @@ }, { "name": "jaybizzle/crawler-detect", - "version": "v1.3.5", + "version": "v1.3.6", "source": { "type": "git", "url": "https://github.com/JayBizzle/Crawler-Detect.git", - "reference": "fbf1a3e81d61b088e7af723fb3c7a4ee92ac7e34" + "reference": "61f2ef1ad2d0ae922c265931cb0a8032a1ed2813" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/fbf1a3e81d61b088e7af723fb3c7a4ee92ac7e34", - "reference": "fbf1a3e81d61b088e7af723fb3c7a4ee92ac7e34", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/61f2ef1ad2d0ae922c265931cb0a8032a1ed2813", + "reference": "61f2ef1ad2d0ae922c265931cb0a8032a1ed2813", "shasum": "" }, "require": { @@ -3699,9 +3953,9 @@ ], "support": { "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", - "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.3.5" + "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.3.6" }, - "time": "2025-06-11T17:58:05+00:00" + "time": "2025-09-30T16:22:43+00:00" }, { "name": "jenssegers/agent", @@ -3788,16 +4042,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "6.5.2", + "version": "6.6.2", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "ac0d369c09653cf7af561f6d91a705bc617a87b8" + "reference": "3c25fe750c1599716ef26aa997f7c026cee8c4b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/ac0d369c09653cf7af561f6d91a705bc617a87b8", - "reference": "ac0d369c09653cf7af561f6d91a705bc617a87b8", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/3c25fe750c1599716ef26aa997f7c026cee8c4b7", + "reference": "3c25fe750c1599716ef26aa997f7c026cee8c4b7", "shasum": "" }, "require": { @@ -3857,22 +4111,22 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.5.2" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.6.2" }, - "time": "2025-09-09T09:42:27+00:00" + "time": "2025-11-28T15:24:03+00:00" }, { "name": "kirschbaum-development/eloquent-power-joins", - "version": "4.2.8", + "version": "4.2.10", "source": { "type": "git", "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git", - "reference": "d67c7e2efa886d2ef8bb29e86c3ddb9438ac6390" + "reference": "ccda351a75701f5b0a6f94586d9a40f1114302b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/d67c7e2efa886d2ef8bb29e86c3ddb9438ac6390", - "reference": "d67c7e2efa886d2ef8bb29e86c3ddb9438ac6390", + "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/ccda351a75701f5b0a6f94586d9a40f1114302b4", + "reference": "ccda351a75701f5b0a6f94586d9a40f1114302b4", "shasum": "" }, "require": { @@ -3920,9 +4174,9 @@ ], "support": { "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues", - "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.8" + "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.2.10" }, - "time": "2025-08-14T18:43:05+00:00" + "time": "2025-11-13T14:57:49+00:00" }, { "name": "kylewm/brevity", @@ -3966,20 +4220,20 @@ }, { "name": "laminas/laminas-diactoros", - "version": "3.6.0", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f" + "reference": "60c182916b2749480895601649563970f3f12ec4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/b068eac123f21c0e592de41deeb7403b88e0a89f", - "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/60c182916b2749480895601649563970f3f12ec4", + "reference": "60c182916b2749480895601649563970f3f12ec4", "shasum": "" }, "require": { - "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", "psr/http-factory": "^1.1", "psr/http-message": "^1.1 || ^2.0" }, @@ -3996,11 +4250,11 @@ "ext-gd": "*", "ext-libxml": "*", "http-interop/http-factory-tests": "^2.2.0", - "laminas/laminas-coding-standard": "~3.0.0", + "laminas/laminas-coding-standard": "~3.1.0", "php-http/psr7-integration-tests": "^1.4.0", "phpunit/phpunit": "^10.5.36", - "psalm/plugin-phpunit": "^0.19.0", - "vimeo/psalm": "^5.26.1" + "psalm/plugin-phpunit": "^0.19.5", + "vimeo/psalm": "^6.13" }, "type": "library", "extra": { @@ -4050,15 +4304,73 @@ "type": "community_bridge" } ], - "time": "2025-05-05T16:03:34+00:00" + "time": "2025-10-12T15:31:36+00:00" }, { - "name": "laravel-notification-channels/telegram", - "version": "6.0.0", + "name": "lara-zeus/spatie-translatable", + "version": "1.0.4", "source": { "type": "git", - "url": "https://github.com/laravel-notification-channels/telegram.git", - "reference": "289eb825f6c918b21bbda19bffb900d882c9647a" + "url": "https://github.com/lara-zeus/spatie-translatable.git", + "reference": "beef575188bf899a83c0ab8eab26be890611ce97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lara-zeus/spatie-translatable/zipball/beef575188bf899a83c0ab8eab26be890611ce97", + "reference": "beef575188bf899a83c0ab8eab26be890611ce97", + "shasum": "" + }, + "require": { + "ext-intl": "*", + "filament/filament": "^4.0", + "php": "^8.1", + "spatie/laravel-translatable": "^6.0" + }, + "require-dev": { + "larastan/larastan": "^3.4", + "laravel/pint": "^1.0", + "orchestra/testbench": "^10.2", + "phpstan/extension-installer": "^1.4", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "LaraZeus\\SpatieTranslatable\\SpatieTranslatableServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LaraZeus\\SpatieTranslatable\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Filament support for `spatie/laravel-translatable`.", + "homepage": "https://github.com/lara-zeus/spatie-translatable", + "support": { + "issues": "https://github.com/lara-zeus/spatie-translatable/issues", + "source": "https://github.com/lara-zeus/spatie-translatable" + }, + "funding": [ + { + "url": "https://github.com/atmonshi", + "type": "github" + } + ], + "time": "2025-10-17T09:30:19+00:00" + }, + { + "name": "laravel-notification-channels/telegram", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel-notification-channels/telegram.git", + "reference": "289eb825f6c918b21bbda19bffb900d882c9647a" }, "dist": { "type": "zip", @@ -4187,16 +4499,16 @@ }, { "name": "laravel/framework", - "version": "v12.30.1", + "version": "v12.40.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "7f61e8679f9142f282a0184ac7ef9e3834bfd023" + "reference": "1ccd99220b474500e672b373f32bd709ec38de50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/7f61e8679f9142f282a0184ac7ef9e3834bfd023", - "reference": "7f61e8679f9142f282a0184ac7ef9e3834bfd023", + "url": "https://api.github.com/repos/laravel/framework/zipball/1ccd99220b474500e672b373f32bd709ec38de50", + "reference": "1ccd99220b474500e672b373f32bd709ec38de50", "shasum": "" }, "require": { @@ -4224,7 +4536,6 @@ "monolog/monolog": "^3.0", "nesbot/carbon": "^3.8.4", "nunomaduro/termwind": "^2.0", - "phiki/phiki": "^2.0.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", @@ -4309,13 +4620,13 @@ "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", "opis/json-schema": "^2.4.1", - "orchestra/testbench-core": "^10.6.5", + "orchestra/testbench-core": "^10.8.0", "pda/pheanstalk": "^5.0.6|^7.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", "predis/predis": "^2.3|^3.0", - "resend/resend-php": "^0.10.0", + "resend/resend-php": "^0.10.0|^1.0", "symfony/cache": "^7.2.0", "symfony/http-client": "^7.2.0", "symfony/psr-http-message-bridge": "^7.2.0", @@ -4349,7 +4660,7 @@ "predis/predis": "Required to use the predis connector (^2.3|^3.0).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).", "symfony/cache": "Required to PSR-6 cache bridge (^7.2).", "symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).", "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).", @@ -4403,20 +4714,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-09-18T21:07:07+00:00" + "time": "2025-11-26T19:24:25+00:00" }, { "name": "laravel/helpers", - "version": "v1.8.1", + "version": "v1.8.2", "source": { "type": "git", "url": "https://github.com/laravel/helpers.git", - "reference": "d0094b4bc4364560c8ee3a9e956596d760d4afab" + "reference": "98499eea4c1cca76fb0fb37ed365a468773daf0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/helpers/zipball/d0094b4bc4364560c8ee3a9e956596d760d4afab", - "reference": "d0094b4bc4364560c8ee3a9e956596d760d4afab", + "url": "https://api.github.com/repos/laravel/helpers/zipball/98499eea4c1cca76fb0fb37ed365a468773daf0a", + "reference": "98499eea4c1cca76fb0fb37ed365a468773daf0a", "shasum": "" }, "require": { @@ -4425,7 +4736,7 @@ }, "require-dev": { "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^7.0|^8.0|^9.0|^10.0" + "phpunit/phpunit": "^7.0|^8.0|^9.0|^10.0|^11.0|^12.0" }, "type": "library", "extra": { @@ -4458,22 +4769,22 @@ "laravel" ], "support": { - "source": "https://github.com/laravel/helpers/tree/v1.8.1" + "source": "https://github.com/laravel/helpers/tree/v1.8.2" }, - "time": "2025-09-02T15:31:25+00:00" + "time": "2025-11-25T14:46:28+00:00" }, { "name": "laravel/nightwatch", - "version": "v1.13.8", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/laravel/nightwatch.git", - "reference": "a9534899792a453ee16b8200b281197c60dd9a63" + "reference": "5d3e86a84514a470d1827ab5771ae38e46b24773" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/nightwatch/zipball/a9534899792a453ee16b8200b281197c60dd9a63", - "reference": "a9534899792a453ee16b8200b281197c60dd9a63", + "url": "https://api.github.com/repos/laravel/nightwatch/zipball/5d3e86a84514a470d1827ab5771ae38e46b24773", + "reference": "5d3e86a84514a470d1827ab5771ae38e46b24773", "shasum": "" }, "require": { @@ -4522,6 +4833,9 @@ } }, "autoload": { + "files": [ + "agent/helpers.php" + ], "psr-4": { "Laravel\\Nightwatch\\": "src/" } @@ -4548,20 +4862,20 @@ "issues": "https://github.com/laravel/nightwatch/issues", "source": "https://github.com/laravel/nightwatch" }, - "time": "2025-09-23T05:45:29+00:00" + "time": "2025-11-25T07:22:08+00:00" }, { "name": "laravel/octane", - "version": "v2.12.2", + "version": "v2.13.1", "source": { "type": "git", "url": "https://github.com/laravel/octane.git", - "reference": "7cbb80a0bd7ccfbf0615dd33de7907c5dad21171" + "reference": "20b741badaa22cae73b87ffc4d979f3a7f06db25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/octane/zipball/7cbb80a0bd7ccfbf0615dd33de7907c5dad21171", - "reference": "7cbb80a0bd7ccfbf0615dd33de7907c5dad21171", + "url": "https://api.github.com/repos/laravel/octane/zipball/20b741badaa22cae73b87ffc4d979f3a7f06db25", + "reference": "20b741badaa22cae73b87ffc4d979f3a7f06db25", "shasum": "" }, "require": { @@ -4638,20 +4952,20 @@ "issues": "https://github.com/laravel/octane/issues", "source": "https://github.com/laravel/octane" }, - "time": "2025-09-07T23:19:55+00:00" + "time": "2025-10-27T12:05:17+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.6", + "version": "v0.3.8", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077" + "reference": "096748cdfb81988f60090bbb839ce3205ace0d35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/86a8b692e8661d0fb308cec64f3d176821323077", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077", + "url": "https://api.github.com/repos/laravel/prompts/zipball/096748cdfb81988f60090bbb839ce3205ace0d35", + "reference": "096748cdfb81988f60090bbb839ce3205ace0d35", "shasum": "" }, "require": { @@ -4667,9 +4981,9 @@ "require-dev": { "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3|^3.4", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" }, "suggest": { "ext-pcntl": "Required for the spinner to be animated." @@ -4695,22 +5009,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.6" + "source": "https://github.com/laravel/prompts/tree/v0.3.8" }, - "time": "2025-07-07T14:17:42+00:00" + "time": "2025-11-21T20:52:52+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.4", + "version": "v2.0.7", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" + "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/cb291e4c998ac50637c7eeb58189c14f5de5b9dd", + "reference": "cb291e4c998ac50637c7eeb58189c14f5de5b9dd", "shasum": "" }, "require": { @@ -4719,7 +5033,7 @@ "require-dev": { "illuminate/support": "^10.0|^11.0|^12.0", "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", "phpstan/phpstan": "^2.0", "symfony/var-dumper": "^6.2.0|^7.0.0" }, @@ -4758,20 +5072,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-03-19T13:51:03+00:00" + "time": "2025-11-21T20:52:36+00:00" }, { "name": "laravel/socialite", - "version": "v5.23.0", + "version": "v5.23.2", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "e9e0fc83b9d8d71c8385a5da20e5b95ca6234cf5" + "reference": "41e65d53762d33d617bf0253330d672cb95e624b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/e9e0fc83b9d8d71c8385a5da20e5b95ca6234cf5", - "reference": "e9e0fc83b9d8d71c8385a5da20e5b95ca6234cf5", + "url": "https://api.github.com/repos/laravel/socialite/zipball/41e65d53762d33d617bf0253330d672cb95e624b", + "reference": "41e65d53762d33d617bf0253330d672cb95e624b", "shasum": "" }, "require": { @@ -4787,9 +5101,9 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0|^9.0|^10.0", + "orchestra/testbench": "^4.18|^5.20|^6.47|^7.55|^8.36|^9.15|^10.8", "phpstan/phpstan": "^1.12.23", - "phpunit/phpunit": "^8.0|^9.3|^10.4|^11.5" + "phpunit/phpunit": "^8.0|^9.3|^10.4|^11.5|^12.0" }, "type": "library", "extra": { @@ -4830,20 +5144,20 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2025-07-23T14:16:08+00:00" + "time": "2025-11-21T14:00:38+00:00" }, { "name": "laravel/tinker", - "version": "v2.10.1", + "version": "v2.10.2", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" + "reference": "3bcb5f62d6f837e0f093a601e26badafb127bd4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", + "url": "https://api.github.com/repos/laravel/tinker/zipball/3bcb5f62d6f837e0f093a601e26badafb127bd4c", + "reference": "3bcb5f62d6f837e0f093a601e26badafb127bd4c", "shasum": "" }, "require": { @@ -4894,9 +5208,9 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.1" + "source": "https://github.com/laravel/tinker/tree/v2.10.2" }, - "time": "2025-01-27T14:24:01+00:00" + "time": "2025-11-20T16:29:12+00:00" }, { "name": "laravelcm/database-migration", @@ -4947,14 +5261,14 @@ "dist": { "type": "path", "url": "app-modules/gamify", - "reference": "38cdfc7c048601d31c7d9d038fd8896c1eda4d4c" + "reference": "343936faa71e1f1cf7ccc207fc7c78a6c4f0a6a0" }, "require": { - "filament/filament": "^3.2" + "php": "^8.4" }, "require-dev": { - "pestphp/pest": "^2.32", - "pestphp/pest-plugin-laravel": "^2.1" + "pestphp/pest": "^3.8", + "pestphp/pest-plugin-laravel": "^3.0" }, "type": "library", "extra": { @@ -5135,16 +5449,16 @@ }, { "name": "league/commonmark", - "version": "2.7.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "10732241927d3971d28e7ea7b5712721fa2296ca" + "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca", - "reference": "10732241927d3971d28e7ea7b5712721fa2296ca", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/4efa10c1e56488e658d10adf7b7b7dcd19940bfb", + "reference": "4efa10c1e56488e658d10adf7b7b7dcd19940bfb", "shasum": "" }, "require": { @@ -5181,7 +5495,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.8-dev" + "dev-main": "2.9-dev" } }, "autoload": { @@ -5238,7 +5552,7 @@ "type": "tidelift" } ], - "time": "2025-07-20T12:47:49+00:00" + "time": "2025-11-26T21:48:24+00:00" }, { "name": "league/config", @@ -5324,16 +5638,16 @@ }, { "name": "league/csv", - "version": "9.25.0", + "version": "9.27.1", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "f856f532866369fb1debe4e7c5a1db185f40ef86" + "reference": "26de738b8fccf785397d05ee2fc07b6cd8749797" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/f856f532866369fb1debe4e7c5a1db185f40ef86", - "reference": "f856f532866369fb1debe4e7c5a1db185f40ef86", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/26de738b8fccf785397d05ee2fc07b6cd8749797", + "reference": "26de738b8fccf785397d05ee2fc07b6cd8749797", "shasum": "" }, "require": { @@ -5411,20 +5725,20 @@ "type": "github" } ], - "time": "2025-09-11T08:29:08+00:00" + "time": "2025-10-25T08:35:20+00:00" }, { "name": "league/flysystem", - "version": "3.30.0", + "version": "3.30.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "2203e3151755d874bb2943649dae1eb8533ac93e" + "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e", - "reference": "2203e3151755d874bb2943649dae1eb8533ac93e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", + "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", "shasum": "" }, "require": { @@ -5492,22 +5806,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.30.2" }, - "time": "2025-06-25T13:29:59+00:00" + "time": "2025-11-10T17:13:11+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.29.0", + "version": "3.30.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9" + "reference": "d286e896083bed3190574b8b088b557b59eb66f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/c6ff6d4606e48249b63f269eba7fabdb584e76a9", - "reference": "c6ff6d4606e48249b63f269eba7fabdb584e76a9", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d286e896083bed3190574b8b088b557b59eb66f5", + "reference": "d286e896083bed3190574b8b088b557b59eb66f5", "shasum": "" }, "require": { @@ -5547,22 +5861,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.29.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.30.1" }, - "time": "2024-08-17T13:10:48+00:00" + "time": "2025-10-20T15:27:33+00:00" }, { "name": "league/flysystem-local", - "version": "3.30.0", + "version": "3.30.2", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10" + "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10", - "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d", + "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d", "shasum": "" }, "require": { @@ -5596,9 +5910,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2" }, - "time": "2025-05-21T10:34:19+00:00" + "time": "2025-11-10T11:23:37+00:00" }, { "name": "league/mime-type-detection", @@ -5734,33 +6048,38 @@ }, { "name": "league/uri", - "version": "7.5.1", + "version": "7.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" + "reference": "f625804987a0a9112d954f9209d91fec52182344" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/f625804987a0a9112d954f9209d91fec52182344", + "reference": "f625804987a0a9112d954f9209d91fec52182344", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" + "league/uri-interfaces": "^7.6", + "php": "^8.1", + "psr/http-factory": "^1" }, "conflict": { "league/uri-schemes": "^1.0" }, "suggest": { "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", "ext-fileinfo": "to create Data URI from file contennts", "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", "league/uri-components": "Needed to easily manipulate URI objects components", + "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -5788,6 +6107,7 @@ "description": "URI manipulation library", "homepage": "https://uri.thephpleague.com", "keywords": [ + "URN", "data-uri", "file-uri", "ftp", @@ -5800,9 +6120,11 @@ "psr-7", "query-string", "querystring", + "rfc2141", "rfc3986", "rfc3987", "rfc6570", + "rfc8141", "uri", "uri-template", "url", @@ -5812,7 +6134,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" + "source": "https://github.com/thephpleague/uri/tree/7.6.0" }, "funding": [ { @@ -5820,26 +6142,110 @@ "type": "github" } ], - "time": "2024-12-08T08:40:02+00:00" + "time": "2025-11-18T12:17:23+00:00" + }, + { + "name": "league/uri-components", + "version": "7.6.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-components.git", + "reference": "ffa1215dbee72ee4b7bc08d983d25293812456c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/ffa1215dbee72ee4b7bc08d983d25293812456c2", + "reference": "ffa1215dbee72ee4b7bc08d983d25293812456c2", + "shasum": "" + }, + "require": { + "league/uri": "^7.6", + "php": "^8.1" + }, + "suggest": { + "bakame/aide-uri": "A polyfill for PHP8.1 until PHP8.4 to add support to PHP Native URI parser", + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-mbstring": "to use the sorting algorithm of URLSearchParams", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-polyfill": "Needed to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI components manipulation library", + "homepage": "http://uri.thephpleague.com", + "keywords": [ + "authority", + "components", + "fragment", + "host", + "middleware", + "modifier", + "path", + "port", + "query", + "rfc3986", + "scheme", + "uri", + "url", + "userinfo" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-components/tree/7.6.0" + }, + "funding": [ + { + "url": "https://github.com/nyamsprod", + "type": "github" + } + ], + "time": "2025-11-18T12:17:23+00:00" }, { "name": "league/uri-interfaces", - "version": "7.5.0", + "version": "7.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + "reference": "ccbfb51c0445298e7e0b7f4481b942f589665368" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/ccbfb51c0445298e7e0b7f4481b942f589665368", + "reference": "ccbfb51c0445298e7e0b7f4481b942f589665368", "shasum": "" }, "require": { "ext-filter": "*", "php": "^8.1", - "psr/http-factory": "^1", "psr/http-message": "^1.1 || ^2.0" }, "suggest": { @@ -5847,6 +6253,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle WHATWG URL", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -5871,7 +6278,7 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", @@ -5896,7 +6303,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.6.0" }, "funding": [ { @@ -5904,20 +6311,20 @@ "type": "github" } ], - "time": "2024-12-08T08:18:47+00:00" + "time": "2025-11-18T12:17:23+00:00" }, { "name": "livewire/livewire", - "version": "v3.6.4", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "ef04be759da41b14d2d129e670533180a44987dc" + "reference": "f5f9efe6d5a7059116bd695a89d95ceedf33f3cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/ef04be759da41b14d2d129e670533180a44987dc", - "reference": "ef04be759da41b14d2d129e670533180a44987dc", + "url": "https://api.github.com/repos/livewire/livewire/zipball/f5f9efe6d5a7059116bd695a89d95ceedf33f3cb", + "reference": "f5f9efe6d5a7059116bd695a89d95ceedf33f3cb", "shasum": "" }, "require": { @@ -5972,7 +6379,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.6.4" + "source": "https://github.com/livewire/livewire/tree/v3.7.0" }, "funding": [ { @@ -5980,32 +6387,31 @@ "type": "github" } ], - "time": "2025-07-17T05:12:15+00:00" + "time": "2025-11-12T17:58:16+00:00" }, { "name": "livewire/volt", - "version": "v1.7.2", + "version": "v1.10.1", "source": { "type": "git", "url": "https://github.com/livewire/volt.git", - "reference": "91ba934e72bbd162442840862959ade24dbe728a" + "reference": "48cff133990c6261c63ee279fc091af6f6c6654e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/volt/zipball/91ba934e72bbd162442840862959ade24dbe728a", - "reference": "91ba934e72bbd162442840862959ade24dbe728a", + "url": "https://api.github.com/repos/livewire/volt/zipball/48cff133990c6261c63ee279fc091af6f6c6654e", + "reference": "48cff133990c6261c63ee279fc091af6f6c6654e", "shasum": "" }, "require": { "laravel/framework": "^10.38.2|^11.0|^12.0", - "livewire/livewire": "^3.6.1", + "livewire/livewire": "^3.6.1|^4.0", "php": "^8.1" }, "require-dev": { "laravel/folio": "^1.1", - "mockery/mockery": "^1.6", - "orchestra/testbench": "^8.15.0|^9.0|^10.0", - "pestphp/pest": "^2.9.5|^3.0", + "orchestra/testbench": "^8.36|^9.15|^10.8", + "pestphp/pest": "^2.9.5|^3.0|^4.0", "phpstan/phpstan": "^1.10" }, "type": "library", @@ -6052,7 +6458,7 @@ "issues": "https://github.com/livewire/volt/issues", "source": "https://github.com/livewire/volt" }, - "time": "2025-08-06T15:40:50+00:00" + "time": "2025-11-25T16:19:15+00:00" }, { "name": "maennchen/zipstream-php", @@ -6274,16 +6680,16 @@ }, { "name": "maxmind-db/reader", - "version": "v1.12.1", + "version": "v1.13.1", "source": { "type": "git", "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git", - "reference": "815939e006b7e68062b540ec9e86aaa8be2b6ce4" + "reference": "2194f58d0f024ce923e685cdf92af3daf9951908" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/815939e006b7e68062b540ec9e86aaa8be2b6ce4", - "reference": "815939e006b7e68062b540ec9e86aaa8be2b6ce4", + "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/2194f58d0f024ce923e685cdf92af3daf9951908", + "reference": "2194f58d0f024ce923e685cdf92af3daf9951908", "shasum": "" }, "require": { @@ -6296,12 +6702,13 @@ "friendsofphp/php-cs-fixer": "3.*", "phpstan/phpstan": "*", "phpunit/phpunit": ">=8.0.0,<10.0.0", - "squizlabs/php_codesniffer": "3.*" + "squizlabs/php_codesniffer": "4.*" }, "suggest": { "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", - "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups" + "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups", + "maxmind-db/reader-ext": "C extension for significantly faster IP lookups (install via PIE: pie install maxmind-db/reader-ext)" }, "type": "library", "autoload": { @@ -6331,22 +6738,22 @@ ], "support": { "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues", - "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.12.1" + "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.13.1" }, - "time": "2025-05-05T20:56:32+00:00" + "time": "2025-11-21T22:24:26+00:00" }, { "name": "maxmind/web-service-common", - "version": "v0.10.0", + "version": "v0.11.0", "source": { "type": "git", "url": "https://github.com/maxmind/web-service-common-php.git", - "reference": "d7c7c42fc31bff26e0ded73a6e187bcfb193f9c4" + "reference": "5b9e3d3472213361eebdb3ab8879e91b8952091b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/d7c7c42fc31bff26e0ded73a6e187bcfb193f9c4", - "reference": "d7c7c42fc31bff26e0ded73a6e187bcfb193f9c4", + "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/5b9e3d3472213361eebdb3ab8879e91b8952091b", + "reference": "5b9e3d3472213361eebdb3ab8879e91b8952091b", "shasum": "" }, "require": { @@ -6359,7 +6766,7 @@ "friendsofphp/php-cs-fixer": "3.*", "phpstan/phpstan": "*", "phpunit/phpunit": "^8.0 || ^9.0", - "squizlabs/php_codesniffer": "3.*" + "squizlabs/php_codesniffer": "4.*" }, "type": "library", "autoload": { @@ -6382,9 +6789,9 @@ "homepage": "https://github.com/maxmind/web-service-common-php", "support": { "issues": "https://github.com/maxmind/web-service-common-php/issues", - "source": "https://github.com/maxmind/web-service-common-php/tree/v0.10.0" + "source": "https://github.com/maxmind/web-service-common-php/tree/v0.11.0" }, - "time": "2024-11-14T23:14:52+00:00" + "time": "2025-11-20T18:33:17+00:00" }, { "name": "mckenziearts/blade-untitledui-icons", @@ -6787,27 +7194,99 @@ ], "time": "2025-09-06T13:39:36+00:00" }, + { + "name": "nette/php-generator", + "version": "v4.2.0", + "source": { + "type": "git", + "url": "https://github.com/nette/php-generator.git", + "reference": "4707546a1f11badd72f5d82af4f8a6bc64bd56ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/php-generator/zipball/4707546a1f11badd72f5d82af4f8a6bc64bd56ac", + "reference": "4707546a1f11badd72f5d82af4f8a6bc64bd56ac", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0.6", + "php": "8.1 - 8.5" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/tester": "^2.4", + "nikic/php-parser": "^5.0", + "phpstan/phpstan-nette": "^2.0@stable", + "tracy/tracy": "^2.8" + }, + "suggest": { + "nikic/php-parser": "to use ClassType::from(withBodies: true) & ClassType::fromCode()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.5 features.", + "homepage": "https://nette.org", + "keywords": [ + "code", + "nette", + "php", + "scaffolding" + ], + "support": { + "issues": "https://github.com/nette/php-generator/issues", + "source": "https://github.com/nette/php-generator/tree/v4.2.0" + }, + "time": "2025-08-06T18:24:31+00:00" + }, { "name": "nette/schema", - "version": "v1.3.2", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004", + "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.4" + "php": "8.1 - 8.5" }, "require-dev": { "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^1.0", + "phpstan/phpstan-nette": "^2.0@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -6817,6 +7296,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -6845,22 +7327,22 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.2" + "source": "https://github.com/nette/schema/tree/v1.3.3" }, - "time": "2024-10-06T23:10:23+00:00" + "time": "2025-10-30T22:57:59+00:00" }, { "name": "nette/utils", - "version": "v4.0.8", + "version": "v4.0.9", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede" + "reference": "505a30ad386daa5211f08a318e47015b501cad30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede", - "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede", + "url": "https://api.github.com/repos/nette/utils/zipball/505a30ad386daa5211f08a318e47015b501cad30", + "reference": "505a30ad386daa5211f08a318e47015b501cad30", "shasum": "" }, "require": { @@ -6934,30 +7416,30 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.8" + "source": "https://github.com/nette/utils/tree/v4.0.9" }, - "time": "2025-08-06T21:43:34+00:00" + "time": "2025-10-31T00:45:47+00:00" }, { "name": "nicmart/tree", - "version": "0.9.0", + "version": "0.10.1", "source": { "type": "git", "url": "https://github.com/nicmart/Tree.git", - "reference": "f5e17bf18d78cfb0666ebb9f956c3acd8d14229d" + "reference": "2ef11e329d26005ef49dbacd0223bcfd2515b6cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nicmart/Tree/zipball/f5e17bf18d78cfb0666ebb9f956c3acd8d14229d", - "reference": "f5e17bf18d78cfb0666ebb9f956c3acd8d14229d", + "url": "https://api.github.com/repos/nicmart/Tree/zipball/2ef11e329d26005ef49dbacd0223bcfd2515b6cc", + "reference": "2ef11e329d26005ef49dbacd0223bcfd2515b6cc", "shasum": "" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { - "ergebnis/composer-normalize": "^2.44.0", - "ergebnis/license": "^2.6.0", + "ergebnis/composer-normalize": "^2.48.2", + "ergebnis/license": "^2.7.0", "ergebnis/php-cs-fixer-config": "^6.28.1", "fakerphp/faker": "^1.24.1", "infection/infection": "~0.26.19", @@ -6988,22 +7470,22 @@ "description": "A basic but flexible php tree data structure and a fluent tree builder implementation.", "support": { "issues": "https://github.com/nicmart/Tree/issues", - "source": "https://github.com/nicmart/Tree/tree/0.9.0" + "source": "https://github.com/nicmart/Tree/tree/0.10.1" }, - "time": "2024-11-22T15:36:01+00:00" + "time": "2025-11-25T08:51:01+00:00" }, { "name": "nikic/php-parser", - "version": "v5.6.1", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2" + "reference": "3a454ca033b9e06b63282ce19562e892747449bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", - "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb", "shasum": "" }, "require": { @@ -7046,9 +7528,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" }, - "time": "2025-08-13T20:13:15+00:00" + "time": "2025-10-21T19:32:17+00:00" }, { "name": "notchpay/notchpay-php", @@ -7127,31 +7609,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.3.1", + "version": "v2.3.3", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123" + "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dfa08f390e509967a15c22493dc0bac5733d9123", - "reference": "dfa08f390e509967a15c22493dc0bac5733d9123", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017", + "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.2.6" + "symfony/console": "^7.3.6" }, "require-dev": { - "illuminate/console": "^11.44.7", - "laravel/pint": "^1.22.0", + "illuminate/console": "^11.46.1", + "laravel/pint": "^1.25.1", "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0 || ^3.8.2", - "phpstan/phpstan": "^1.12.25", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3", + "phpstan/phpstan": "^1.12.32", "phpstan/phpstan-strict-rules": "^1.6.2", - "symfony/var-dumper": "^7.2.6", + "symfony/var-dumper": "^7.3.5", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -7194,7 +7676,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.3" }, "funding": [ { @@ -7210,7 +7692,7 @@ "type": "github" } ], - "time": "2025-05-08T08:14:37+00:00" + "time": "2025-11-20T02:34:59+00:00" }, { "name": "openspout/openspout", @@ -7307,16 +7789,16 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v3.1.0", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "5cba5793151a917ce03cbc0452b375fa4008849e" + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/5cba5793151a917ce03cbc0452b375fa4008849e", - "reference": "5cba5793151a917ce03cbc0452b375fa4008849e", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", "shasum": "" }, "require": { @@ -7372,7 +7854,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2025-09-22T19:58:27+00:00" + "time": "2025-09-24T15:06:41+00:00" }, { "name": "paragonie/random_compat", @@ -7424,112 +7906,41 @@ }, "time": "2020-10-15T08:29:30+00:00" }, - { - "name": "phiki/phiki", - "version": "v2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phikiphp/phiki.git", - "reference": "160785c50c01077780ab217e5808f00ab8f05a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phikiphp/phiki/zipball/160785c50c01077780ab217e5808f00ab8f05a13", - "reference": "160785c50c01077780ab217e5808f00ab8f05a13", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/commonmark": "^2.5.3", - "php": "^8.2", - "psr/simple-cache": "^3.0" - }, - "require-dev": { - "illuminate/support": "^11.45", - "laravel/pint": "^1.18.1", - "orchestra/testbench": "^9.15", - "pestphp/pest": "^3.5.1", - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.0", - "symfony/var-dumper": "^7.1.6" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Phiki\\Adapters\\Laravel\\PhikiServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Phiki\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ryan Chandler", - "email": "support@ryangjchandler.co.uk", - "homepage": "https://ryangjchandler.co.uk", - "role": "Developer" - } - ], - "description": "Syntax highlighting using TextMate grammars in PHP.", - "support": { - "issues": "https://github.com/phikiphp/phiki/issues", - "source": "https://github.com/phikiphp/phiki/tree/v2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sponsors/ryangjchandler", - "type": "github" - }, - { - "url": "https://buymeacoffee.com/ryangjchandler", - "type": "other" - } - ], - "time": "2025-09-20T17:21:02+00:00" - }, { "name": "phpdocumentor/reflection", - "version": "6.3.0", + "version": "6.4.4", "source": { "type": "git", "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "d91b3270832785602adcc24ae2d0974ba99a8ff8" + "reference": "5e5db15b34e6eae755cb97beaa7fe076ae9e8d4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/d91b3270832785602adcc24ae2d0974ba99a8ff8", - "reference": "d91b3270832785602adcc24ae2d0974ba99a8ff8", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/5e5db15b34e6eae755cb97beaa7fe076ae9e8d4c", + "reference": "5e5db15b34e6eae755cb97beaa7fe076ae9e8d4c", "shasum": "" }, "require": { "composer-runtime-api": "^2", "nikic/php-parser": "~4.18 || ^5.0", - "php": "8.1.*|8.2.*|8.3.*|8.4.*", + "php": "8.1.*|8.2.*|8.3.*|8.4.*|8.5.*", "phpdocumentor/reflection-common": "^2.1", "phpdocumentor/reflection-docblock": "^5", - "phpdocumentor/type-resolver": "^1.2", + "phpdocumentor/type-resolver": "^1.4", "symfony/polyfill-php80": "^1.28", "webmozart/assert": "^1.7" }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^1.0", "doctrine/coding-standard": "^13.0", - "eliashaeussler/phpunit-attributes": "^1.7", + "eliashaeussler/phpunit-attributes": "^1.8", "mikey179/vfsstream": "~1.2", "mockery/mockery": "~1.6.0", - "phpspec/prophecy-phpunit": "^2.0", + "phpspec/prophecy-phpunit": "^2.4", "phpstan/extension-installer": "^1.1", "phpstan/phpstan": "^1.8", "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^10.0", + "phpunit/phpunit": "^10.5.53", "psalm/phar": "^6.0", "rector/rector": "^1.0.0", "squizlabs/php_codesniffer": "^3.8" @@ -7563,9 +7974,9 @@ ], "support": { "issues": "https://github.com/phpDocumentor/Reflection/issues", - "source": "https://github.com/phpDocumentor/Reflection/tree/6.3.0" + "source": "https://github.com/phpDocumentor/Reflection/tree/6.4.4" }, - "time": "2025-06-06T13:39:18+00:00" + "time": "2025-11-25T21:21:18+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -7622,16 +8033,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.3", + "version": "5.6.5", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9" + "reference": "90614c73d3800e187615e2dd236ad0e2a01bf761" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9", - "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/90614c73d3800e187615e2dd236ad0e2a01bf761", + "reference": "90614c73d3800e187615e2dd236ad0e2a01bf761", "shasum": "" }, "require": { @@ -7680,22 +8091,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.3" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.5" }, - "time": "2025-08-01T19:43:32+00:00" + "time": "2025-11-27T19:50:05+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.10.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", "shasum": "" }, "require": { @@ -7738,9 +8149,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" }, - "time": "2024-11-09T15:12:26+00:00" + "time": "2025-11-21T15:09:14+00:00" }, { "name": "phpoption/phpoption", @@ -7819,16 +8230,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.46", + "version": "3.0.47", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6" + "reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6", - "reference": "56483a7de62a6c2a6635e42e93b8a9e25d4f0ec6", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9d6ca36a6c2dd434765b1071b2644a1c683b385d", + "reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d", "shasum": "" }, "require": { @@ -7909,7 +8320,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.46" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.47" }, "funding": [ { @@ -7925,7 +8336,7 @@ "type": "tidelift" } ], - "time": "2025-06-26T16:29:55+00:00" + "time": "2025-10-06T01:07:24+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -7974,18 +8385,137 @@ }, "time": "2025-08-30T15:50:23+00:00" }, + { + "name": "pragmarx/google2fa", + "version": "v9.0.0", + "source": { + "type": "git", + "url": "https://github.com/antonioribeiro/google2fa.git", + "reference": "e6bc62dd6ae83acc475f57912e27466019a1f2cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/e6bc62dd6ae83acc475f57912e27466019a1f2cf", + "reference": "e6bc62dd6ae83acc475f57912e27466019a1f2cf", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^1.0|^2.0|^3.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^7.5.15|^8.5|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PragmaRX\\Google2FA\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "role": "Creator & Designer" + } + ], + "description": "A One Time Password Authentication package, compatible with Google Authenticator.", + "keywords": [ + "2fa", + "Authentication", + "Two Factor Authentication", + "google2fa" + ], + "support": { + "issues": "https://github.com/antonioribeiro/google2fa/issues", + "source": "https://github.com/antonioribeiro/google2fa/tree/v9.0.0" + }, + "time": "2025-09-19T22:51:08+00:00" + }, + { + "name": "pragmarx/google2fa-qrcode", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/antonioribeiro/google2fa-qrcode.git", + "reference": "ce4d8a729b6c93741c607cfb2217acfffb5bf76b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/antonioribeiro/google2fa-qrcode/zipball/ce4d8a729b6c93741c607cfb2217acfffb5bf76b", + "reference": "ce4d8a729b6c93741c607cfb2217acfffb5bf76b", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "pragmarx/google2fa": ">=4.0" + }, + "require-dev": { + "bacon/bacon-qr-code": "^2.0", + "chillerlan/php-qrcode": "^1.0|^2.0|^3.0|^4.0", + "khanamiryan/qrcode-detector-decoder": "^1.0", + "phpunit/phpunit": "~4|~5|~6|~7|~8|~9" + }, + "suggest": { + "bacon/bacon-qr-code": "For QR Code generation, requires imagick", + "chillerlan/php-qrcode": "For QR Code generation" + }, + "type": "library", + "extra": { + "component": "package", + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "PragmaRX\\Google2FAQRCode\\": "src/", + "PragmaRX\\Google2FAQRCode\\Tests\\": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Antonio Carlos Ribeiro", + "email": "acr@antoniocarlosribeiro.com", + "role": "Creator & Designer" + } + ], + "description": "QR Code package for Google2FA", + "keywords": [ + "2fa", + "Authentication", + "Two Factor Authentication", + "google2fa", + "qr code", + "qrcode" + ], + "support": { + "issues": "https://github.com/antonioribeiro/google2fa-qrcode/issues", + "source": "https://github.com/antonioribeiro/google2fa-qrcode/tree/v3.0.0" + }, + "time": "2021-08-15T12:53:48+00:00" + }, { "name": "predis/predis", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/predis/predis.git", - "reference": "9e9deec4dfd3ebf65d32eb368f498c646ba2ecd8" + "reference": "153097374b39a2f737fe700ebcd725642526cdec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/9e9deec4dfd3ebf65d32eb368f498c646ba2ecd8", - "reference": "9e9deec4dfd3ebf65d32eb368f498c646ba2ecd8", + "url": "https://api.github.com/repos/predis/predis/zipball/153097374b39a2f737fe700ebcd725642526cdec", + "reference": "153097374b39a2f737fe700ebcd725642526cdec", "shasum": "" }, "require": { @@ -8027,7 +8557,7 @@ ], "support": { "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v3.2.0" + "source": "https://github.com/predis/predis/tree/v3.3.0" }, "funding": [ { @@ -8035,7 +8565,7 @@ "type": "github" } ], - "time": "2025-08-06T06:41:24+00:00" + "time": "2025-11-24T17:48:50+00:00" }, { "name": "propaganistas/laravel-phone", @@ -8572,16 +9102,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.12", + "version": "v0.12.15", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "cd23863404a40ccfaf733e3af4db2b459837f7e7" + "reference": "38953bc71491c838fcb6ebcbdc41ab7483cd549c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/cd23863404a40ccfaf733e3af4db2b459837f7e7", - "reference": "cd23863404a40ccfaf733e3af4db2b459837f7e7", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/38953bc71491c838fcb6ebcbdc41ab7483cd549c", + "reference": "38953bc71491c838fcb6ebcbdc41ab7483cd549c", "shasum": "" }, "require": { @@ -8596,11 +9126,12 @@ "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" }, "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ @@ -8644,9 +9175,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.12" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.15" }, - "time": "2025-09-20T13:46:31+00:00" + "time": "2025-11-28T00:00:14+00:00" }, { "name": "ralouphie/getallheaders", @@ -8997,6 +9528,84 @@ ], "time": "2025-02-25T09:09:36+00:00" }, + { + "name": "scrivo/highlight.php", + "version": "v9.18.1.10", + "source": { + "type": "git", + "url": "https://github.com/scrivo/highlight.php.git", + "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/scrivo/highlight.php/zipball/850f4b44697a2552e892ffe71490ba2733c2fc6e", + "reference": "850f4b44697a2552e892ffe71490ba2733c2fc6e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.7", + "sabberworm/php-css-parser": "^8.3", + "symfony/finder": "^2.8|^3.4|^5.4", + "symfony/var-dumper": "^2.8|^3.4|^5.4" + }, + "suggest": { + "ext-mbstring": "Allows highlighting code with unicode characters and supports language with unicode keywords" + }, + "type": "library", + "autoload": { + "files": [ + "HighlightUtilities/functions.php" + ], + "psr-0": { + "Highlight\\": "", + "HighlightUtilities\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Geert Bergman", + "homepage": "http://www.scrivo.org/", + "role": "Project Author" + }, + { + "name": "Vladimir Jimenez", + "homepage": "https://allejo.io", + "role": "Maintainer" + }, + { + "name": "Martin Folkers", + "homepage": "https://twobrain.io", + "role": "Contributor" + } + ], + "description": "Server side syntax highlighter that supports 185 languages. It's a PHP port of highlight.js", + "keywords": [ + "code", + "highlight", + "highlight.js", + "highlight.php", + "syntax" + ], + "support": { + "issues": "https://github.com/scrivo/highlight.php/issues", + "source": "https://github.com/scrivo/highlight.php" + }, + "funding": [ + { + "url": "https://github.com/allejo", + "type": "github" + } + ], + "time": "2022-12-17T21:53:22+00:00" + }, { "name": "seld/jsonlint", "version": "1.11.0", @@ -9172,16 +9781,16 @@ }, { "name": "spatie/browsershot", - "version": "5.0.10", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/spatie/browsershot.git", - "reference": "9e5ae15487b3cdc3eb03318c1c8ac38971f60e58" + "reference": "127c20da43d0d711ebbc64f85053f50bc147c515" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/browsershot/zipball/9e5ae15487b3cdc3eb03318c1c8ac38971f60e58", - "reference": "9e5ae15487b3cdc3eb03318c1c8ac38971f60e58", + "url": "https://api.github.com/repos/spatie/browsershot/zipball/127c20da43d0d711ebbc64f85053f50bc147c515", + "reference": "127c20da43d0d711ebbc64f85053f50bc147c515", "shasum": "" }, "require": { @@ -9189,13 +9798,13 @@ "ext-json": "*", "php": "^8.2", "spatie/temporary-directory": "^2.0", - "symfony/process": "^6.0|^7.0" + "symfony/process": "^6.0|^7.0|^8.0" }, "require-dev": { - "pestphp/pest": "^3.0", + "pestphp/pest": "^3.0|^4.0", "spatie/image": "^3.6", "spatie/pdf-to-text": "^1.52", - "spatie/phpunit-snapshot-assertions": "^4.2.3|^5.0" + "spatie/phpunit-snapshot-assertions": "^5.0" }, "type": "library", "autoload": { @@ -9228,7 +9837,7 @@ "webpage" ], "support": { - "source": "https://github.com/spatie/browsershot/tree/5.0.10" + "source": "https://github.com/spatie/browsershot/tree/5.1.1" }, "funding": [ { @@ -9236,90 +9845,31 @@ "type": "github" } ], - "time": "2025-05-15T07:10:57+00:00" - }, - { - "name": "spatie/color", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/color.git", - "reference": "142af7fec069a420babea80a5412eb2f646dcd8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/color/zipball/142af7fec069a420babea80a5412eb2f646dcd8c", - "reference": "142af7fec069a420babea80a5412eb2f646dcd8c", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "pestphp/pest": "^1.22", - "phpunit/phpunit": "^6.5||^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Color\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sebastian De Deyne", - "email": "sebastian@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A little library to handle color conversions", - "homepage": "https://github.com/spatie/color", - "keywords": [ - "color", - "conversion", - "rgb", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/color/issues", - "source": "https://github.com/spatie/color/tree/1.8.0" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2025-02-10T09:22:41+00:00" + "time": "2025-11-26T09:49:20+00:00" }, { "name": "spatie/crawler", - "version": "8.4.3", + "version": "8.4.7", "source": { "type": "git", "url": "https://github.com/spatie/crawler.git", - "reference": "4f4c3ead439e7e57085c0b802bc4e5b44fb7d751" + "reference": "67cbd569437d0e35b1332c5f21d009cac8b4a37b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/crawler/zipball/4f4c3ead439e7e57085c0b802bc4e5b44fb7d751", - "reference": "4f4c3ead439e7e57085c0b802bc4e5b44fb7d751", + "url": "https://api.github.com/repos/spatie/crawler/zipball/67cbd569437d0e35b1332c5f21d009cac8b4a37b", + "reference": "67cbd569437d0e35b1332c5f21d009cac8b4a37b", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^7.3", "guzzlehttp/psr7": "^2.0", "illuminate/collections": "^10.0|^11.0|^12.0", - "nicmart/tree": "^0.9", + "nicmart/tree": "^0.10", "php": "^8.2", "spatie/browsershot": "^5.0.5", "spatie/robots-txt": "^2.0", - "symfony/dom-crawler": "^6.0|^7.0" + "symfony/dom-crawler": "^6.0|^7.0|^8.0" }, "require-dev": { "pestphp/pest": "^2.0|^3.0", @@ -9351,7 +9901,7 @@ ], "support": { "issues": "https://github.com/spatie/crawler/issues", - "source": "https://github.com/spatie/crawler/tree/8.4.3" + "source": "https://github.com/spatie/crawler/tree/8.4.7" }, "funding": [ { @@ -9363,7 +9913,7 @@ "type": "github" } ], - "time": "2025-05-20T09:00:51+00:00" + "time": "2025-11-26T17:35:15+00:00" }, { "name": "spatie/eloquent-sortable", @@ -9441,16 +9991,16 @@ }, { "name": "spatie/image", - "version": "3.8.5", + "version": "3.8.7", "source": { "type": "git", "url": "https://github.com/spatie/image.git", - "reference": "a63f60b7387ebeacab463e79a95deb7ffed75430" + "reference": "4d35db207c4b317bc221d02ab7ba94aa78b44c24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image/zipball/a63f60b7387ebeacab463e79a95deb7ffed75430", - "reference": "a63f60b7387ebeacab463e79a95deb7ffed75430", + "url": "https://api.github.com/repos/spatie/image/zipball/4d35db207c4b317bc221d02ab7ba94aa78b44c24", + "reference": "4d35db207c4b317bc221d02ab7ba94aa78b44c24", "shasum": "" }, "require": { @@ -9460,18 +10010,18 @@ "php": "^8.2", "spatie/image-optimizer": "^1.7.5", "spatie/temporary-directory": "^2.2", - "symfony/process": "^6.4|^7.0" + "symfony/process": "^6.4|^7.0|^8.0" }, "require-dev": { "ext-gd": "*", "ext-imagick": "*", "laravel/sail": "^1.34", - "pestphp/pest": "^2.28", + "pestphp/pest": "^3.0|^4.0", "phpstan/phpstan": "^1.10.50", "spatie/pest-plugin-snapshots": "^2.1", "spatie/pixelmatch-php": "^1.0", "spatie/ray": "^1.40.1", - "symfony/var-dumper": "^6.4|7.0" + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -9498,7 +10048,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/image/tree/3.8.5" + "source": "https://github.com/spatie/image/tree/3.8.7" }, "funding": [ { @@ -9510,32 +10060,32 @@ "type": "github" } ], - "time": "2025-06-27T12:44:55+00:00" + "time": "2025-11-24T15:10:50+00:00" }, { "name": "spatie/image-optimizer", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/spatie/image-optimizer.git", - "reference": "4fd22035e81d98fffced65a8c20d9ec4daa9671c" + "reference": "2ad9ac7c19501739183359ae64ea6c15869c23d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/4fd22035e81d98fffced65a8c20d9ec4daa9671c", - "reference": "4fd22035e81d98fffced65a8c20d9ec4daa9671c", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/2ad9ac7c19501739183359ae64ea6c15869c23d9", + "reference": "2ad9ac7c19501739183359ae64ea6c15869c23d9", "shasum": "" }, "require": { "ext-fileinfo": "*", "php": "^7.3|^8.0", "psr/log": "^1.0 | ^2.0 | ^3.0", - "symfony/process": "^4.2|^5.0|^6.0|^7.0" + "symfony/process": "^4.2|^5.0|^6.0|^7.0|^8.0" }, "require-dev": { - "pestphp/pest": "^1.21", - "phpunit/phpunit": "^8.5.21|^9.4.4", - "symfony/var-dumper": "^4.2|^5.0|^6.0|^7.0" + "pestphp/pest": "^1.21|^2.0|^3.0|^4.0", + "phpunit/phpunit": "^8.5.21|^9.4.4|^10.0|^11.0|^12.0", + "symfony/var-dumper": "^4.2|^5.0|^6.0|^7.0|^8.0" }, "type": "library", "autoload": { @@ -9563,9 +10113,9 @@ ], "support": { "issues": "https://github.com/spatie/image-optimizer/issues", - "source": "https://github.com/spatie/image-optimizer/tree/1.8.0" + "source": "https://github.com/spatie/image-optimizer/tree/1.8.1" }, - "time": "2024-11-04T08:24:54+00:00" + "time": "2025-11-26T10:57:19+00:00" }, { "name": "spatie/invade", @@ -9628,16 +10178,16 @@ }, { "name": "spatie/laravel-data", - "version": "4.17.1", + "version": "4.18.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-data.git", - "reference": "6ec15bb6798128f01aecb67dcd18a937251a27a5" + "reference": "c10784f1133d540a702bd6db36ed659f4bc0606a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-data/zipball/6ec15bb6798128f01aecb67dcd18a937251a27a5", - "reference": "6ec15bb6798128f01aecb67dcd18a937251a27a5", + "url": "https://api.github.com/repos/spatie/laravel-data/zipball/c10784f1133d540a702bd6db36ed659f4bc0606a", + "reference": "c10784f1133d540a702bd6db36ed659f4bc0606a", "shasum": "" }, "require": { @@ -9699,7 +10249,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-data/issues", - "source": "https://github.com/spatie/laravel-data/tree/4.17.1" + "source": "https://github.com/spatie/laravel-data/tree/4.18.0" }, "funding": [ { @@ -9707,20 +10257,20 @@ "type": "github" } ], - "time": "2025-09-04T08:30:23+00:00" + "time": "2025-10-16T16:44:07+00:00" }, { "name": "spatie/laravel-feed", - "version": "4.4.2", + "version": "4.4.3", "source": { "type": "git", "url": "https://github.com/spatie/laravel-feed.git", - "reference": "4b41c89837cb170e04db57f07f6315b33411e31d" + "reference": "4a28d3e75d202dcb8bc63d8653cfa4f398ebc708" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-feed/zipball/4b41c89837cb170e04db57f07f6315b33411e31d", - "reference": "4b41c89837cb170e04db57f07f6315b33411e31d", + "url": "https://api.github.com/repos/spatie/laravel-feed/zipball/4a28d3e75d202dcb8bc63d8653cfa4f398ebc708", + "reference": "4a28d3e75d202dcb8bc63d8653cfa4f398ebc708", "shasum": "" }, "require": { @@ -9787,7 +10337,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-feed/tree/4.4.2" + "source": "https://github.com/spatie/laravel-feed/tree/4.4.3" }, "funding": [ { @@ -9799,20 +10349,20 @@ "type": "github" } ], - "time": "2025-04-17T09:49:53+00:00" + "time": "2025-11-12T10:10:11+00:00" }, { "name": "spatie/laravel-medialibrary", - "version": "11.15.0", + "version": "11.17.5", "source": { "type": "git", "url": "https://github.com/spatie/laravel-medialibrary.git", - "reference": "9d1e9731d36817d1649bc584b2c40c0c9d4bcfac" + "reference": "eef29bbc701d786f2f6233ca4c40deb61282ac36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/9d1e9731d36817d1649bc584b2c40c0c9d4bcfac", - "reference": "9d1e9731d36817d1649bc584b2c40c0c9d4bcfac", + "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/eef29bbc701d786f2f6233ca4c40deb61282ac36", + "reference": "eef29bbc701d786f2f6233ca4c40deb61282ac36", "shasum": "" }, "require": { @@ -9831,7 +10381,7 @@ "spatie/image": "^3.3.2", "spatie/laravel-package-tools": "^1.16.1", "spatie/temporary-directory": "^2.2", - "symfony/console": "^6.4.1|^7.0" + "symfony/console": "^6.4.1|^7.0|^8.0" }, "conflict": { "php-ffmpeg/php-ffmpeg": "<0.6.1" @@ -9846,7 +10396,7 @@ "league/flysystem-aws-s3-v3": "^3.22", "mockery/mockery": "^1.6.7", "orchestra/testbench": "^7.0|^8.17|^9.0|^10.0", - "pestphp/pest": "^2.28|^3.5", + "pestphp/pest": "^2.28|^3.5|^4.0", "phpstan/extension-installer": "^1.3.1", "spatie/laravel-ray": "^1.33", "spatie/pdf-to-image": "^2.2|^3.0", @@ -9897,7 +10447,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-medialibrary/issues", - "source": "https://github.com/spatie/laravel-medialibrary/tree/11.15.0" + "source": "https://github.com/spatie/laravel-medialibrary/tree/11.17.5" }, "funding": [ { @@ -9909,7 +10459,7 @@ "type": "github" } ], - "time": "2025-09-19T06:51:45+00:00" + "time": "2025-11-13T11:36:18+00:00" }, { "name": "spatie/laravel-package-tools", @@ -9974,16 +10524,16 @@ }, { "name": "spatie/laravel-permission", - "version": "6.21.0", + "version": "6.23.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-permission.git", - "reference": "6a118e8855dfffcd90403aab77bbf35a03db51b3" + "reference": "9e41247bd512b1e6c229afbc1eb528f7565ae3bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/6a118e8855dfffcd90403aab77bbf35a03db51b3", - "reference": "6a118e8855dfffcd90403aab77bbf35a03db51b3", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/9e41247bd512b1e6c229afbc1eb528f7565ae3bb", + "reference": "9e41247bd512b1e6c229afbc1eb528f7565ae3bb", "shasum": "" }, "require": { @@ -10045,7 +10595,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-permission/issues", - "source": "https://github.com/spatie/laravel-permission/tree/6.21.0" + "source": "https://github.com/spatie/laravel-permission/tree/6.23.0" }, "funding": [ { @@ -10053,20 +10603,20 @@ "type": "github" } ], - "time": "2025-07-23T16:08:05+00:00" + "time": "2025-11-03T20:16:13+00:00" }, { "name": "spatie/laravel-sitemap", - "version": "7.3.7", + "version": "7.3.8", "source": { "type": "git", "url": "https://github.com/spatie/laravel-sitemap.git", - "reference": "077b36c64bc4f373f4d95a1ac6ee1c0624acfdd3" + "reference": "9ff614d4834ada564aed5ed88507c9e5baab8e51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-sitemap/zipball/077b36c64bc4f373f4d95a1ac6ee1c0624acfdd3", - "reference": "077b36c64bc4f373f4d95a1ac6ee1c0624acfdd3", + "url": "https://api.github.com/repos/spatie/laravel-sitemap/zipball/9ff614d4834ada564aed5ed88507c9e5baab8e51", + "reference": "9ff614d4834ada564aed5ed88507c9e5baab8e51", "shasum": "" }, "require": { @@ -10076,7 +10626,7 @@ "php": "^8.2||^8.3||^8.4", "spatie/crawler": "^8.0.1", "spatie/laravel-package-tools": "^1.16.1", - "symfony/dom-crawler": "^6.3.4|^7.0" + "symfony/dom-crawler": "^6.3.4|^7.0|^8.0" }, "require-dev": { "mockery/mockery": "^1.6.6", @@ -10118,7 +10668,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-sitemap/tree/7.3.7" + "source": "https://github.com/spatie/laravel-sitemap/tree/7.3.8" }, "funding": [ { @@ -10126,7 +10676,7 @@ "type": "custom" } ], - "time": "2025-08-25T08:07:09+00:00" + "time": "2025-11-25T21:06:08+00:00" }, { "name": "spatie/laravel-sluggable", @@ -10189,29 +10739,29 @@ }, { "name": "spatie/laravel-translatable", - "version": "6.11.4", + "version": "6.12.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-translatable.git", - "reference": "032d85b28de315310dab2048b857016f1194f68b" + "reference": "8fc0c1dd5ab4013c27a28e5d5590f2ce849bd349" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-translatable/zipball/032d85b28de315310dab2048b857016f1194f68b", - "reference": "032d85b28de315310dab2048b857016f1194f68b", + "url": "https://api.github.com/repos/spatie/laravel-translatable/zipball/8fc0c1dd5ab4013c27a28e5d5590f2ce849bd349", + "reference": "8fc0c1dd5ab4013c27a28e5d5590f2ce849bd349", "shasum": "" }, "require": { - "illuminate/database": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "php": "^8.0", - "spatie/laravel-package-tools": "^1.11" + "illuminate/database": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", + "php": "^8.3", + "spatie/laravel-package-tools": "^1.92.7" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.64", - "mockery/mockery": "^1.4", - "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", - "pestphp/pest": "^1.20|^2.0|^3.0" + "friendsofphp/php-cs-fixer": "^3.90", + "mockery/mockery": "^1.6.12", + "orchestra/testbench": "^9.0|^10.0", + "pestphp/pest": "^4.0.0" }, "type": "library", "extra": { @@ -10260,7 +10810,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-translatable/issues", - "source": "https://github.com/spatie/laravel-translatable/tree/6.11.4" + "source": "https://github.com/spatie/laravel-translatable/tree/6.12.0" }, "funding": [ { @@ -10268,41 +10818,39 @@ "type": "github" } ], - "time": "2025-02-20T15:51:22+00:00" + "time": "2025-11-24T15:57:48+00:00" }, { "name": "spatie/php-structure-discoverer", - "version": "2.3.2", + "version": "2.3.3", "source": { "type": "git", "url": "https://github.com/spatie/php-structure-discoverer.git", - "reference": "6c46e069349c7f2f6ebbe00429332c9e6b70fa92" + "reference": "552a5b974a9853a32e5677a66e85ae615a96a90b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/php-structure-discoverer/zipball/6c46e069349c7f2f6ebbe00429332c9e6b70fa92", - "reference": "6c46e069349c7f2f6ebbe00429332c9e6b70fa92", + "url": "https://api.github.com/repos/spatie/php-structure-discoverer/zipball/552a5b974a9853a32e5677a66e85ae615a96a90b", + "reference": "552a5b974a9853a32e5677a66e85ae615a96a90b", "shasum": "" }, "require": { - "illuminate/collections": "^10.0|^11.0|^12.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.4.3", - "symfony/finder": "^6.0|^7.0" + "illuminate/collections": "^11.0|^12.0", + "php": "^8.3", + "spatie/laravel-package-tools": "^1.92.7", + "symfony/finder": "^6.0|^7.3.5|^8.0" }, "require-dev": { - "amphp/parallel": "^2.2", - "illuminate/console": "^10.0|^11.0|^12.0", - "laravel/pint": "^1.0", - "nunomaduro/collision": "^7.0|^8.0", - "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", - "pestphp/pest": "^2.0|^3.0", - "pestphp/pest-plugin-laravel": "^2.0|^3.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.5|^10.0|^11.5.3", - "spatie/laravel-ray": "^1.26" + "amphp/parallel": "^2.3.2", + "illuminate/console": "^11.0|^12.0", + "nunomaduro/collision": "^7.0|^8.8.3", + "orchestra/testbench": "^9.5|^10.8", + "pestphp/pest": "^3.8|^4.0", + "pestphp/pest-plugin-laravel": "^3.2|^4.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan-deprecation-rules": "^1.2.1", + "phpstan/phpstan-phpunit": "^1.4.2", + "spatie/laravel-ray": "^1.43.1" }, "suggest": { "amphp/parallel": "When you want to use the Parallel discover worker" @@ -10341,7 +10889,7 @@ ], "support": { "issues": "https://github.com/spatie/php-structure-discoverer/issues", - "source": "https://github.com/spatie/php-structure-discoverer/tree/2.3.2" + "source": "https://github.com/spatie/php-structure-discoverer/tree/2.3.3" }, "funding": [ { @@ -10349,32 +10897,98 @@ "type": "github" } ], - "time": "2025-09-22T14:58:17+00:00" + "time": "2025-11-24T16:41:01+00:00" }, { "name": "spatie/robots-txt", - "version": "2.5.2", + "version": "2.5.3", "source": { "type": "git", "url": "https://github.com/spatie/robots-txt.git", - "reference": "1b59dde3fd4e1b71967b40841369c6e9779282f3" + "reference": "edb91c798ec70583d41c131019da45fa167af5e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/robots-txt/zipball/1b59dde3fd4e1b71967b40841369c6e9779282f3", - "reference": "1b59dde3fd4e1b71967b40841369c6e9779282f3", + "url": "https://api.github.com/repos/spatie/robots-txt/zipball/edb91c798ec70583d41c131019da45fa167af5e8", + "reference": "edb91c798ec70583d41c131019da45fa167af5e8", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "phpunit/phpunit": "^11.5.2" + "phpunit/phpunit": "^11.5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Robots\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brent Roose", + "email": "brent@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Determine if a page may be crawled from robots.txt and robots meta tags", + "homepage": "https://github.com/spatie/robots-txt", + "keywords": [ + "robots-txt", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/robots-txt/issues", + "source": "https://github.com/spatie/robots-txt/tree/2.5.3" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + }, + { + "url": "https://github.com/spatie", + "type": "github" + } + ], + "time": "2025-11-20T13:00:33+00:00" + }, + { + "name": "spatie/shiki-php", + "version": "2.3.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/shiki-php.git", + "reference": "a2e78a9ff8a1290b25d550be8fbf8285c13175c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/shiki-php/zipball/a2e78a9ff8a1290b25d550be8fbf8285c13175c5", + "reference": "a2e78a9ff8a1290b25d550be8fbf8285c13175c5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.0", + "symfony/process": "^5.4|^6.4|^7.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^v3.0", + "pestphp/pest": "^1.8", + "phpunit/phpunit": "^9.5", + "spatie/pest-plugin-snapshots": "^1.1", + "spatie/ray": "^1.10" }, "type": "library", "autoload": { "psr-4": { - "Spatie\\Robots\\": "src" + "Spatie\\ShikiPhp\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -10383,33 +10997,32 @@ ], "authors": [ { - "name": "Brent Roose", - "email": "brent@spatie.be", - "homepage": "https://spatie.be", + "name": "Rias Van der Veken", + "email": "rias@spatie.be", + "role": "Developer" + }, + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", "role": "Developer" } ], - "description": "Determine if a page may be crawled from robots.txt and robots meta tags", - "homepage": "https://github.com/spatie/robots-txt", + "description": "Highlight code using Shiki in PHP", + "homepage": "https://github.com/spatie/shiki-php", "keywords": [ - "robots-txt", + "shiki", "spatie" ], "support": { - "issues": "https://github.com/spatie/robots-txt/issues", - "source": "https://github.com/spatie/robots-txt/tree/2.5.2" + "source": "https://github.com/spatie/shiki-php/tree/2.3.2" }, "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, { "url": "https://github.com/spatie", "type": "github" } ], - "time": "2025-09-19T10:37:01+00:00" + "time": "2025-02-21T14:16:57+00:00" }, { "name": "spatie/temporary-directory", @@ -10543,16 +11156,16 @@ }, { "name": "symfony/clock", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + "reference": "9169f24776edde469914c1e7a1442a50f7a4e110" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "url": "https://api.github.com/repos/symfony/clock/zipball/9169f24776edde469914c1e7a1442a50f7a4e110", + "reference": "9169f24776edde469914c1e7a1442a50f7a4e110", "shasum": "" }, "require": { @@ -10597,7 +11210,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.3.0" + "source": "https://github.com/symfony/clock/tree/v7.4.0" }, "funding": [ { @@ -10608,25 +11221,29 @@ "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": "2024-09-25T14:21:43+00:00" + "time": "2025-11-12T15:39:26+00:00" }, { "name": "symfony/console", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7" + "reference": "0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", - "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7", + "url": "https://api.github.com/repos/symfony/console/zipball/0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8", + "reference": "0bc0f45254b99c58d45a8fbf9fb955d46cbd1bb8", "shasum": "" }, "require": { @@ -10634,7 +11251,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2" + "symfony/string": "^7.2|^8.0" }, "conflict": { "symfony/dependency-injection": "<6.4", @@ -10648,16 +11265,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -10691,7 +11308,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.3.3" + "source": "https://github.com/symfony/console/tree/v7.4.0" }, "funding": [ { @@ -10711,20 +11328,20 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/css-selector", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab862f478513e7ca2fe9ec117a6f01a8da6e1135", + "reference": "ab862f478513e7ca2fe9ec117a6f01a8da6e1135", "shasum": "" }, "require": { @@ -10760,7 +11377,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.3.0" + "source": "https://github.com/symfony/css-selector/tree/v7.4.0" }, "funding": [ { @@ -10771,12 +11388,16 @@ "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": "2024-09-25T14:21:43+00:00" + "time": "2025-10-30T13:39:42+00:00" }, { "name": "symfony/deprecation-contracts", @@ -10847,26 +11468,25 @@ }, { "name": "symfony/dom-crawler", - "version": "v7.3.3", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba" + "reference": "15d1f7555f3337ded097dbe01c6ea6c59564a64a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/efa076ea0eeff504383ff0dcf827ea5ce15690ba", - "reference": "efa076ea0eeff504383ff0dcf827ea5ce15690ba", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/15d1f7555f3337ded097dbe01c6ea6c59564a64a", + "reference": "15d1f7555f3337ded097dbe01c6ea6c59564a64a", "shasum": "" }, "require": { - "masterminds/html5": "^2.6", - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { - "symfony/css-selector": "^6.4|^7.0" + "symfony/css-selector": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -10894,7 +11514,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.3.3" + "source": "https://github.com/symfony/dom-crawler/tree/v8.0.0" }, "funding": [ { @@ -10914,36 +11534,37 @@ "type": "tidelift" } ], - "time": "2025-08-06T20:13:54+00:00" + "time": "2025-11-01T09:19:23+00:00" }, { "name": "symfony/error-handler", - "version": "v7.3.2", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3" + "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3", - "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/48be2b0653594eea32dcef130cca1c811dcf25c2", + "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2", "shasum": "" }, "require": { "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" }, "conflict": { "symfony/deprecation-contracts": "<2.5", "symfony/http-kernel": "<6.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ @@ -10975,7 +11596,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.3.2" + "source": "https://github.com/symfony/error-handler/tree/v7.4.0" }, "funding": [ { @@ -10995,28 +11616,28 @@ "type": "tidelift" } ], - "time": "2025-07-07T08:17:57+00:00" + "time": "2025-11-05T14:29:59+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.3.3", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191" + "reference": "573f95783a2ec6e38752979db139f09fec033f03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191", - "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/573f95783a2ec6e38752979db139f09fec033f03", + "reference": "573f95783a2ec6e38752979db139f09fec033f03", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/security-http": "<7.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -11025,13 +11646,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -11059,7 +11681,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/v7.3.3" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.0" }, "funding": [ { @@ -11079,7 +11701,7 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2025-10-30T14:17:19+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -11159,25 +11781,25 @@ }, { "name": "symfony/filesystem", - "version": "v7.3.2", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd" + "reference": "7fc96ae83372620eaba3826874f46e26295768ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/edcbb768a186b5c3f25d0643159a787d3e63b7fd", - "reference": "edcbb768a186b5c3f25d0643159a787d3e63b7fd", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7fc96ae83372620eaba3826874f46e26295768ca", + "reference": "7fc96ae83372620eaba3826874f46e26295768ca", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^6.4|^7.0" + "symfony/process": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -11205,7 +11827,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.3.2" + "source": "https://github.com/symfony/filesystem/tree/v8.0.0" }, "funding": [ { @@ -11225,27 +11847,27 @@ "type": "tidelift" } ], - "time": "2025-07-07T08:17:47+00:00" + "time": "2025-11-05T14:36:47+00:00" }, { "name": "symfony/finder", - "version": "v7.3.2", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe" + "reference": "340b9ed7320570f319028a2cbec46d40535e94bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe", - "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe", + "url": "https://api.github.com/repos/symfony/finder/zipball/340b9ed7320570f319028a2cbec46d40535e94bd", + "reference": "340b9ed7320570f319028a2cbec46d40535e94bd", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11273,7 +11895,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.3.2" + "source": "https://github.com/symfony/finder/tree/v7.4.0" }, "funding": [ { @@ -11293,27 +11915,28 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2025-11-05T05:42:40+00:00" }, { "name": "symfony/html-sanitizer", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12" + "reference": "5b0bbcc3600030b535dd0b17a0e8c56243f96d7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/8740fc48979f649dee8b8fc51a2698e5c190bf12", - "reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/5b0bbcc3600030b535dd0b17a0e8c56243f96d7f", + "reference": "5b0bbcc3600030b535dd0b17a0e8c56243f96d7f", "shasum": "" }, "require": { "ext-dom": "*", "league/uri": "^6.5|^7.0", "masterminds/html5": "^2.7.2", - "php": ">=8.2" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -11346,7 +11969,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v7.3.3" + "source": "https://github.com/symfony/html-sanitizer/tree/v7.4.0" }, "funding": [ { @@ -11366,27 +11989,26 @@ "type": "tidelift" } ], - "time": "2025-08-12T10:34:03+00:00" + "time": "2025-10-30T13:39:42+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00" + "reference": "769c1720b68e964b13b58529c17d4a385c62167b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7475561ec27020196c49bb7c4f178d33d7d3dc00", - "reference": "7475561ec27020196c49bb7c4f178d33d7d3dc00", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/769c1720b68e964b13b58529c17d4a385c62167b", + "reference": "769c1720b68e964b13b58529c17d4a385c62167b", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" }, "conflict": { "doctrine/dbal": "<3.6", @@ -11395,13 +12017,13 @@ "require-dev": { "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5", - "symfony/clock": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0" + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11429,7 +12051,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.3.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.4.0" }, "funding": [ { @@ -11449,29 +12071,29 @@ "type": "tidelift" } ], - "time": "2025-08-20T08:04:18+00:00" + "time": "2025-11-13T08:49:24+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b" + "reference": "7348193cd384495a755554382e4526f27c456085" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/72c304de37e1a1cec6d5d12b81187ebd4850a17b", - "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7348193cd384495a755554382e4526f27c456085", + "reference": "7348193cd384495a755554382e4526f27c456085", "shasum": "" }, "require": { "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^7.3", - "symfony/http-foundation": "^7.3", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -11481,6 +12103,7 @@ "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", "symfony/form": "<6.4", "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", @@ -11498,27 +12121,27 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.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|^7.0|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^7.1", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^7.1", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", "twig/twig": "^3.12" }, "type": "library", @@ -11547,7 +12170,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.3.3" + "source": "https://github.com/symfony/http-kernel/tree/v7.4.0" }, "funding": [ { @@ -11567,20 +12190,20 @@ "type": "tidelift" } ], - "time": "2025-08-29T08:23:45+00:00" + "time": "2025-11-27T13:38:24+00:00" }, { "name": "symfony/mailer", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575" + "reference": "a3d9eea8cfa467ece41f0f54ba28185d74bd53fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/a32f3f45f1990db8c4341d5122a7d3a381c7e575", - "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575", + "url": "https://api.github.com/repos/symfony/mailer/zipball/a3d9eea8cfa467ece41f0f54ba28185d74bd53fd", + "reference": "a3d9eea8cfa467ece41f0f54ba28185d74bd53fd", "shasum": "" }, "require": { @@ -11588,8 +12211,8 @@ "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^7.2", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -11600,10 +12223,10 @@ "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -11631,7 +12254,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.3.3" + "source": "https://github.com/symfony/mailer/tree/v7.4.0" }, "funding": [ { @@ -11651,24 +12274,25 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2025-11-21T15:26:00+00:00" }, { "name": "symfony/mime", - "version": "v7.3.2", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1" + "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1", - "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1", + "url": "https://api.github.com/repos/symfony/mime/zipball/bdb02729471be5d047a3ac4a69068748f1a6be7a", + "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -11683,11 +12307,11 @@ "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.3|^7.0.3|^8.0" }, "type": "library", "autoload": { @@ -11719,7 +12343,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.3.2" + "source": "https://github.com/symfony/mime/tree/v7.4.0" }, "funding": [ { @@ -11739,7 +12363,7 @@ "type": "tidelift" } ], - "time": "2025-07-15T13:41:35+00:00" + "time": "2025-11-16T10:14:42+00:00" }, { "name": "symfony/polyfill-ctype", @@ -12732,16 +13356,16 @@ }, { "name": "symfony/process", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "32241012d521e2e8a9d713adb0812bb773b907f1" + "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1", - "reference": "32241012d521e2e8a9d713adb0812bb773b907f1", + "url": "https://api.github.com/repos/symfony/process/zipball/7ca8dc2d0dcf4882658313aba8be5d9fd01026c8", + "reference": "7ca8dc2d0dcf4882658313aba8be5d9fd01026c8", "shasum": "" }, "require": { @@ -12773,7 +13397,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.3" + "source": "https://github.com/symfony/process/tree/v7.4.0" }, "funding": [ { @@ -12793,26 +13417,26 @@ "type": "tidelift" } ], - "time": "2025-08-18T09:42:54+00:00" + "time": "2025-10-16T11:21:06+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.3.0", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f" + "reference": "0101ff8bd0506703b045b1670960302d302a726c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/0101ff8bd0506703b045b1670960302d302a726c", + "reference": "0101ff8bd0506703b045b1670960302d302a726c", "shasum": "" }, "require": { "php": ">=8.2", "psr/http-message": "^1.0|^2.0", - "symfony/http-foundation": "^6.4|^7.0" + "symfony/http-foundation": "^6.4|^7.0|^8.0" }, "conflict": { "php-http/discovery": "<1.15", @@ -12822,11 +13446,12 @@ "nyholm/psr7": "^1.1", "php-http/discovery": "^1.15", "psr/log": "^1.1.4|^2|^3", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0" + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4.13|^7.1.6|^8.0", + "symfony/http-kernel": "^6.4.13|^7.1.6|^8.0", + "symfony/runtime": "^6.4.13|^7.1.6|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -12860,7 +13485,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.3.0" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.4.0" }, "funding": [ { @@ -12871,25 +13496,29 @@ "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": "2024-09-26T08:57:56+00:00" + "time": "2025-11-13T08:38:49+00:00" }, { "name": "symfony/routing", - "version": "v7.3.2", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4" + "reference": "4720254cb2644a0b876233d258a32bf017330db7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4", - "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4", + "url": "https://api.github.com/repos/symfony/routing/zipball/4720254cb2644a0b876233d258a32bf017330db7", + "reference": "4720254cb2644a0b876233d258a32bf017330db7", "shasum": "" }, "require": { @@ -12903,11 +13532,11 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -12941,7 +13570,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.3.2" + "source": "https://github.com/symfony/routing/tree/v7.4.0" }, "funding": [ { @@ -12961,20 +13590,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:36:08+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", - "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -13028,7 +13657,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -13039,44 +13668,47 @@ "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": "2025-04-25T09:37:31+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v7.3.3", + "version": "v8.0.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c" + "reference": "f929eccf09531078c243df72398560e32fa4cf4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", - "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "url": "https://api.github.com/repos/symfony/string/zipball/f929eccf09531078c243df72398560e32fa4cf4f", + "reference": "f929eccf09531078c243df72398560e32fa4cf4f", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -13115,7 +13747,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.3" + "source": "https://github.com/symfony/string/tree/v8.0.0" }, "funding": [ { @@ -13135,27 +13767,27 @@ "type": "tidelift" } ], - "time": "2025-08-25T06:35:40+00:00" + "time": "2025-09-11T14:37:55+00:00" }, { "name": "symfony/translation", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d" + "reference": "2d01ca0da3f092f91eeedb46f24aa30d2fca8f68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d", - "reference": "e0837b4cbcef63c754d89a4806575cada743a38d", + "url": "https://api.github.com/repos/symfony/translation/zipball/2d01ca0da3f092f91eeedb46f24aa30d2fca8f68", + "reference": "2d01ca0da3f092f91eeedb46f24aa30d2fca8f68", "shasum": "" }, "require": { "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" + "symfony/translation-contracts": "^2.5.3|^3.3" }, "conflict": { "nikic/php-parser": "<5.0", @@ -13174,17 +13806,17 @@ "require-dev": { "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" + "symfony/yaml": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -13215,7 +13847,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.3.3" + "source": "https://github.com/symfony/translation/tree/v7.4.0" }, "funding": [ { @@ -13235,20 +13867,20 @@ "type": "tidelift" } ], - "time": "2025-08-01T21:02:37+00:00" + "time": "2025-11-27T13:27:24+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.6.0", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", - "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { @@ -13297,7 +13929,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -13308,25 +13940,29 @@ "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": "2024-09-27T08:32:26+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/uid", - "version": "v7.3.1", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb" + "reference": "2498e9f81b7baa206f44de583f2f48350b90142c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/a69f69f3159b852651a6bf45a9fdd149520525bb", - "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb", + "url": "https://api.github.com/repos/symfony/uid/zipball/2498e9f81b7baa206f44de583f2f48350b90142c", + "reference": "2498e9f81b7baa206f44de583f2f48350b90142c", "shasum": "" }, "require": { @@ -13334,7 +13970,7 @@ "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "type": "library", "autoload": { @@ -13371,7 +14007,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.3.1" + "source": "https://github.com/symfony/uid/tree/v7.4.0" }, "funding": [ { @@ -13382,25 +14018,29 @@ "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": "2025-06-27T19:55:54+00:00" + "time": "2025-09-25T11:02:55+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f" + "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", - "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41fd6c4ae28c38b294b42af6db61446594a0dece", + "reference": "41fd6c4ae28c38b294b42af6db61446594a0dece", "shasum": "" }, "require": { @@ -13412,10 +14052,10 @@ "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", "twig/twig": "^3.12" }, "bin": [ @@ -13454,7 +14094,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.3.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.0" }, "funding": [ { @@ -13474,7 +14114,7 @@ "type": "tidelift" } ], - "time": "2025-08-13T11:49:31+00:00" + "time": "2025-10-27T20:36:44+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -13596,6 +14236,75 @@ }, "time": "2025-03-22T15:38:26+00:00" }, + { + "name": "ueberdosis/tiptap-php", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ueberdosis/tiptap-php.git", + "reference": "458194ad0f8b0cf616fecdf451a84f9a6c1f3056" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ueberdosis/tiptap-php/zipball/458194ad0f8b0cf616fecdf451a84f9a6c1f3056", + "reference": "458194ad0f8b0cf616fecdf451a84f9a6c1f3056", + "shasum": "" + }, + "require": { + "php": "^8.0", + "scrivo/highlight.php": "^9.18", + "spatie/shiki-php": "^2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.5", + "pestphp/pest": "^1.21", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Tiptap\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Hans Pagel", + "email": "humans@tiptap.dev", + "role": "Developer" + } + ], + "description": "A PHP package to work with Tiptap output", + "homepage": "https://github.com/ueberdosis/tiptap-php", + "keywords": [ + "prosemirror", + "tiptap", + "ueberdosis" + ], + "support": { + "issues": "https://github.com/ueberdosis/tiptap-php/issues", + "source": "https://github.com/ueberdosis/tiptap-php/tree/2.0.0" + }, + "funding": [ + { + "url": "https://tiptap.dev/pricing", + "type": "custom" + }, + { + "url": "https://github.com/ueberdosis", + "type": "github" + }, + { + "url": "https://opencollective.com/tiptap", + "type": "open_collective" + } + ], + "time": "2025-06-26T14:11:46+00:00" + }, { "name": "vlucas/phpdotenv", "version": "v5.6.2", @@ -13756,50 +14465,46 @@ }, { "name": "vormkracht10/filament-mails", - "version": "v2.3.8", + "version": "v3.0.6", "source": { "type": "git", "url": "https://github.com/backstagephp/filament-mails.git", - "reference": "c8127787cba01da16132617e09c46aa2d9ffa181" + "reference": "fda281287070f4eb79f97408e1a92b21cddb3daa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/backstagephp/filament-mails/zipball/c8127787cba01da16132617e09c46aa2d9ffa181", - "reference": "c8127787cba01da16132617e09c46aa2d9ffa181", + "url": "https://api.github.com/repos/backstagephp/filament-mails/zipball/fda281287070f4eb79f97408e1a92b21cddb3daa", + "reference": "fda281287070f4eb79f97408e1a92b21cddb3daa", "shasum": "" }, "require": { - "filament/filament": "^3.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.15.0", - "vormkracht10/laravel-mails": "^1.0" + "backstage/laravel-mails": "^2.0", + "filament/filament": "^4.0", + "php": "^8.2", + "spatie/laravel-package-tools": "^1.15.0" }, "require-dev": { - "laravel/pint": "^1.0", - "nunomaduro/collision": "^7.9", - "nunomaduro/larastan": "^2.0.1", - "orchestra/testbench": "^8.0", - "pestphp/pest": "^2.1", - "pestphp/pest-plugin-arch": "^2.0", - "pestphp/pest-plugin-laravel": "^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0" + "laravel/pint": "^1.16", + "nunomaduro/collision": "^8.8.0", + "orchestra/testbench": "^9.0|^10.0", + "pestphp/pest": "^3.7", + "pestphp/pest-plugin-arch": "^3.1.0", + "pestphp/pest-plugin-laravel": "^3.0" }, "type": "library", "extra": { "laravel": { "aliases": { - "FilamentMails": "Vormkracht10\\FilamentMails\\Facades\\FilamentMails" + "FilamentMails": "Backstage\\FilamentMails\\Facades\\FilamentMails" }, "providers": [ - "Vormkracht10\\FilamentMails\\FilamentMailsServiceProvider" + "Backstage\\FilamentMails\\FilamentMailsServiceProvider" ] } }, "autoload": { "psr-4": { - "Vormkracht10\\FilamentMails\\": "src/" + "Backstage\\FilamentMails\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -13814,94 +14519,15 @@ } ], "description": "View logged mails and events in a beautiful Filament UI.", - "homepage": "https://github.com/vormkracht10/filament-mails", + "homepage": "https://github.com/backstagephp/filament-mails", "keywords": [ + "backstagephp", "filament-mails", - "laravel", - "vormkracht10" - ], - "support": { - "issues": "https://github.com/vormkracht10/filament-mails/issues", - "source": "https://github.com/vormkracht10/filament-mails" - }, - "funding": [ - { - "url": "https://github.com/vormkracht10", - "type": "github" - } - ], - "time": "2025-05-26T17:26:20+00:00" - }, - { - "name": "vormkracht10/laravel-mails", - "version": "v1.4.4", - "source": { - "type": "git", - "url": "https://github.com/backstagephp/laravel-mails.git", - "reference": "0d3827c416b15a06db1e6f3b6676903d91bb6c13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/backstagephp/laravel-mails/zipball/0d3827c416b15a06db1e6f3b6676903d91bb6c13", - "reference": "0d3827c416b15a06db1e6f3b6676903d91bb6c13", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0 || ^11.0 || ^12.0", - "laravel/helpers": "^1.7.0", - "php": "^8.1", - "spatie/laravel-package-tools": "^1.15.0" - }, - "require-dev": { - "larastan/larastan": "^3.0", - "laravel-notification-channels/discord": "^1.6", - "laravel-notification-channels/telegram": "^4.0 || ^5.0 || ^6.0", - "laravel/pint": "^1.17.0", - "laravel/slack-notification-channel": "^2.5 || ^3.3.2", - "nunomaduro/collision": "^7.5.0|^8.4", - "orchestra/testbench": "^8.5.0|^9.4.0", - "pestphp/pest": "^3.0", - "pestphp/pest-plugin-laravel": "^3.0", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan-deprecation-rules": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Vormkracht10\\Mails\\MailsServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Vormkracht10\\Mails\\": "src", - "Vormkracht10\\Mails\\Database\\Factories\\": "database/factories" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark van Eijk", - "email": "mark@vormkracht10.nl", - "role": "Developer" - } - ], - "description": "Laravel Mails can collect everything you might want to track about the mails that has been sent by your Laravel app.", - "homepage": "https://github.com/vormkracht10/laravel-mails", - "keywords": [ - "laravel", - "laravel-mails", - "vormkracht10" + "laravel" ], "support": { - "issues": "https://github.com/backstagephp/laravel-mails/issues", - "source": "https://github.com/backstagephp/laravel-mails/tree/v1.4.4" + "issues": "https://github.com/backstagephp/filament-mails/issues", + "source": "https://github.com/backstagephp/filament-mails" }, "funding": [ { @@ -13909,32 +14535,32 @@ "type": "github" } ], - "time": "2025-05-20T09:41:51+00:00" + "time": "2025-10-03T11:13:43+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", "shasum": "" }, "require": { "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", "php": "^7.2 || ^8.0" }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { @@ -13965,9 +14591,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/1.12.1" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2025-10-29T15:56:20+00:00" }, { "name": "wire-elements/modal", @@ -14162,36 +14788,36 @@ }, { "name": "ysfkaya/filament-phone-input", - "version": "v3.2.4", + "version": "v4.0.0", "source": { "type": "git", "url": "https://github.com/ysfkaya/filament-phone-input.git", - "reference": "e7fa55066d61650719d53245999ee6492fa6e870" + "reference": "9258ed00da844b60cf72ac8dbbacbef33e92b787" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ysfkaya/filament-phone-input/zipball/e7fa55066d61650719d53245999ee6492fa6e870", - "reference": "e7fa55066d61650719d53245999ee6492fa6e870", + "url": "https://api.github.com/repos/ysfkaya/filament-phone-input/zipball/9258ed00da844b60cf72ac8dbbacbef33e92b787", + "reference": "9258ed00da844b60cf72ac8dbbacbef33e92b787", "shasum": "" }, "require": { - "filament/filament": "^3.0", - "php": "^8.1", - "propaganistas/laravel-phone": "^5.0|^6.0", + "filament/filament": "^4.0", + "php": "^8.2", + "propaganistas/laravel-phone": "^6.0", "spatie/laravel-package-tools": "^1.92" }, "require-dev": { "laravel/pint": "^1.0", - "nunomaduro/collision": "^7.9|^8.1", - "nunomaduro/larastan": "^2.0|^3.0", - "orchestra/testbench-dusk": "^8.0|^9.0|^10.0", - "pestphp/pest": "^2.0|^3.0", - "pestphp/pest-plugin-arch": "^2.0|^3.0", - "pestphp/pest-plugin-laravel": "^2.0|^3.0", - "pestphp/pest-plugin-livewire": "^2.1|^3.0", + "nunomaduro/collision": "^8.1", + "nunomaduro/larastan": "^3.0", + "orchestra/testbench-dusk": "^10.0", + "pestphp/pest": "^3.0", + "pestphp/pest-plugin-arch": "^3.0", + "pestphp/pest-plugin-laravel": "^3.0", + "pestphp/pest-plugin-livewire": "^3.0", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", - "phpstan/phpstan-phpunit": "^1.0|^2.0" + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-phpunit": "^2.0" }, "type": "library", "extra": { @@ -14220,32 +14846,32 @@ ], "support": { "issues": "https://github.com/ysfkaya/filament-phone-input/issues", - "source": "https://github.com/ysfkaya/filament-phone-input/tree/v3.2.4" + "source": "https://github.com/ysfkaya/filament-phone-input/tree/v4.0.0" }, - "time": "2025-09-04T19:22:20+00:00" + "time": "2025-08-23T17:08:36+00:00" } ], "packages-dev": [ { "name": "barryvdh/laravel-debugbar", - "version": "v3.16.0", + "version": "v3.16.1", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "f265cf5e38577d42311f1a90d619bcd3740bea23" + "reference": "21b2c6fce05453efd4bceb34f9fddaa1cdb44090" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/f265cf5e38577d42311f1a90d619bcd3740bea23", - "reference": "f265cf5e38577d42311f1a90d619bcd3740bea23", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/21b2c6fce05453efd4bceb34f9fddaa1cdb44090", + "reference": "21b2c6fce05453efd4bceb34f9fddaa1cdb44090", "shasum": "" }, "require": { - "illuminate/routing": "^9|^10|^11|^12", - "illuminate/session": "^9|^10|^11|^12", - "illuminate/support": "^9|^10|^11|^12", + "illuminate/routing": "^10|^11|^12", + "illuminate/session": "^10|^11|^12", + "illuminate/support": "^10|^11|^12", "php": "^8.1", - "php-debugbar/php-debugbar": "~2.2.0", + "php-debugbar/php-debugbar": "^2.2.4", "symfony/finder": "^6|^7" }, "require-dev": { @@ -14297,7 +14923,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.0" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.16.1" }, "funding": [ { @@ -14309,7 +14935,7 @@ "type": "github" } ], - "time": "2025-07-14T11:56:43+00:00" + "time": "2025-11-19T08:31:25+00:00" }, { "name": "brianium/paratest", @@ -14406,21 +15032,22 @@ }, { "name": "driftingly/rector-laravel", - "version": "2.0.7", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/driftingly/rector-laravel.git", - "reference": "625dc02cee08d47ecf0ac86de2f02a55026cf34e" + "reference": "2f1e9c3997bf45592d58916f0cedd775e844b9c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/driftingly/rector-laravel/zipball/625dc02cee08d47ecf0ac86de2f02a55026cf34e", - "reference": "625dc02cee08d47ecf0ac86de2f02a55026cf34e", + "url": "https://api.github.com/repos/driftingly/rector-laravel/zipball/2f1e9c3997bf45592d58916f0cedd775e844b9c6", + "reference": "2f1e9c3997bf45592d58916f0cedd775e844b9c6", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "rector/rector": "^2.0" + "rector/rector": "^2.2.7", + "webmozart/assert": "^1.11" }, "type": "rector-extension", "autoload": { @@ -14435,9 +15062,9 @@ "description": "Rector upgrades rules for Laravel Framework", "support": { "issues": "https://github.com/driftingly/rector-laravel/issues", - "source": "https://github.com/driftingly/rector-laravel/tree/2.0.7" + "source": "https://github.com/driftingly/rector-laravel/tree/2.1.3" }, - "time": "2025-08-19T20:49:47+00:00" + "time": "2025-11-04T18:32:57+00:00" }, { "name": "fakerphp/faker", @@ -14563,6 +15190,53 @@ ], "time": "2025-08-14T07:29:31+00:00" }, + { + "name": "filament/upgrade", + "version": "v4.2.4", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/upgrade.git", + "reference": "31b03a80a99e203ba0b7bfbfb9566974e0346be7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/upgrade/zipball/31b03a80a99e203ba0b7bfbfb9566974e0346be7", + "reference": "31b03a80a99e203ba0b7bfbfb9566974e0346be7", + "shasum": "" + }, + "require": { + "nunomaduro/termwind": "^2.0", + "php": "^8.2", + "rector/rector": "^2.0" + }, + "bin": [ + "bin/filament-v4" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\Upgrade\\UpgradeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\Upgrade\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Upgrade Filament v3 code to Filament v4.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2025-11-28T11:21:29+00:00" + }, { "name": "filp/whoops", "version": "2.18.4", @@ -14788,16 +15462,16 @@ }, { "name": "larastan/larastan", - "version": "v3.7.2", + "version": "v3.8.0", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "a761859a7487bd7d0cb8b662a7538a234d5bb5ae" + "reference": "d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/a761859a7487bd7d0cb8b662a7538a234d5bb5ae", - "reference": "a761859a7487bd7d0cb8b662a7538a234d5bb5ae", + "url": "https://api.github.com/repos/larastan/larastan/zipball/d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e", + "reference": "d13ef96d652d1b2a8f34f1760ba6bf5b9c98112e", "shasum": "" }, "require": { @@ -14811,7 +15485,7 @@ "illuminate/pipeline": "^11.44.2 || ^12.4.1", "illuminate/support": "^11.44.2 || ^12.4.1", "php": "^8.2", - "phpstan/phpstan": "^2.1.28" + "phpstan/phpstan": "^2.1.29" }, "require-dev": { "doctrine/coding-standard": "^13", @@ -14824,7 +15498,8 @@ "phpunit/phpunit": "^10.5.35 || ^11.5.15" }, "suggest": { - "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench", + "phpmyadmin/sql-parser": "Install to enable Larastan's optional phpMyAdmin-based SQL parser automatically" }, "type": "phpstan-extension", "extra": { @@ -14865,7 +15540,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v3.7.2" + "source": "https://github.com/larastan/larastan/tree/v3.8.0" }, "funding": [ { @@ -14873,31 +15548,31 @@ "type": "github" } ], - "time": "2025-09-19T09:03:05+00:00" + "time": "2025-10-27T23:09:14+00:00" }, { "name": "laravel/boost", - "version": "v1.2.0", + "version": "v1.8.3", "source": { "type": "git", "url": "https://github.com/laravel/boost.git", - "reference": "85f7de54a6b60f684fc9f7f6df5ad94f4f7d0d24" + "reference": "26572e858e67334952779c0110ca4c378a44d28d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/boost/zipball/85f7de54a6b60f684fc9f7f6df5ad94f4f7d0d24", - "reference": "85f7de54a6b60f684fc9f7f6df5ad94f4f7d0d24", + "url": "https://api.github.com/repos/laravel/boost/zipball/26572e858e67334952779c0110ca4c378a44d28d", + "reference": "26572e858e67334952779c0110ca4c378a44d28d", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "^7.10", + "guzzlehttp/guzzle": "^7.9", "illuminate/console": "^10.49.0|^11.45.3|^12.28.1", "illuminate/contracts": "^10.49.0|^11.45.3|^12.28.1", "illuminate/routing": "^10.49.0|^11.45.3|^12.28.1", "illuminate/support": "^10.49.0|^11.45.3|^12.28.1", - "laravel/mcp": "^0.2.0", + "laravel/mcp": "^0.3.4", "laravel/prompts": "0.1.25|^0.3.6", - "laravel/roster": "^0.2.6", + "laravel/roster": "^0.2.9", "php": "^8.1" }, "require-dev": { @@ -14905,7 +15580,8 @@ "mockery/mockery": "^1.6.12", "orchestra/testbench": "^8.36.0|^9.15.0|^10.6", "pestphp/pest": "^2.36.0|^3.8.4", - "phpstan/phpstan": "^2.1.27" + "phpstan/phpstan": "^2.1.27", + "rector/rector": "^2.1" }, "type": "library", "extra": { @@ -14938,7 +15614,7 @@ "issues": "https://github.com/laravel/boost/issues", "source": "https://github.com/laravel/boost" }, - "time": "2025-09-18T13:05:07+00:00" + "time": "2025-11-26T14:12:52+00:00" }, { "name": "laravel/breeze", @@ -15003,16 +15679,16 @@ }, { "name": "laravel/mcp", - "version": "v0.2.0", + "version": "v0.3.4", "source": { "type": "git", "url": "https://github.com/laravel/mcp.git", - "reference": "56fade6882756d5828cc90b86611d29616c2d754" + "reference": "0b86fb613a0df971cec89271c674a677c2cb4f77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/mcp/zipball/56fade6882756d5828cc90b86611d29616c2d754", - "reference": "56fade6882756d5828cc90b86611d29616c2d754", + "url": "https://api.github.com/repos/laravel/mcp/zipball/0b86fb613a0df971cec89271c674a677c2cb4f77", + "reference": "0b86fb613a0df971cec89271c674a677c2cb4f77", "shasum": "" }, "require": { @@ -15033,7 +15709,7 @@ "orchestra/testbench": "^8.36.0|^9.15.0|^10.6.0", "pestphp/pest": "^2.36.0|^3.8.4|^4.1.0", "phpstan/phpstan": "^2.1.27", - "rector/rector": "^2.1.7" + "rector/rector": "^2.2.4" }, "type": "library", "extra": { @@ -15072,20 +15748,20 @@ "issues": "https://github.com/laravel/mcp/issues", "source": "https://github.com/laravel/mcp" }, - "time": "2025-09-18T12:58:47+00:00" + "time": "2025-11-18T14:41:05+00:00" }, { "name": "laravel/pail", - "version": "v1.2.3", + "version": "v1.2.4", "source": { "type": "git", "url": "https://github.com/laravel/pail.git", - "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a" + "reference": "49f92285ff5d6fc09816e976a004f8dec6a0ea30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pail/zipball/8cc3d575c1f0e57eeb923f366a37528c50d2385a", - "reference": "8cc3d575c1f0e57eeb923f366a37528c50d2385a", + "url": "https://api.github.com/repos/laravel/pail/zipball/49f92285ff5d6fc09816e976a004f8dec6a0ea30", + "reference": "49f92285ff5d6fc09816e976a004f8dec6a0ea30", "shasum": "" }, "require": { @@ -15102,9 +15778,9 @@ "require-dev": { "laravel/framework": "^10.24|^11.0|^12.0", "laravel/pint": "^1.13", - "orchestra/testbench-core": "^8.13|^9.0|^10.0", - "pestphp/pest": "^2.20|^3.0", - "pestphp/pest-plugin-type-coverage": "^2.3|^3.0", + "orchestra/testbench-core": "^8.13|^9.17|^10.8", + "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" }, @@ -15151,20 +15827,20 @@ "issues": "https://github.com/laravel/pail/issues", "source": "https://github.com/laravel/pail" }, - "time": "2025-06-05T13:55:57+00:00" + "time": "2025-11-20T16:29:35+00:00" }, { "name": "laravel/pint", - "version": "v1.25.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9" + "reference": "69dcca060ecb15e4b564af63d1f642c81a241d6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/5016e263f95d97670d71b9a987bd8996ade6d8d9", - "reference": "5016e263f95d97670d71b9a987bd8996ade6d8d9", + "url": "https://api.github.com/repos/laravel/pint/zipball/69dcca060ecb15e4b564af63d1f642c81a241d6f", + "reference": "69dcca060ecb15e4b564af63d1f642c81a241d6f", "shasum": "" }, "require": { @@ -15175,13 +15851,13 @@ "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.87.2", - "illuminate/view": "^11.46.0", - "larastan/larastan": "^3.7.1", - "laravel-zero/framework": "^11.45.0", + "friendsofphp/php-cs-fixer": "^3.90.0", + "illuminate/view": "^12.40.1", + "larastan/larastan": "^3.8.0", + "laravel-zero/framework": "^12.0.4", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^2.3.1", - "pestphp/pest": "^2.36.0" + "nunomaduro/termwind": "^2.3.3", + "pestphp/pest": "^3.8.4" }, "bin": [ "builds/pint" @@ -15207,6 +15883,7 @@ "description": "An opinionated code formatter for PHP.", "homepage": "https://laravel.com", "keywords": [ + "dev", "format", "formatter", "lint", @@ -15217,20 +15894,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-09-19T02:57:12+00:00" + "time": "2025-11-25T21:15:52+00:00" }, { "name": "laravel/roster", - "version": "v0.2.8", + "version": "v0.2.9", "source": { "type": "git", "url": "https://github.com/laravel/roster.git", - "reference": "832a6db43743bf08a58691da207f977ec8dc43aa" + "reference": "82bbd0e2de614906811aebdf16b4305956816fa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/roster/zipball/832a6db43743bf08a58691da207f977ec8dc43aa", - "reference": "832a6db43743bf08a58691da207f977ec8dc43aa", + "url": "https://api.github.com/repos/laravel/roster/zipball/82bbd0e2de614906811aebdf16b4305956816fa6", + "reference": "82bbd0e2de614906811aebdf16b4305956816fa6", "shasum": "" }, "require": { @@ -15278,20 +15955,20 @@ "issues": "https://github.com/laravel/roster/issues", "source": "https://github.com/laravel/roster" }, - "time": "2025-09-22T13:28:47+00:00" + "time": "2025-10-20T09:56:46+00:00" }, { "name": "laravel/sail", - "version": "v1.45.0", + "version": "v1.48.1", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "019a2933ff4a9199f098d4259713f9bc266a874e" + "reference": "ef122b223f5fca5e5d88bda5127c846710886329" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/019a2933ff4a9199f098d4259713f9bc266a874e", - "reference": "019a2933ff4a9199f098d4259713f9bc266a874e", + "url": "https://api.github.com/repos/laravel/sail/zipball/ef122b223f5fca5e5d88bda5127c846710886329", + "reference": "ef122b223f5fca5e5d88bda5127c846710886329", "shasum": "" }, "require": { @@ -15304,7 +15981,7 @@ }, "require-dev": { "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", - "phpstan/phpstan": "^1.10" + "phpstan/phpstan": "^2.0" }, "bin": [ "bin/sail" @@ -15341,7 +16018,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2025-08-25T19:28:31+00:00" + "time": "2025-11-17T22:05:34+00:00" }, { "name": "mockery/mockery", @@ -15488,16 +16165,16 @@ }, { "name": "nunomaduro/collision", - "version": "v8.8.2", + "version": "v8.8.3", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "60207965f9b7b7a4ce15a0f75d57f9dadb105bdb" + "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/60207965f9b7b7a4ce15a0f75d57f9dadb105bdb", - "reference": "60207965f9b7b7a4ce15a0f75d57f9dadb105bdb", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4", + "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4", "shasum": "" }, "require": { @@ -15519,7 +16196,7 @@ "laravel/sanctum": "^4.1.1", "laravel/tinker": "^2.10.1", "orchestra/testbench-core": "^9.12.0 || ^10.4", - "pestphp/pest": "^3.8.2", + "pestphp/pest": "^3.8.2 || ^4.0.0", "sebastian/environment": "^7.2.1 || ^8.0" }, "type": "library", @@ -15583,7 +16260,7 @@ "type": "patreon" } ], - "time": "2025-06-25T02:12:12+00:00" + "time": "2025-11-20T02:55:25+00:00" }, { "name": "pestphp/pest", @@ -16242,16 +16919,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.28", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "578fa296a166605d97b94091f724f1257185d278" - }, + "version": "2.1.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/578fa296a166605d97b94091f724f1257185d278", - "reference": "578fa296a166605d97b94091f724f1257185d278", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", + "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", "shasum": "" }, "require": { @@ -16296,7 +16968,7 @@ "type": "github" } ], - "time": "2025-09-19T08:58:49+00:00" + "time": "2025-11-11T15:18:17+00:00" }, { "name": "phpunit/php-code-coverage", @@ -16744,21 +17416,21 @@ }, { "name": "rector/rector", - "version": "2.1.7", + "version": "2.2.9", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "c34cc07c4698f007a20dc5c99ff820089ae413ce" + "reference": "0b8e49ec234877b83244d2ecd0df7a4c16471f05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/c34cc07c4698f007a20dc5c99ff820089ae413ce", - "reference": "c34cc07c4698f007a20dc5c99ff820089ae413ce", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/0b8e49ec234877b83244d2ecd0df7a4c16471f05", + "reference": "0b8e49ec234877b83244d2ecd0df7a4c16471f05", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.18" + "phpstan/phpstan": "^2.1.32" }, "conflict": { "rector/rector-doctrine": "*", @@ -16792,7 +17464,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.1.7" + "source": "https://github.com/rectorphp/rector/tree/2.2.9" }, "funding": [ { @@ -16800,7 +17472,7 @@ "type": "github" } ], - "time": "2025-09-10T11:13:58+00:00" + "time": "2025-11-28T14:21:22+00:00" }, { "name": "sebastian/cli-parser", @@ -17267,16 +17939,16 @@ }, { "name": "sebastian/exporter", - "version": "6.3.1", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "8f67e53d3fcaf53105f95cc14f1630493d0fa2e6" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/8f67e53d3fcaf53105f95cc14f1630493d0fa2e6", - "reference": "8f67e53d3fcaf53105f95cc14f1630493d0fa2e6", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { @@ -17333,7 +18005,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.1" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { @@ -17353,7 +18025,7 @@ "type": "tidelift" } ], - "time": "2025-09-22T05:34:00+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", @@ -17909,28 +18581,28 @@ }, { "name": "symfony/yaml", - "version": "v7.3.3", + "version": "v7.4.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d4f4a66866fe2451f61296924767280ab5732d9d" + "reference": "6c84a4b55aee4cd02034d1c528e83f69ddf63810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d", - "reference": "d4f4a66866fe2451f61296924767280ab5732d9d", + "url": "https://api.github.com/repos/symfony/yaml/zipball/6c84a4b55aee4cd02034d1c528e83f69ddf63810", + "reference": "6c84a4b55aee4cd02034d1c528e83f69ddf63810", "shasum": "" }, "require": { "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^6.4|^7.0|^8.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -17961,7 +18633,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.3.3" + "source": "https://github.com/symfony/yaml/tree/v7.4.0" }, "funding": [ { @@ -17981,7 +18653,7 @@ "type": "tidelift" } ], - "time": "2025-08-27T11:34:33+00:00" + "time": "2025-11-16T10:14:42+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", @@ -18044,16 +18716,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -18082,7 +18754,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.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -18090,11 +18762,11 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], - "minimum-stability": "dev", + "minimum-stability": "stable", "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, @@ -18104,5 +18776,5 @@ "ext-json": "*" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/config/filament-mails.php b/config/filament-mails.php index 82344d85..5d49be76 100644 --- a/config/filament-mails.php +++ b/config/filament-mails.php @@ -2,9 +2,9 @@ declare(strict_types=1); -use Vormkracht10\FilamentMails\Resources\EventResource; -use Vormkracht10\FilamentMails\Resources\MailResource; -use Vormkracht10\FilamentMails\Resources\SuppressionResource; +use Backstage\FilamentMails\Resources\EventResource; +use Backstage\FilamentMails\Resources\MailResource; +use Backstage\FilamentMails\Resources\SuppressionResource; return [ 'resources' => [ diff --git a/config/filament.php b/config/filament.php index bf4c60a0..ee517d76 100644 --- a/config/filament.php +++ b/config/filament.php @@ -22,6 +22,12 @@ // 'broadcaster' => 'pusher', // 'key' => env('VITE_PUSHER_APP_KEY'), // 'cluster' => env('VITE_PUSHER_APP_CLUSTER'), + // 'wsHost' => env('VITE_PUSHER_HOST'), + // 'wsPort' => env('VITE_PUSHER_PORT'), + // 'wssPort' => env('VITE_PUSHER_PORT'), + // 'authEndpoint' => '/broadcasting/auth', + // 'disableStats' => true, + // 'encrypted' => true, // 'forceTLS' => true, // ], @@ -32,11 +38,85 @@ | Default Filesystem Disk |-------------------------------------------------------------------------- | - | This is the storage disk Filament will use to put media. You may use any - | of the disks defined in the `config/filesystems.php`. + | This is the storage disk Filament will use to store files. You may use + | any of the disks defined in the `config/filesystems.php`. | */ - 'default_filesystem_disk' => env('FILAMENT_FILESYSTEM_DISK', 'public'), + 'default_filesystem_disk' => env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Assets Path + |-------------------------------------------------------------------------- + | + | This is the directory where Filament's assets will be published to. It + | is relative to the `public` directory of your Laravel application. + | + | After changing the path, you should run `php artisan filament:assets`. + | + */ + + 'assets_path' => null, + + /* + |-------------------------------------------------------------------------- + | Cache Path + |-------------------------------------------------------------------------- + | + | This is the directory that Filament will use to store cache files that + | are used to optimize the registration of components. + | + | After changing the path, you should run `php artisan filament:cache-components`. + | + */ + + 'cache_path' => base_path('bootstrap/cache/filament'), + + /* + |-------------------------------------------------------------------------- + | Livewire Loading Delay + |-------------------------------------------------------------------------- + | + | This sets the delay before loading indicators appear. + | + | Setting this to 'none' makes indicators appear immediately, which can be + | desirable for high-latency connections. Setting it to 'default' applies + | Livewire's standard 200ms delay. + | + */ + + 'livewire_loading_delay' => 'default', + + /* + |-------------------------------------------------------------------------- + | File Generation + |-------------------------------------------------------------------------- + | + | Artisan commands that generate files can be configured here by setting + | configuration flags that will impact their location or content. + | + | Often, this is useful to preserve file generation behavior from a + | previous version of Filament, to ensure consistency between older and + | newer generated files. These flags are often documented in the upgrade + | guide for the version of Filament you are upgrading to. + | + */ + + 'file_generation' => [ + 'flags' => [], + ], + + /* + |-------------------------------------------------------------------------- + | System Route Prefix + |-------------------------------------------------------------------------- + | + | This is the prefix used for the system routes that Filament registers, + | such as the routes for downloading exports and failed import rows. + | + */ + + 'system_route_prefix' => 'filament', ]; diff --git a/config/gamify.php b/config/gamify.php index f5aa2b6c..02a1fa16 100644 --- a/config/gamify.php +++ b/config/gamify.php @@ -6,6 +6,7 @@ use Laravelcm\Gamify\Models\Reputation; return [ + 'payee_model' => User::class, 'reputation_model' => Reputation::class, @@ -15,4 +16,5 @@ 'broadcast_on_private_channel' => true, 'channel_name' => 'user.reputation.', + ]; diff --git a/config/livewire.php b/config/livewire.php index d91716d3..6decbb4e 100644 --- a/config/livewire.php +++ b/config/livewire.php @@ -131,7 +131,7 @@ 'navigate' => [ 'show_progress_bar' => true, - 'progress_bar_color' => '#ffdc44', + 'progress_bar_color' => '#099170', ], /* diff --git a/config/mails.php b/config/mails.php index a88ae65e..9e5be8bf 100644 --- a/config/mails.php +++ b/config/mails.php @@ -2,14 +2,13 @@ declare(strict_types=1); -use Vormkracht10\Mails\Models\Mail; -use Vormkracht10\Mails\Models\MailAttachment; -use Vormkracht10\Mails\Models\MailEvent; +use Backstage\Mails\Events\MailEvent; +use Backstage\Mails\Models\Mail; +use Backstage\Mails\Models\MailAttachment; return [ // Eloquent model to use for sent emails - 'models' => [ 'mail' => Mail::class, 'event' => MailEvent::class, @@ -17,7 +16,6 @@ ], // Table names for saving sent emails and polymorphic relations to database - 'database' => [ 'tables' => [ 'mails' => 'mails', diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 5ef96ce9..8ba81b4b 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -42,9 +42,8 @@ services: SESSION_PATH: ${SESSION_PATH} SESSION_DOMAIN: ${SESSION_DOMAIN} BROADCAST_CONNECTION: ${BROADCAST_CONNECTION} - FILESYSTEM_DISK: ${FILESYSTEM_DISK} MEDIA_DISK: ${MEDIA_DISK} - FILAMENT_FILESYSTEM_DISK: ${MEDIA_DISK} + FILESYSTEM_DISK: ${FILESYSTEM_DISK} FILAMENT_PATH: ${FILAMENT_PATH} QUEUE_CONNECTION: ${QUEUE_CONNECTION} CACHE_STORE: ${CACHE_STORE} @@ -177,9 +176,8 @@ services: SESSION_PATH: ${SESSION_PATH} SESSION_DOMAIN: ${SESSION_DOMAIN} BROADCAST_CONNECTION: ${BROADCAST_CONNECTION} - FILESYSTEM_DISK: ${FILESYSTEM_DISK} MEDIA_DISK: ${MEDIA_DISK} - FILAMENT_FILESYSTEM_DISK: ${MEDIA_DISK} + FILESYSTEM_DISK: ${FILESYSTEM_DISK} FILAMENT_PATH: ${FILAMENT_PATH} QUEUE_CONNECTION: ${QUEUE_CONNECTION} CACHE_STORE: ${CACHE_STORE} @@ -257,20 +255,6 @@ services: DB_PASSWORD_SECOND: '${DB_PASSWORD_SECOND:-}' BOOST_BROWSER_LOGS_WATCHER: '${BOOST_BROWSER_LOGS_WATCHER:-false}' OCTANE_SERVER: 'frankenphp' - CADDY_GLOBAL_OPTIONS: | - servers { - trusted_proxies static private_ranges - } - CADDY_SERVER_EXTRA_DIRECTIVES: | - @static { - file - path *.ico *.css *.js *.gif *.webp *.avif *.jpg *.jpeg *.png *.svg *.woff *.woff2 - } - header @static Cache-Control "public, max-age=31536000, s-maxage=31536000" - FRANKENPHP_CONFIG: | - worker { - file ./public/frankenphp-worker.php - } volumes: - storage:/var/www/html/storage networks: @@ -321,9 +305,8 @@ services: SESSION_PATH: ${SESSION_PATH} SESSION_DOMAIN: ${SESSION_DOMAIN} BROADCAST_CONNECTION: ${BROADCAST_CONNECTION} - FILESYSTEM_DISK: ${FILESYSTEM_DISK} MEDIA_DISK: ${MEDIA_DISK} - FILAMENT_FILESYSTEM_DISK: ${MEDIA_DISK} + FILESYSTEM_DISK: ${FILESYSTEM_DISK} FILAMENT_PATH: ${FILAMENT_PATH} QUEUE_CONNECTION: ${QUEUE_CONNECTION} CACHE_STORE: ${CACHE_STORE} @@ -401,20 +384,6 @@ services: DB_PASSWORD_SECOND: '${DB_PASSWORD_SECOND:-}' BOOST_BROWSER_LOGS_WATCHER: '${BOOST_BROWSER_LOGS_WATCHER:-false}' OCTANE_SERVER: 'frankenphp' - CADDY_GLOBAL_OPTIONS: | - servers { - trusted_proxies static private_ranges - } - CADDY_SERVER_EXTRA_DIRECTIVES: | - @static { - file - path *.ico *.css *.js *.gif *.webp *.avif *.jpg *.jpeg *.png *.svg *.woff *.woff2 - } - header @static Cache-Control "public, max-age=31536000, s-maxage=31536000" - FRANKENPHP_CONFIG: | - worker { - file ./public/frankenphp-worker.php - } volumes: - storage:/var/www/html/storage networks: diff --git a/package-lock.json b/package-lock.json index 8f2da6ee..578be0d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,19 @@ { - "name": "html", + "name": "laravel.cm", "lockfileVersion": 3, "requires": true, "packages": { "": { - "dependencies": { - "@tailwindplus/elements": "^1.0.13" - }, "devDependencies": { "@alpinejs/collapse": "^3.14.3", "@alpinejs/intersect": "^3.6.1", "@awcodes/alpine-floating-ui": "^3.5.0", "@ryangjchandler/alpine-tooltip": "^2.0.1", - "@tailwindcss/aspect-ratio": "^0.4.2", - "@tailwindcss/forms": "^0.5.7", - "@tailwindcss/typography": "^0.5.10", + "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/postcss": "^4.1.13", + "@tailwindcss/typography": "^0.5.18", + "@tailwindcss/vite": "^4.1.13", + "@tailwindplus/elements": "^1.0.13", "alpinejs": "^3.12.0", "autoprefixer": "^10.4.16", "highlight.js": "^11.7.0", @@ -25,7 +24,7 @@ "postcss-preset-env": "^10.1.0", "prettier": "^3.2.5", "prettier-plugin-tailwindcss": "^0.6.8", - "tailwindcss": "^3.4.10", + "tailwindcss": "^4.1.13", "tippy.js": "^6.3.7", "vite": "^7.1.7" } @@ -200,6 +199,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -223,6 +223,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -337,6 +338,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -744,6 +746,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -1766,22 +1769,17 @@ "node": ">=18" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "minipass": "^7.0.4" }, "engines": { - "node": ">=12" + "node": ">=18.0.0" } }, "node_modules/@jridgewell/gen-mapping": { @@ -1795,6 +1793,17 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -1813,9 +1822,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", - "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "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": { @@ -1823,55 +1832,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -2186,16 +2146,6 @@ "tippy.js": "^6.3.1" } }, - "node_modules/@tailwindcss/aspect-ratio": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/aspect-ratio/-/aspect-ratio-0.4.2.tgz", - "integrity": "sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" - } - }, "node_modules/@tailwindcss/forms": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", @@ -2209,26 +2159,315 @@ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" } }, + "node_modules/@tailwindcss/node": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", + "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.18", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.13.tgz", + "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-x64": "4.1.13", + "@tailwindcss/oxide-freebsd-x64": "4.1.13", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.13", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.13", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-x64-musl": "4.1.13", + "@tailwindcss/oxide-wasm32-wasi": "4.1.13", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.13", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz", + "integrity": "sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz", + "integrity": "sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz", + "integrity": "sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz", + "integrity": "sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz", + "integrity": "sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz", + "integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz", + "integrity": "sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz", + "integrity": "sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz", + "integrity": "sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz", + "integrity": "sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz", + "integrity": "sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz", + "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.13.tgz", + "integrity": "sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.13", + "@tailwindcss/oxide": "4.1.13", + "postcss": "^8.4.41", + "tailwindcss": "4.1.13" + } + }, "node_modules/@tailwindcss/typography": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", - "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==", + "version": "0.5.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.18.tgz", + "integrity": "sha512-dDIgwZOlf+tVkZ7A029VvQ1+ngKATENDjMEx2N35s2yPjfTS05RWSM8ilhEWSa5DMJ6ci2Ha9WNZEd2GQjrdQg==", "dev": true, "license": "MIT", "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, + "node_modules/@tailwindcss/vite": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.13.tgz", + "integrity": "sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.1.13", + "@tailwindcss/oxide": "4.1.13", + "tailwindcss": "4.1.13" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7" + } + }, "node_modules/@tailwindplus/elements": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@tailwindplus/elements/-/elements-1.0.13.tgz", "integrity": "sha512-Y0K4D47rf/+Bnj2NLPl+AJykujDsEtcF+CL1DiVnE/qjmxA50+FSACNKmoyAPURq6RF/IrS0YIb8xUjtvstCSw==", + "dev": true, "license": "SEE LICENSE IN LICENSE.md" }, "node_modules/@types/estree": { @@ -2265,60 +2504,6 @@ "@vue/reactivity": "~3.1.1" } }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, - "license": "MIT" - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2364,53 +2549,10 @@ "postcss": "^8.1.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.25.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", - "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", + "node_modules/browserslist": { + "version": "4.25.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", + "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", "dev": true, "funding": [ { @@ -2427,6 +2569,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001737", "electron-to-chromium": "^1.5.211", @@ -2450,16 +2593,6 @@ "node": ">=6" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001741", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz", @@ -2481,72 +2614,14 @@ ], "license": "CC-BY-4.0" }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "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/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 6" + "node": ">=18" } }, "node_modules/cosmiconfig": { @@ -2576,21 +2651,6 @@ } } }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/css-blank-pseudo": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", @@ -2688,6 +2748,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2749,26 +2810,15 @@ "node": ">=4" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/detect-libc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } }, "node_modules/electron-to-chromium": { "version": "1.5.215", @@ -2777,12 +2827,19 @@ "dev": true, "license": "ISC" }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } }, "node_modules/env-paths": { "version": "2.2.1", @@ -2856,76 +2913,6 @@ "node": ">=6" } }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -2955,62 +2942,12 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "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": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } + "license": "ISC" }, "node_modules/highlight.js": { "version": "11.11.1", @@ -3046,101 +2983,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jiti": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", @@ -3198,83 +3040,267 @@ "vite": "^7.0.0" } }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, "engines": { - "node": ">=14" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/antonk52" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC" + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8.6" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/mini-svg-data-uri": { @@ -3287,22 +3313,6 @@ "mini-svg-data-uri": "cli.js" } }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -3313,16 +3323,17 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" } }, "node_modules/nanoid": { @@ -3351,16 +3362,6 @@ "dev": true, "license": "MIT" }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -3371,33 +3372,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3430,40 +3404,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -3484,26 +3424,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -3524,6 +3444,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -3983,44 +3904,6 @@ "postcss": "^8.4" } }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, "node_modules/postcss-lab-function": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.11.tgz", @@ -4051,42 +3934,6 @@ "postcss": "^8.4" } }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, "node_modules/postcss-loader": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.2.0.tgz", @@ -4145,72 +3992,32 @@ "postcss": "^8.4" } }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "node_modules/postcss-nesting": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", + "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "type": "github", + "url": "https://github.com/sponsors/csstools" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "opencollective", + "url": "https://opencollective.com/csstools" } ], - "license": "MIT", + "license": "MIT-0", "dependencies": { - "postcss-selector-parser": "^6.1.1" + "@csstools/selector-resolve-nested": "^3.1.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">=12.0" + "node": ">=18" }, "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nested/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-nesting": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", - "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-resolve-nested": "^3.1.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.4" } }, "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { @@ -4265,6 +4072,7 @@ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -4566,6 +4374,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -4663,71 +4472,6 @@ } } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -4738,17 +4482,6 @@ "node": ">=4" } }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rollup": { "version": "4.50.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz", @@ -4790,30 +4523,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", @@ -4827,42 +4536,6 @@ "node": ">=10" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4873,229 +4546,43 @@ "node": ">=0.10.0" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "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/string-width-cjs/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/string-width-cjs/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/string-width-cjs/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/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "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/strip-ansi-cjs/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/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "node_modules/tailwindcss": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", + "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } + "peer": true }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/tapable": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tailwindcss": { - "version": "3.4.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", - "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.6.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.6", - "lilconfig": "^3.1.3", - "micromatch": "^4.0.8", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "thenify": ">= 3.1.0 < 4" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=18" } }, "node_modules/tinyglobby": { @@ -5139,6 +4626,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5156,26 +4644,6 @@ "@popperjs/core": "^2.9.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -5220,6 +4688,7 @@ "integrity": "sha512-VbA8ScMvAISJNJVbRDTJdCwqQoAareR/wutevKanhR2/1EkoXVZVkkORaYm/tNVCjP/UDTKtcw3bAkwOUdedmA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -5324,6 +4793,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -5331,131 +4801,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 14.6" + "node": ">=18" } } } diff --git a/package.json b/package.json index 6f01a95c..6c1deb96 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,11 @@ "@alpinejs/intersect": "^3.6.1", "@awcodes/alpine-floating-ui": "^3.5.0", "@ryangjchandler/alpine-tooltip": "^2.0.1", - "@tailwindcss/aspect-ratio": "^0.4.2", - "@tailwindcss/forms": "^0.5.7", - "@tailwindcss/typography": "^0.5.10", + "@tailwindcss/forms": "^0.5.10", + "@tailwindcss/typography": "^0.5.18", + "@tailwindcss/vite": "^4.1.13", + "@tailwindcss/postcss": "^4.1.13", + "@tailwindplus/elements": "^1.0.13", "alpinejs": "^3.12.0", "autoprefixer": "^10.4.16", "highlight.js": "^11.7.0", @@ -24,11 +26,8 @@ "postcss-preset-env": "^10.1.0", "prettier": "^3.2.5", "prettier-plugin-tailwindcss": "^0.6.8", - "tailwindcss": "^3.4.10", + "tailwindcss": "^4.1.13", "tippy.js": "^6.3.7", "vite": "^7.1.7" - }, - "dependencies": { - "@tailwindplus/elements": "^1.0.13" } } diff --git a/phpunit.ci.xml b/phpunit.ci.xml index 123810b7..2ba3a8b8 100644 --- a/phpunit.ci.xml +++ b/phpunit.ci.xml @@ -25,7 +25,6 @@ - @@ -34,4 +33,4 @@ ./app - \ No newline at end of file + diff --git a/phpunit.xml b/phpunit.xml index a5e78db8..5f305fa2 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -25,7 +25,6 @@ - diff --git a/postcss.config.js b/postcss.config.js index 2e7af2b7..a7f73a2d 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,6 +1,5 @@ export default { plugins: { - tailwindcss: {}, - autoprefixer: {}, + '@tailwindcss/postcss': {}, }, } diff --git a/resources/css/app.css b/resources/css/app.css index 4e4a288a..5fb99ec6 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -1,47 +1,134 @@ -@import 'tailwindcss/base'; -@import 'tailwindcss/components'; -@import 'tailwindcss/utilities'; +@import 'tailwindcss'; -@import 'base.css'; -@import 'tag.css'; -@import 'forms.css'; -@import 'torchlight.css'; -@import 'forum.css'; -@import 'header.css'; +@import './components/base.css'; +@import './components/forms.css'; +@import './components/forum.css'; +@import './components/header.css'; +@import './components/tag.css'; +@import './components/torchlight.css'; +@import './components/typography.css'; + +@plugin '@tailwindcss/typography'; +@plugin '@tailwindcss/forms'; + +@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; +@source '../../vendor/filament/**/*.blade.php'; +@source '../../storage/framework/views/*.php'; +@source '../**/*.blade.php'; +@source '../**/*.js'; + +:root { + --laravel: #F56857; + --livewire: #fb70a9; + --inertia: #8b5cf6; + --javascript: #f7df1e; + --typesript: #007acc; + --react: #53c1de; + --vue-js: #41b883; + --php: #777bb3; + --digital-ocean: #0080ff; + --forge: #19b69b; + --packages: #4f46e5; + --outils: #22d3ee; + --tailwindcss: #06b6d4; + --design: #78350f; + --alpinejs: #2d3441; + --open-source: #f97316; + --freelance: #f43f5e; + --salaire: #c7d2fe; + --projets: #14b8a6; + --entrepreneuriat: #0ea5e9; + --paiement-en-ligne: #10b981; + --branding: #ec4899; + --applications: #0284c7; + --developpement: #4d7c0f; + --event: #36bffa; + --tutoriel: #164e63; + --communaute: #dd2590; + --astuces: #d6bbfb; +} + +@theme { + /* Custom Colors */ + --color-flag-green: #099170; + --color-flag-red: #e21b30; + --color-flag-yellow: #ffdc44; + --color-black: #161B22; + + --color-gray-50: oklch(98.5% 0 0); + --color-gray-100: oklch(96.7% 0.001 286.375); + --color-gray-200: oklch(92% 0.004 286.32); + --color-gray-300: oklch(87.1% 0.006 286.286); + --color-gray-400: oklch(70.5% 0.015 286.067); + --color-gray-500: oklch(55.2% 0.016 285.938); + --color-gray-600: oklch(44.2% 0.017 285.786); + --color-gray-700: oklch(37% 0.013 285.805); + --color-gray-800: oklch(27.4% 0.006 286.033); + --color-gray-900: oklch(21% 0.006 285.885); + --color-gray-950: oklch(14.1% 0.005 285.823); + + --color-primary-50: #ecfdf6; + --color-primary-100: #d2f9e8; + --color-primary-200: #a9f1d5; + --color-primary-300: #71e4be; + --color-primary-400: #38cfa2; + --color-primary-500: #15b48a; + --color-primary-600: #099170; + --color-primary-700: #07755d; + --color-primary-800: #085d4b; + --color-primary-900: #084c3f; + --color-primary-950: #032b24; + + /* Font Families */ + --font-family-heading: Rota, ui-sans-serif, system-ui; + --font-family-mono: "Geist Mono", ui-monospace, monospace; + --font-family-sans: "Instrument Sans", ui-sans-serif, system-ui; + + /* Custom Widths */ + --width-90: 22.5rem; + + /* Animation Variables */ + --marquee-duration: 15s; + + /* Animation Durations */ + --animate-fade-in: fade-in 0.5s linear forwards; + --animate-marquee: marquee var(--marquee-duration) linear infinite; + --animate-spin-slow: spin 4s linear infinite; + --animate-spin-slower: spin 6s linear infinite; + --animate-spin-reverse: spin-reverse 1s linear infinite; + --animate-spin-reverse-slow: spin-reverse 4s linear infinite; + --animate-spin-reverse-slower: spin-reverse 6s linear infinite; + --animate-scroll-slow: scroll 30s linear infinite; + --animate-rotate: rotate 8s linear infinite; +} + +@keyframes fade-in { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes marquee { + 100% { transform: translateY(-50%); } +} + +@keyframes spin-reverse { + to { transform: rotate(-360deg); } +} + +@keyframes scroll { + from { transform: translateX(0); } + to { transform: translateX(-100%); } +} + +@keyframes rotate { + 0% { transform: rotate(0deg) scale(10); } + 100% { transform: rotate(-360deg) scale(10); } +} + +@custom-variant dark (&:where(.dark, .dark *)); @property --border-angle { inherits: false; initial-value: 0deg; syntax: ''; } - -:root { - --laravel: #F56857; - --livewire: #fb70a9; - --inertia: #8b5cf6; - --javascript: #f7df1e; - --typesript: #007acc; - --react: #53c1de; - --vue-js: #41b883; - --php: #777bb3; - --digital-ocean: #0080ff; - --forge: #19b69b; - --packages: #4f46e5; - --outils: #22d3ee; - --tailwindcss: #06b6d4; - --design: #78350f; - --alpinejs: #2d3441; - --open-source: #f97316; - --freelance: #f43f5e; - --salaire: #c7d2fe; - --projets: #14b8a6; - --entrepreneuriat: #0ea5e9; - --paiement-en-ligne: #10b981; - --branding: #ec4899; - --applications: #0284c7; - --developpement: #4d7c0f; - --event: #36bffa; - --tutoriel: #164e63; - --communaute: #dd2590; - --astuces: #d6bbfb; -} diff --git a/resources/css/base.css b/resources/css/base.css deleted file mode 100644 index ba9e27cc..00000000 --- a/resources/css/base.css +++ /dev/null @@ -1,62 +0,0 @@ -html, -body { height: 100%; } -input { width: 100%; } - -[x-cloak] { - display: none !important; -} - -@font-face { - font-family: 'Rota'; - src: url('../fonts/rota/rota-semibold-webfont.woff2') format('woff2'), - url('../fonts/rota/rota-semibold-webfont.woff') format('woff'); - font-weight: 600; - font-style: swap; -} - -@font-face { - font-family: 'Rota'; - src: url('../fonts/rota/rota-regular-webfont.woff2') format('woff2'), - url('../fonts/rota/rota-regular-webfont.woff') format('woff'); - font-weight: 400; - font-style: swap; -} - -@font-face { - font-family: 'Rota'; - src: url('../fonts/rota/rota-medium-webfont.woff2') format('woff2'), - url('../fonts/rota/rota-medium-webfont.woff') format('woff'); - font-weight: 500; - font-style: swap; -} - -@font-face { - font-family: 'Rota'; - src: url('../fonts/rota/rota-bold-webfont.woff2') format('woff2'), - url('../fonts/rota/rota-bold-webfont.woff') format('woff'); - font-weight: 700; - font-style: swap; -} - -.hide-scroll::-webkit-scrollbar { - display: none; -} - -.prose iframe { - @apply w-full; -} - -.animate-scroll-slow:nth-child(2) { - animation-duration: 40s; - animation-delay: 500ms; -} - -.animate-scroll-slow:nth-child(3) { - animation-duration: 50s; - animation-delay: 750ms; -} - -/* Fix style for the phone country input */ -.iti--inline-dropdown .iti__dropdown-content { - @apply mt-2 rounded-lg border-gray-200 dark:border-white/10 shadow !important; -} diff --git a/resources/css/components/base.css b/resources/css/components/base.css new file mode 100644 index 00000000..af4bf093 --- /dev/null +++ b/resources/css/components/base.css @@ -0,0 +1,72 @@ +html, +body { height: 100%; } +input { width: 100%; } + +[x-cloak] { + display: none !important; +} + +@font-face { + font-family: 'Rota'; + src: url('../../fonts/rota/rota-semibold-webfont.woff2') format('woff2'), + url('../../fonts/rota/rota-semibold-webfont.woff') format('woff'); + font-weight: 600; + font-style: swap; +} + +@font-face { + font-family: 'Rota'; + src: url('../../fonts/rota/rota-regular-webfont.woff2') format('woff2'), + url('../../fonts/rota/rota-regular-webfont.woff') format('woff'); + font-weight: 400; + font-style: swap; +} + +@font-face { + font-family: 'Rota'; + src: url('../../fonts/rota/rota-medium-webfont.woff2') format('woff2'), + url('../../fonts/rota/rota-medium-webfont.woff') format('woff'); + font-weight: 500; + font-style: swap; +} + +@font-face { + font-family: 'Rota'; + src: url('../../fonts/rota/rota-bold-webfont.woff2') format('woff2'), + url('../../fonts/rota/rota-bold-webfont.woff') format('woff'); + font-weight: 700; + font-style: swap; +} + +.hide-scroll::-webkit-scrollbar { + display: none; +} + +.prose iframe { + @apply w-full; +} + +.animate-scroll-slow:nth-child(2) { + animation-duration: 40s; + animation-delay: 500ms; +} + +.animate-scroll-slow:nth-child(3) { + animation-duration: 50s; + animation-delay: 750ms; +} + +/* Fix style for the phone country input */ +.iti--inline-dropdown .iti__dropdown-content { + @apply !mt-2 !rounded-lg !border-gray-200 dark:!border-white/10 !shadow; +} + +/* Gradient */ +.section-gradient { + background: radial-gradient(60% 60% at 22% 0, #f4f4f5, #ffffff); + position: relative +} + +.dark .section-gradient { + background: radial-gradient(60% 60% at 22% 0, #0d1d1c, #151515); +} diff --git a/resources/css/forms.css b/resources/css/components/forms.css similarity index 100% rename from resources/css/forms.css rename to resources/css/components/forms.css diff --git a/resources/css/forum.css b/resources/css/components/forum.css similarity index 100% rename from resources/css/forum.css rename to resources/css/components/forum.css diff --git a/resources/css/header.css b/resources/css/components/header.css similarity index 100% rename from resources/css/header.css rename to resources/css/components/header.css diff --git a/resources/css/tag.css b/resources/css/components/tag.css similarity index 100% rename from resources/css/tag.css rename to resources/css/components/tag.css diff --git a/resources/css/torchlight.css b/resources/css/components/torchlight.css similarity index 100% rename from resources/css/torchlight.css rename to resources/css/components/torchlight.css diff --git a/resources/css/components/typography.css b/resources/css/components/typography.css new file mode 100644 index 00000000..2e140ad5 --- /dev/null +++ b/resources/css/components/typography.css @@ -0,0 +1,39 @@ +.prose img { + border-radius: theme(borderRadius.lg); +} + +.prose h1, .prose h2, .prose h3, .prose h4 { + font-family: Rota, sans-serif; +} + +.prose blockquote { + font-style: normal; +} + +.prose blockquote p:first-of-type::before { + content: none; +} + +.prose blockquote p:first-of-type::after { + content: none; +} + +.prose pre, .prose code, .prose p > code { + font-weight: theme(fontWeight.medium); + font-family: "Geist Mono", monospace; + color: theme(colors.amber.500); +} + +.prose li strong, .prose strong { + color: theme(colors.gray.700); + font-weight: 400; +} + +.prose.heading-off h1, +.prose.heading-off h2, +.prose.heading-off h3, +.prose.heading-off h4, +.prose.heading-off h5 { + margin: 10px 0; + font-size: theme(fontSize.base); +} diff --git a/resources/css/filament/admin/custom-theme.css b/resources/css/filament/admin/custom-theme.css new file mode 100644 index 00000000..a78b547e --- /dev/null +++ b/resources/css/filament/admin/custom-theme.css @@ -0,0 +1,64 @@ +.fi-body { + .fi-simple-header .fi-logo { + @apply !h-16; + > svg { + @apply h-full; + } + } + + &.fi-panel-admin { + .fi-sidebar-header { + @apply bg-white ring-1 ring-gray-200/60 lg:shadow-none dark:bg-gray-900 dark:ring-white/10; + .fi-logo { + @apply !h-10; + > svg { + @apply h-full; + } + } + + .fi-icon-btn { + @apply size-10 text-gray-400 rounded-lg -translate-x-2 translate-y-px hover:bg-gray-100 dark:text-gray-500 dark:hover:bg-gray-800; + svg { + display:none; + } + &::after { + content: url('data:image/svg+xml;utf8,'); + @apply size-6 inline-block; /* Ensure the element can have a color */ + } + &:hover::after { + content: url('data:image/svg+xml;utf8,'); + @apply inline-block; /* Ensure the element can have a color */ + } + } + } + + .fi-topbar { + > nav { + @apply shadow-none ring-1 ring-gray-200/60 bg-white dark:bg-gray-900 dark:ring-white/10; + } + } + + .fi-sidebar-nav { + @apply px-0; + + .fi-sidebar-nav-groups { + @apply px-2; + } + + .fi-sidebar-item { + @apply border-l-4 border-transparent rounded-none hover:bg-gray-100 hover:border-gray-200 dark:hover:bg-gray-900 dark:hover:border-gray-700; + &.fi-active { + @apply border-primary-400 hover:border-primary-400 hover:bg-transparent; + } + } + + .fi-sidebar-item-button, .fi-sidebar-group-button { + @apply bg-transparent px-5; + } + } + + .fi-main-ctn { + @apply bg-transparent; + } + } +} diff --git a/resources/css/filament/admin/tailwind.config.js b/resources/css/filament/admin/tailwind.config.js deleted file mode 100644 index bef338c5..00000000 --- a/resources/css/filament/admin/tailwind.config.js +++ /dev/null @@ -1,11 +0,0 @@ -import preset from '../../../../vendor/filament/filament/tailwind.config.preset' - -export default { - presets: [preset], - content: [ - './app/Filament/**/*.php', - './app/Livewire/**/*.php', - './resources/views/filament/**/*.blade.php', - './vendor/filament/**/*.blade.php', - ], -} diff --git a/resources/css/filament/admin/theme.css b/resources/css/filament/admin/theme.css index 176c7c5f..af8a48f6 100644 --- a/resources/css/filament/admin/theme.css +++ b/resources/css/filament/admin/theme.css @@ -1,6 +1,7 @@ -@import '/vendor/filament/filament/resources/css/theme.css'; +@import '../../../../vendor/filament/filament/resources/css/theme.css'; -@config './tailwind.config.js'; +@source '../../../../app/Filament'; +@source '../../../../resources/views/filament'; *::-webkit-scrollbar-track { background-color: transparent; @@ -32,68 +33,3 @@ .hide-scroll::-webkit-scrollbar { display: none; } - -.fi-body { - .fi-simple-header .fi-logo { - @apply h-16 !important; - > svg { - @apply h-full; - } - } - - &.fi-panel-admin { - .fi-sidebar-header { - @apply bg-white ring-1 ring-gray-200/60 lg:shadow-none dark:bg-gray-900 dark:ring-white/10; - .fi-logo { - @apply h-10 !important; - > svg { - @apply h-full; - } - } - - .fi-icon-btn { - @apply size-10 text-gray-400 rounded-lg -translate-x-2 translate-y-px hover:bg-gray-100 dark:text-gray-500 dark:hover:bg-gray-800; - svg { - display:none; - } - &::after { - content: url('data:image/svg+xml;utf8,'); - @apply size-6 inline-block; /* Ensure the element can have a color */ - } - &:hover::after { - content: url('data:image/svg+xml;utf8,'); - @apply inline-block; /* Ensure the element can have a color */ - } - } - } - - .fi-topbar { - > nav { - @apply shadow-none ring-1 ring-gray-200/60 bg-white dark:bg-gray-900 dark:ring-white/10; - } - } - - .fi-sidebar-nav { - @apply px-0; - - .fi-sidebar-nav-groups { - @apply px-2; - } - - .fi-sidebar-item { - @apply border-l-4 border-transparent rounded-none hover:bg-gray-100 hover:border-gray-200 dark:hover:bg-gray-900 dark:hover:border-gray-700; - &.fi-active { - @apply border-primary-400 hover:border-primary-400 hover:bg-transparent; - } - } - - .fi-sidebar-item-button, .fi-sidebar-group-button { - @apply bg-transparent px-5; - } - } - - .fi-main-ctn { - @apply bg-transparent; - } - } -} diff --git a/resources/views/ads/ln.blade.php b/resources/views/ads/ln.blade.php index 09c16960..49bf9510 100644 --- a/resources/views/ads/ln.blade.php +++ b/resources/views/ads/ln.blade.php @@ -1,5 +1,5 @@
+ class="relative space-y-3 bg-white dark:bg-gray-800 ring-1 ring-gray-200 rounded-lg p-4 dark:ring-white/10 shadow-xs transition-all transform duration-200 ease-in-out hover:scale-105 hover:rotate-2 overflow-hidden">
+
{{ $article->title }} diff --git a/resources/views/components/buttons/default.blade.php b/resources/views/components/buttons/default.blade.php index f0cd4d26..2e57d689 100644 --- a/resources/views/components/buttons/default.blade.php +++ b/resources/views/components/buttons/default.blade.php @@ -1,5 +1,5 @@ @php - $classes = 'inline-flex justify-center py-2 px-4 bg-white border-0 ring-1 ring-gray-200 dark:ring-white/20 rounded-lg shadow-sm text-sm text-gray-700 hover:text-gray-900 dark:text-gray-400 hover:bg-white/50 dark:hover:bg-white/10 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-green-500 dark:bg-gray-800 dark:focus:ring-offset-gray-900'; + $classes = 'inline-flex items-center justify-center py-2 px-4 bg-white ring-1 ring-gray-200 dark:ring-white/20 rounded-lg shadow-xs font-medium text-sm text-gray-700 hover:text-gray-900 hover:bg-white/50 dark:text-white dark:hover:text-white dark:bg-gray-800 dark:hover:bg-white/10 focus:outline-hidden focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-primary-500 dark:focus:ring-offset-gray-900'; @endphp @if ($attributes->hasAny(['href', ':href'])) diff --git a/resources/views/components/buttons/primary.blade.php b/resources/views/components/buttons/primary.blade.php index 9e8f4df0..42be306c 100644 --- a/resources/views/components/buttons/primary.blade.php +++ b/resources/views/components/buttons/primary.blade.php @@ -1,5 +1,5 @@ @php - $classes = 'inline-flex items-center justify-center py-2 px-4 border-0 text-sm font-medium rounded-lg text-white bg-green-600 hover:bg-green-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-green-500 dark:ring-offset-gray-900'; + $classes = 'inline-flex items-center justify-center py-2 px-4 text-sm font-medium rounded-lg text-white bg-primary-600 hover:bg-primary-700 focus:outline-hidden focus:ring-2 focus:ring-offset-2 focus:ring-offset-white focus:ring-primary-500 dark:bg-primary-400/10 dark:hover:bg-primary-800/20 dark:text-primary-400 dark:ring-primary-500/20 dark:focus:ring-offset-gray-900'; @endphp @if ($attributes->hasAny(['href', ':href'])) diff --git a/resources/views/components/form-slider-over.blade.php b/resources/views/components/form-slider-over.blade.php index 8884f4fb..6d6b0338 100644 --- a/resources/views/components/form-slider-over.blade.php +++ b/resources/views/components/form-slider-over.blade.php @@ -14,7 +14,7 @@
diff --git a/resources/views/components/layouts/footer.blade.php b/resources/views/components/layouts/footer.blade.php index fc7c343e..d835f63c 100644 --- a/resources/views/components/layouts/footer.blade.php +++ b/resources/views/components/layouts/footer.blade.php @@ -1,132 +1,124 @@ -