From dd77555c421c0bb8a182e7fb0a73707ccb437781 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 27 Jan 2026 20:07:18 -0500 Subject: [PATCH 1/3] Add tooltips to actions across admin area (#2134) Co-authored-by: Boy132 --- app/Enums/CustomizationKey.php | 3 + app/Filament/Admin/Pages/Health.php | 5 +- app/Filament/Admin/Pages/ListLogs.php | 14 +- app/Filament/Admin/Pages/Settings.php | 10 +- app/Filament/Admin/Pages/ViewLogs.php | 12 +- .../Resources/ApiKeys/ApiKeyResource.php | 10 +- .../Resources/ApiKeys/Pages/CreateApiKey.php | 8 +- .../Resources/ApiKeys/Pages/ListApiKeys.php | 15 --- .../DatabaseHosts/DatabaseHostResource.php | 11 +- .../DatabaseHosts/Pages/EditDatabaseHost.php | 13 +- .../DatabaseHosts/Pages/ListDatabaseHosts.php | 15 --- .../DatabaseHosts/Pages/ViewDatabaseHost.php | 4 +- .../DatabasesRelationManager.php | 4 +- .../Admin/Resources/Eggs/Pages/CreateEgg.php | 8 +- .../Admin/Resources/Eggs/Pages/EditEgg.php | 17 ++- .../Admin/Resources/Eggs/Pages/ListEggs.php | 105 +++++++-------- .../Admin/Resources/Mounts/MountResource.php | 11 +- .../Resources/Mounts/Pages/CreateMount.php | 8 +- .../Resources/Mounts/Pages/EditMount.php | 11 +- .../Resources/Mounts/Pages/ListMounts.php | 15 --- .../Resources/Mounts/Pages/ViewMount.php | 5 +- .../Resources/Nodes/Pages/CreateNode.php | 2 +- .../Admin/Resources/Nodes/Pages/EditNode.php | 25 ++-- .../Admin/Resources/Nodes/Pages/ListNodes.php | 18 +-- .../AllocationsRelationManager.php | 7 +- .../Resources/Plugins/PluginResource.php | 27 ++-- .../Resources/Roles/Pages/CreateRole.php | 8 +- .../Admin/Resources/Roles/Pages/EditRole.php | 13 +- .../Admin/Resources/Roles/Pages/ListRoles.php | 15 --- .../Admin/Resources/Roles/Pages/ViewRole.php | 4 +- .../Admin/Resources/Roles/RoleResource.php | 15 ++- .../Resources/Servers/Pages/CreateServer.php | 2 +- .../Resources/Servers/Pages/EditServer.php | 26 ++-- .../Resources/Servers/Pages/ListServers.php | 23 +--- .../AllocationsRelationManager.php | 7 +- .../DatabasesRelationManager.php | 6 +- .../Resources/Users/Pages/CreateUser.php | 8 +- .../Admin/Resources/Users/Pages/EditUser.php | 13 +- .../Admin/Resources/Users/Pages/ListUsers.php | 15 --- .../Admin/Resources/Users/Pages/ViewUser.php | 4 +- .../Admin/Resources/Users/UserResource.php | 17 ++- .../Pages/CreateWebhookConfiguration.php | 13 +- .../Pages/EditWebhookConfiguration.php | 11 +- .../Pages/ListWebhookConfigurations.php | 15 --- .../Pages/ViewWebhookConfiguration.php | 4 +- .../Resources/Webhooks/WebhookResource.php | 11 +- app/Filament/Admin/Widgets/CanaryWidget.php | 2 +- app/Filament/Admin/Widgets/HelpWidget.php | 2 +- app/Filament/Admin/Widgets/NoNodesWidget.php | 2 +- app/Filament/Admin/Widgets/SupportWidget.php | 2 +- app/Filament/Admin/Widgets/UpdateWidget.php | 2 +- .../Components/Actions/DeleteServerIcon.php | 7 +- .../Components/Actions/ExportEggAction.php | 11 +- .../Actions/ExportScheduleAction.php | 5 - .../Components/Actions/ImportEggAction.php | 7 +- .../Actions/PreviewStartupAction.php | 2 +- .../Actions/RotateDatabasePasswordAction.php | 4 +- .../Components/Actions/UpdateEggAction.php | 7 +- .../Actions/UpdateNodeAllocations.php | 7 +- app/Filament/Pages/Auth/EditProfile.php | 31 ++++- app/Filament/Server/Pages/Settings.php | 6 +- .../Resources/Activities/ActivityResource.php | 2 +- .../Allocations/AllocationResource.php | 3 +- .../Allocations/Pages/ListAllocations.php | 8 -- .../Resources/Backups/BackupResource.php | 2 +- .../Resources/Backups/Pages/ListBackups.php | 8 -- .../Resources/Databases/DatabaseResource.php | 3 +- .../Databases/Pages/ListDatabases.php | 8 -- .../Resources/Files/Pages/EditFiles.php | 6 +- .../Resources/Files/Pages/ListFiles.php | 59 ++++++--- .../Schedules/Pages/EditSchedule.php | 12 +- .../Schedules/Pages/ListSchedules.php | 8 -- .../Schedules/Pages/ViewSchedule.php | 3 +- .../Resources/Schedules/ScheduleResource.php | 5 +- .../Resources/Subusers/Pages/ListSubusers.php | 8 -- .../Resources/Subusers/SubuserResource.php | 3 +- .../Server/ServerInstalledListener.php | 2 +- app/Listeners/Server/SubUserAddedListener.php | 2 +- .../Filament/FilamentServiceProvider.php | 120 +++++++++++++++++- lang/en/admin/egg.php | 1 + lang/en/admin/server.php | 2 + .../server/pages/file-upload.blade.php | 17 +-- .../server/pages/list-files.blade.php | 8 +- 83 files changed, 505 insertions(+), 495 deletions(-) diff --git a/app/Enums/CustomizationKey.php b/app/Enums/CustomizationKey.php index c76aa8157..c5de12425 100644 --- a/app/Enums/CustomizationKey.php +++ b/app/Enums/CustomizationKey.php @@ -11,6 +11,8 @@ enum CustomizationKey: string case TopNavigation = 'top_navigation'; case DashboardLayout = 'dashboard_layout'; + case ButtonStyle = 'button_style'; + public function getDefaultValue(): string|int|bool { return match ($this) { @@ -20,6 +22,7 @@ enum CustomizationKey: string self::ConsoleGraphPeriod => 30, self::TopNavigation => config('panel.filament.default-navigation', 'sidebar'), self::DashboardLayout => 'grid', + self::ButtonStyle => true, }; } diff --git a/app/Filament/Admin/Pages/Health.php b/app/Filament/Admin/Pages/Health.php index 55b7dd3f7..7518d5ab7 100644 --- a/app/Filament/Admin/Pages/Health.php +++ b/app/Filament/Admin/Pages/Health.php @@ -8,7 +8,6 @@ use Carbon\Carbon; use Filament\Actions\Action; use Filament\Notifications\Notification; use Filament\Pages\Page; -use Filament\Support\Enums\IconSize; use Illuminate\Support\Facades\Artisan; use Spatie\Health\Commands\RunHealthChecksCommand; use Spatie\Health\Enums\Status; @@ -49,8 +48,8 @@ class Health extends Page { return [ Action::make('refresh') - ->label(trans('admin/health.refresh')) - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() + ->tooltip(trans('admin/health.refresh')) ->icon(TablerIcon::Refresh) ->action('refresh'), ]; diff --git a/app/Filament/Admin/Pages/ListLogs.php b/app/Filament/Admin/Pages/ListLogs.php index 69d2177b7..032d3c66a 100644 --- a/app/Filament/Admin/Pages/ListLogs.php +++ b/app/Filament/Admin/Pages/ListLogs.php @@ -9,10 +9,10 @@ use Boquizo\FilamentLogViewer\Actions\ViewLogAction; use Boquizo\FilamentLogViewer\Pages\ListLogs as BaseListLogs; use Boquizo\FilamentLogViewer\Tables\Columns\LevelColumn; use Boquizo\FilamentLogViewer\Tables\Columns\NameColumn; +use Boquizo\FilamentLogViewer\UseCases\ParseDateUseCase; use Boquizo\FilamentLogViewer\Utils\Level; use Filament\Actions\Action; use Filament\Notifications\Notification; -use Filament\Support\Enums\IconSize; use Filament\Tables\Table; use Illuminate\Support\Facades\Http; @@ -47,12 +47,14 @@ class ListLogs extends BaseListLogs ]) ->recordActions([ ViewLogAction::make() - ->icon(TablerIcon::FileDescription)->iconSize(IconSize::Large)->iconButton(), + ->icon(TablerIcon::FileDescription)->iconButton(), DownloadAction::make() - ->icon(TablerIcon::FileDownload)->iconSize(IconSize::Large)->iconButton(), + ->tooltip(fn ($record) => trans('filament-log-viewer::log.table.actions.download.label', ['log' => ParseDateUseCase::execute($record['date'])])) + ->icon(TablerIcon::FileDownload)->iconButton(), Action::make('uploadLogs') ->hiddenLabel() - ->icon(TablerIcon::WorldUpload)->iconSize(IconSize::Large)->iconButton() + ->tooltip(trans('admin/log.actions.upload_tooltip', ['url' => 'logs.pelican.dev'])) + ->icon(TablerIcon::WorldUpload) ->requiresConfirmation() ->modalHeading(trans('admin/log.actions.upload_logs')) ->modalDescription(fn ($record) => trans('admin/log.actions.upload_logs_description', ['file' => $record['date'], 'url' => 'https://logs.pelican.dev'])) @@ -101,7 +103,7 @@ class ListLogs extends BaseListLogs ->body("{$url}") ->success() ->actions([ - Action::make('viewLogs') + Action::make('exclude_viewLogs') ->label(trans('admin/log.actions.view_logs')) ->url($url) ->openUrlInNewTab(true), @@ -120,7 +122,7 @@ class ListLogs extends BaseListLogs } }), DeleteAction::make() - ->iconSize(IconSize::Medium)->iconButton(), + ->icon(TablerIcon::Trash)->iconButton(), ]); } } diff --git a/app/Filament/Admin/Pages/Settings.php b/app/Filament/Admin/Pages/Settings.php index fbc26f7db..2fdfd9df0 100644 --- a/app/Filament/Admin/Pages/Settings.php +++ b/app/Filament/Admin/Pages/Settings.php @@ -38,7 +38,6 @@ use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; use Filament\Schemas\Contracts\HasSchemas; use Filament\Schemas\Schema; -use Filament\Support\Enums\IconSize; use Filament\Support\Enums\Width; use Illuminate\Http\Client\Factory; use Illuminate\Support\Arr; @@ -245,14 +244,14 @@ class Settings extends Page implements HasSchemas ->placeholder(trans('admin/setting.general.trusted_proxies_help')) ->default(env('TRUSTED_PROXIES', implode(',', Arr::wrap(config('trustedproxy.proxies'))))) ->hintActions([ - Action::make('clear') + Action::make('hint_clear') ->label(trans('admin/setting.general.clear')) ->color('danger') ->icon(TablerIcon::Trash) ->requiresConfirmation() ->authorize(fn () => user()?->can('update settings')) ->action(fn (Set $set) => $set('TRUSTED_PROXIES', [])), - Action::make('cloudflare') + Action::make('hint_cloudflare') ->label(trans('admin/setting.general.set_to_cf')) ->icon(TablerIcon::BrandCloudflare) ->authorize(fn () => user()?->can('update settings')) @@ -350,7 +349,7 @@ class Settings extends Page implements HasSchemas ->live() ->default(env('MAIL_MAILER', config('mail.default'))) ->hintAction( - Action::make('test') + Action::make('hint_test') ->label(trans('admin/setting.mail.test_mail')) ->icon(TablerIcon::Send) ->hidden(fn (Get $get) => $get('MAIL_MAILER') === 'log') @@ -853,9 +852,10 @@ class Settings extends Page implements HasSchemas { return [ Action::make('save') - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->icon(TablerIcon::DeviceFloppy) ->action('save') + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->authorize(fn () => user()?->can('update settings')) ->keyBindings(['mod+s']), ]; diff --git a/app/Filament/Admin/Pages/ViewLogs.php b/app/Filament/Admin/Pages/ViewLogs.php index 3d2f5d19d..f17a70eac 100644 --- a/app/Filament/Admin/Pages/ViewLogs.php +++ b/app/Filament/Admin/Pages/ViewLogs.php @@ -10,7 +10,6 @@ use Boquizo\FilamentLogViewer\Actions\DownloadAction; use Boquizo\FilamentLogViewer\Pages\ViewLog as BaseViewLog; use Filament\Actions\Action; use Filament\Notifications\Notification; -use Filament\Support\Enums\IconSize; use Illuminate\Support\Facades\Http; class ViewLogs extends BaseViewLog @@ -21,14 +20,15 @@ class ViewLogs extends BaseViewLog { return [ BackAction::make() - ->icon(TablerIcon::ArrowLeft)->iconSize(IconSize::ExtraLarge)->iconButton(), + ->tooltip(trans('filament-log-viewer::log.table.actions.close.label')) + ->icon(TablerIcon::ArrowLeft)->iconButton(), DeleteAction::make(withTooltip: true) - ->iconSize(IconSize::ExtraLarge)->iconButton(), + ->icon(TablerIcon::Trash)->iconButton(), DownloadAction::make(withTooltip: true) - ->icon(TablerIcon::FileDownload)->iconSize(IconSize::ExtraLarge)->iconButton(), + ->icon(TablerIcon::FileDownload)->iconButton(), Action::make('uploadLogs') ->hiddenLabel() - ->icon(TablerIcon::WorldUpload)->iconSize(IconSize::ExtraLarge)->iconButton() + ->icon(TablerIcon::WorldUpload) ->requiresConfirmation() ->tooltip(trans('admin/log.actions.upload_tooltip', ['url' => 'logs.pelican.dev'])) ->modalHeading(trans('admin/log.actions.upload_logs')) @@ -78,7 +78,7 @@ class ViewLogs extends BaseViewLog ->body("{$url}") ->success() ->actions([ - Action::make('viewLogs') + Action::make('exclude_viewLogs') ->label(trans('admin/log.actions.view_logs')) ->url($url) ->openUrlInNewTab(true), diff --git a/app/Filament/Admin/Resources/ApiKeys/ApiKeyResource.php b/app/Filament/Admin/Resources/ApiKeys/ApiKeyResource.php index 73a72258c..e5eb939e4 100644 --- a/app/Filament/Admin/Resources/ApiKeys/ApiKeyResource.php +++ b/app/Filament/Admin/Resources/ApiKeys/ApiKeyResource.php @@ -14,6 +14,7 @@ use App\Traits\Filament\CanModifyForm; use App\Traits\Filament\CanModifyTable; use BackedEnum; use Exception; +use Filament\Actions\CreateAction; use Filament\Actions\DeleteAction; use Filament\Forms\Components\TagsInput; use Filament\Forms\Components\Textarea; @@ -22,7 +23,6 @@ use Filament\Resources\Pages\PageRegistration; use Filament\Resources\Resource; use Filament\Schemas\Components\Fieldset; use Filament\Schemas\Schema; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -98,8 +98,12 @@ class ApiKeyResource extends Resource ->url(fn (ApiKey $apiKey) => user()?->can('update', $apiKey->user) ? EditUser::getUrl(['record' => $apiKey->user]) : null), ]) ->recordActions([ - DeleteAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge), + DeleteAction::make(), + ]) + ->toolbarActions([ + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::Plus), ]) ->emptyStateIcon(TablerIcon::Key) ->emptyStateDescription('') diff --git a/app/Filament/Admin/Resources/ApiKeys/Pages/CreateApiKey.php b/app/Filament/Admin/Resources/ApiKeys/Pages/CreateApiKey.php index 1ad431494..0b4b38263 100644 --- a/app/Filament/Admin/Resources/ApiKeys/Pages/CreateApiKey.php +++ b/app/Filament/Admin/Resources/ApiKeys/Pages/CreateApiKey.php @@ -10,7 +10,6 @@ use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Resources\Pages\CreateRecord; -use Filament\Support\Enums\IconSize; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; @@ -27,8 +26,11 @@ class CreateApiKey extends CreateRecord protected function getDefaultHeaderActions(): array { return [ - $this->getCreateFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('create') + ->hiddenLabel() + ->action('create') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/create-record.form.actions.create.label')) ->icon(TablerIcon::FilePlus), ]; } diff --git a/app/Filament/Admin/Resources/ApiKeys/Pages/ListApiKeys.php b/app/Filament/Admin/Resources/ApiKeys/Pages/ListApiKeys.php index adaa15e20..fc5fc9648 100644 --- a/app/Filament/Admin/Resources/ApiKeys/Pages/ListApiKeys.php +++ b/app/Filament/Admin/Resources/ApiKeys/Pages/ListApiKeys.php @@ -2,15 +2,10 @@ namespace App\Filament\Admin\Resources\ApiKeys\Pages; -use App\Enums\TablerIcon; use App\Filament\Admin\Resources\ApiKeys\ApiKeyResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListApiKeys extends ListRecords { @@ -18,14 +13,4 @@ class ListApiKeys extends ListRecords use CanCustomizeHeaderWidgets; protected static string $resource = ApiKeyResource::class; - - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return [ - CreateAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->icon(TablerIcon::FilePlus), - ]; - } } diff --git a/app/Filament/Admin/Resources/DatabaseHosts/DatabaseHostResource.php b/app/Filament/Admin/Resources/DatabaseHosts/DatabaseHostResource.php index bd0ef622d..df20c38ea 100644 --- a/app/Filament/Admin/Resources/DatabaseHosts/DatabaseHostResource.php +++ b/app/Filament/Admin/Resources/DatabaseHosts/DatabaseHostResource.php @@ -15,6 +15,8 @@ use App\Traits\Filament\CanModifyForm; use App\Traits\Filament\CanModifyTable; use BackedEnum; use Exception; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\CreateAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Actions\ViewAction; @@ -96,8 +98,13 @@ class DatabaseHostResource extends Resource ->hidden(fn ($record) => static::getEditAuthorizationResponse($record)->allowed()), EditAction::make(), ]) - ->groupedBulkActions([ - DeleteBulkAction::make(), + ->toolbarActions([ + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::Plus), + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), ]) ->emptyStateIcon(TablerIcon::Database) ->emptyStateDescription('') diff --git a/app/Filament/Admin/Resources/DatabaseHosts/Pages/EditDatabaseHost.php b/app/Filament/Admin/Resources/DatabaseHosts/Pages/EditDatabaseHost.php index 103a73a7d..a7672cf57 100644 --- a/app/Filament/Admin/Resources/DatabaseHosts/Pages/EditDatabaseHost.php +++ b/app/Filament/Admin/Resources/DatabaseHosts/Pages/EditDatabaseHost.php @@ -13,7 +13,6 @@ use Filament\Actions\ActionGroup; use Filament\Actions\DeleteAction; use Filament\Notifications\Notification; use Filament\Resources\Pages\EditRecord; -use Filament\Support\Enums\IconSize; use Filament\Support\Exceptions\Halt; use Illuminate\Database\Eloquent\Model; use PDOException; @@ -37,11 +36,13 @@ class EditDatabaseHost extends EditRecord { return [ DeleteAction::make() - ->label(fn (DatabaseHost $databaseHost) => $databaseHost->databases()->count() > 0 ? trans('admin/databasehost.delete_help') : trans('filament-actions::delete.single.modal.actions.delete.label')) - ->disabled(fn (DatabaseHost $databaseHost) => $databaseHost->databases()->count() > 0) - ->iconButton()->iconSize(IconSize::ExtraLarge), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->tooltip(fn (DatabaseHost $databaseHost) => $databaseHost->databases()->count() > 0 ? trans('admin/databasehost.delete_help') : trans('filament-actions::delete.single.modal.actions.delete.label')) + ->disabled(fn (DatabaseHost $databaseHost) => $databaseHost->databases()->count() > 0), + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; } diff --git a/app/Filament/Admin/Resources/DatabaseHosts/Pages/ListDatabaseHosts.php b/app/Filament/Admin/Resources/DatabaseHosts/Pages/ListDatabaseHosts.php index 39737c36d..7cae7c055 100644 --- a/app/Filament/Admin/Resources/DatabaseHosts/Pages/ListDatabaseHosts.php +++ b/app/Filament/Admin/Resources/DatabaseHosts/Pages/ListDatabaseHosts.php @@ -2,15 +2,10 @@ namespace App\Filament\Admin\Resources\DatabaseHosts\Pages; -use App\Enums\TablerIcon; use App\Filament\Admin\Resources\DatabaseHosts\DatabaseHostResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListDatabaseHosts extends ListRecords { @@ -18,14 +13,4 @@ class ListDatabaseHosts extends ListRecords use CanCustomizeHeaderWidgets; protected static string $resource = DatabaseHostResource::class; - - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return [ - CreateAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->icon(TablerIcon::DatabasePlus), - ]; - } } diff --git a/app/Filament/Admin/Resources/DatabaseHosts/Pages/ViewDatabaseHost.php b/app/Filament/Admin/Resources/DatabaseHosts/Pages/ViewDatabaseHost.php index a89affbb7..318d979b2 100644 --- a/app/Filament/Admin/Resources/DatabaseHosts/Pages/ViewDatabaseHost.php +++ b/app/Filament/Admin/Resources/DatabaseHosts/Pages/ViewDatabaseHost.php @@ -9,7 +9,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\EditAction; use Filament\Resources\Pages\ViewRecord; -use Filament\Support\Enums\IconSize; class ViewDatabaseHost extends ViewRecord { @@ -22,8 +21,7 @@ class ViewDatabaseHost extends ViewRecord protected function getDefaultHeaderActions(): array { return [ - EditAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge), + EditAction::make(), ]; } } diff --git a/app/Filament/Admin/Resources/DatabaseHosts/RelationManagers/DatabasesRelationManager.php b/app/Filament/Admin/Resources/DatabaseHosts/RelationManagers/DatabasesRelationManager.php index 74053ff5d..73eda7ece 100644 --- a/app/Filament/Admin/Resources/DatabaseHosts/RelationManagers/DatabasesRelationManager.php +++ b/app/Filament/Admin/Resources/DatabaseHosts/RelationManagers/DatabasesRelationManager.php @@ -10,7 +10,6 @@ use Filament\Actions\ViewAction; use Filament\Forms\Components\TextInput; use Filament\Resources\RelationManagers\RelationManager; use Filament\Schemas\Schema; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; @@ -70,8 +69,7 @@ class DatabasesRelationManager extends RelationManager ->recordActions([ ViewAction::make() ->color('primary'), - DeleteAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge), + DeleteAction::make(), ]); } } diff --git a/app/Filament/Admin/Resources/Eggs/Pages/CreateEgg.php b/app/Filament/Admin/Resources/Eggs/Pages/CreateEgg.php index b5dd8cbb1..d782eca25 100644 --- a/app/Filament/Admin/Resources/Eggs/Pages/CreateEgg.php +++ b/app/Filament/Admin/Resources/Eggs/Pages/CreateEgg.php @@ -29,7 +29,6 @@ use Filament\Schemas\Components\Tabs\Tab; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; use Filament\Schemas\Schema; -use Filament\Support\Enums\IconSize; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; use Illuminate\Validation\Rules\Unique; @@ -48,8 +47,11 @@ class CreateEgg extends CreateRecord protected function getDefaultHeaderActions(): array { return [ - $this->getCreateFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('create') + ->hiddenLabel() + ->action('create') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/create-record.form.actions.create.label')) ->icon(TablerIcon::FilePlus), ]; } diff --git a/app/Filament/Admin/Resources/Eggs/Pages/EditEgg.php b/app/Filament/Admin/Resources/Eggs/Pages/EditEgg.php index a534e900d..d0fc33781 100644 --- a/app/Filament/Admin/Resources/Eggs/Pages/EditEgg.php +++ b/app/Filament/Admin/Resources/Eggs/Pages/EditEgg.php @@ -85,7 +85,8 @@ class EditEgg extends EditRecord ->columnSpanFull(), Flex::make([ Action::make('uploadImage') - ->iconButton() + ->hiddenLabel() + ->tooltip(trans('admin/egg.import.import_image')) ->iconSize(IconSize::Large) ->icon(TablerIcon::PhotoUp) ->modal() @@ -210,8 +211,8 @@ class EditEgg extends EditRecord Action::make('delete_image') ->visible(fn ($record) => $record->image) ->hiddenLabel() + ->tooltip(trans('admin/egg.import.delete_image')) ->icon(TablerIcon::Trash) - ->iconButton() ->iconSize(IconSize::Large) ->color('danger') ->action(function ($record) { @@ -449,7 +450,7 @@ class EditEgg extends EditRecord return [ DeleteAction::make() ->disabled(fn (Egg $egg): bool => $egg->servers()->count() > 0) - ->label(fn (Egg $egg): string => $egg->servers()->count() <= 0 ? trans('filament-actions::delete.single.label') : trans('admin/egg.in_use')) + ->tooltip(fn (Egg $egg): string => $egg->servers()->count() <= 0 ? trans('filament-actions::delete.single.label') : trans('admin/egg.in_use')) ->successNotification(fn (Egg $egg) => Notification::make() ->success() ->title(trans('admin/egg.delete_success')) @@ -459,13 +460,15 @@ class EditEgg extends EditRecord ->danger() ->title(trans('admin/egg.delete_failed')) ->body(trans('admin/egg.could_not_delete', ['egg' => $egg->name])) - ) - ->iconButton()->iconSize(IconSize::ExtraLarge), + ), ExportEggAction::make(), ImportEggAction::make() ->multiple(false), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; } diff --git a/app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php b/app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php index f4161fdc3..c904393fd 100644 --- a/app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php +++ b/app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php @@ -13,15 +13,13 @@ use App\Models\Egg; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; use Exception; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; +use Filament\Actions\BulkActionGroup; use Filament\Actions\CreateAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Actions\ReplicateAction; use Filament\Notifications\Notification; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\ImageColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; @@ -66,19 +64,13 @@ class ListEggs extends ListRecords ]) ->recordActions([ EditAction::make() - ->iconButton() - ->tooltip(trans('filament-actions::edit.single.label')) - ->iconSize(IconSize::Large), + ->tooltip(trans('filament-actions::edit.single.label')), ExportEggAction::make() - ->tooltip(trans('filament-actions::export.modal.actions.export.label')) - ->iconSize(IconSize::Large), + ->tooltip(trans('filament-actions::export.modal.actions.export.label')), UpdateEggAction::make() - ->tooltip(trans_choice('admin/egg.update', 1)) - ->iconSize(IconSize::Large), + ->tooltip(trans_choice('admin/egg.update', 1)), ReplicateAction::make() - ->iconButton() ->tooltip(trans('filament-actions::replicate.single.label')) - ->iconSize(IconSize::Large) ->modal(false) ->excludeAttributes(['author', 'uuid', 'update_url', 'servers_count', 'created_at', 'updated_at']) ->beforeReplicaSaved(function (Egg $replica) { @@ -89,47 +81,54 @@ class ListEggs extends ListRecords ->after(fn (Egg $record, Egg $replica) => $record->variables->each(fn ($variable) => $variable->replicate()->fill(['egg_id' => $replica->id])->save())) ->successRedirectUrl(fn (Egg $replica) => EditEgg::getUrl(['record' => $replica])), ]) - ->groupedBulkActions([ - DeleteBulkAction::make() - ->before(function (Collection &$records) { - $eggsWithServers = $records->filter(fn (Egg $egg) => $egg->servers_count > 0); + ->toolbarActions([ + ImportEggAction::make() + ->multiple(), + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::Plus), + BulkActionGroup::make([ + DeleteBulkAction::make() + ->before(function (Collection &$records) { + $eggsWithServers = $records->filter(fn (Egg $egg) => $egg->servers_count > 0); - if ($eggsWithServers->isNotEmpty()) { - $eggNames = $eggsWithServers->map(fn (Egg $egg) => sprintf('%s (%d server%s)', $egg->name, $egg->servers_count, $egg->servers_count > 1 ? 's' : '')) - ->join(', '); - Notification::make() - ->danger() - ->title(trans('admin/egg.cannot_delete', ['count' => $eggsWithServers->count()])) - ->body(trans('admin/egg.eggs_have_servers', ['eggs' => $eggNames])) - ->send(); - } + if ($eggsWithServers->isNotEmpty()) { + $eggNames = $eggsWithServers->map(fn (Egg $egg) => sprintf('%s (%d server%s)', $egg->name, $egg->servers_count, $egg->servers_count > 1 ? 's' : '')) + ->join(', '); + Notification::make() + ->danger() + ->title(trans('admin/egg.cannot_delete', ['count' => $eggsWithServers->count()])) + ->body(trans('admin/egg.eggs_have_servers', ['eggs' => $eggNames])) + ->send(); + } - $records = $records->filter(fn (Egg $egg) => $egg->servers_count <= 0); + $records = $records->filter(fn (Egg $egg) => $egg->servers_count <= 0); - if ($records->isEmpty()) { - $this->halt(); - } - }), - UpdateEggBulkAction::make() - ->before(function (Collection &$records) { - $eggsWithoutUpdateUrl = $records->filter(fn (Egg $egg) => $egg->update_url === null); + if ($records->isEmpty()) { + $this->halt(); + } + }), + UpdateEggBulkAction::make() + ->before(function (Collection &$records) { + $eggsWithoutUpdateUrl = $records->filter(fn (Egg $egg) => $egg->update_url === null); - if ($eggsWithoutUpdateUrl->isNotEmpty()) { - $eggNames = $eggsWithoutUpdateUrl->pluck('name')->join(', '); + if ($eggsWithoutUpdateUrl->isNotEmpty()) { + $eggNames = $eggsWithoutUpdateUrl->pluck('name')->join(', '); - Notification::make() - ->warning() - ->title(trans('admin/egg.cannot_update', ['count' => $eggsWithoutUpdateUrl->count()])) - ->body(trans('admin/egg.no_update_url', ['eggs' => $eggNames])) - ->send(); - } + Notification::make() + ->warning() + ->title(trans('admin/egg.cannot_update', ['count' => $eggsWithoutUpdateUrl->count()])) + ->body(trans('admin/egg.no_update_url', ['eggs' => $eggNames])) + ->send(); + } - $records = $records->filter(fn (Egg $egg) => $egg->update_url !== null); + $records = $records->filter(fn (Egg $egg) => $egg->update_url !== null); - if ($records->isEmpty()) { - $this->halt(); - } - }), + if ($records->isEmpty()) { + $this->halt(); + } + }), + ]), ]) ->emptyStateIcon(TablerIcon::Eggs) ->emptyStateDescription('') @@ -139,18 +138,4 @@ class ListEggs extends ListRecords ->model(Egg::class), ]); } - - /** @return array - * @throws Exception - */ - protected function getDefaultHeaderActions(): array - { - return [ - ImportEggAction::make() - ->multiple(), - CreateAction::make() - ->icon(TablerIcon::FilePlus) - ->iconButton()->iconSize(IconSize::ExtraLarge), - ]; - } } diff --git a/app/Filament/Admin/Resources/Mounts/MountResource.php b/app/Filament/Admin/Resources/Mounts/MountResource.php index f4b6b05a5..f02fbfb3a 100644 --- a/app/Filament/Admin/Resources/Mounts/MountResource.php +++ b/app/Filament/Admin/Resources/Mounts/MountResource.php @@ -14,6 +14,8 @@ use App\Traits\Filament\CanModifyForm; use App\Traits\Filament\CanModifyTable; use BackedEnum; use Exception; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\CreateAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Actions\ViewAction; @@ -99,8 +101,13 @@ class MountResource extends Resource ->hidden(fn ($record) => static::getEditAuthorizationResponse($record)->allowed()), EditAction::make(), ]) - ->groupedBulkActions([ - DeleteBulkAction::make(), + ->toolbarActions([ + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::Plus), + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), ]) ->emptyStateIcon(TablerIcon::LayersLinked) ->emptyStateDescription('') diff --git a/app/Filament/Admin/Resources/Mounts/Pages/CreateMount.php b/app/Filament/Admin/Resources/Mounts/Pages/CreateMount.php index 413c3d87a..e35eb5ec1 100644 --- a/app/Filament/Admin/Resources/Mounts/Pages/CreateMount.php +++ b/app/Filament/Admin/Resources/Mounts/Pages/CreateMount.php @@ -9,7 +9,6 @@ use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Resources\Pages\CreateRecord; -use Filament\Support\Enums\IconSize; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; @@ -26,8 +25,11 @@ class CreateMount extends CreateRecord protected function getDefaultHeaderActions(): array { return [ - $this->getCreateFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('create') + ->hiddenLabel() + ->action('create') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/create-record.form.actions.create.label')) ->icon(TablerIcon::FilePlus), ]; } diff --git a/app/Filament/Admin/Resources/Mounts/Pages/EditMount.php b/app/Filament/Admin/Resources/Mounts/Pages/EditMount.php index e2c2ddf03..f520ab78a 100644 --- a/app/Filament/Admin/Resources/Mounts/Pages/EditMount.php +++ b/app/Filament/Admin/Resources/Mounts/Pages/EditMount.php @@ -10,7 +10,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; -use Filament\Support\Enums\IconSize; class EditMount extends EditRecord { @@ -23,10 +22,12 @@ class EditMount extends EditRecord protected function getDefaultHeaderActions(): array { return [ - DeleteAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + DeleteAction::make(), + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; } diff --git a/app/Filament/Admin/Resources/Mounts/Pages/ListMounts.php b/app/Filament/Admin/Resources/Mounts/Pages/ListMounts.php index d124e7296..3bc47be46 100644 --- a/app/Filament/Admin/Resources/Mounts/Pages/ListMounts.php +++ b/app/Filament/Admin/Resources/Mounts/Pages/ListMounts.php @@ -2,15 +2,10 @@ namespace App\Filament\Admin\Resources\Mounts\Pages; -use App\Enums\TablerIcon; use App\Filament\Admin\Resources\Mounts\MountResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListMounts extends ListRecords { @@ -18,14 +13,4 @@ class ListMounts extends ListRecords use CanCustomizeHeaderWidgets; protected static string $resource = MountResource::class; - - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return [ - CreateAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->icon(TablerIcon::FilePlus), - ]; - } } diff --git a/app/Filament/Admin/Resources/Mounts/Pages/ViewMount.php b/app/Filament/Admin/Resources/Mounts/Pages/ViewMount.php index 9f5e275f0..7e4fab51c 100644 --- a/app/Filament/Admin/Resources/Mounts/Pages/ViewMount.php +++ b/app/Filament/Admin/Resources/Mounts/Pages/ViewMount.php @@ -9,7 +9,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\EditAction; use Filament\Resources\Pages\ViewRecord; -use Filament\Support\Enums\IconSize; class ViewMount extends ViewRecord { @@ -22,9 +21,7 @@ class ViewMount extends ViewRecord protected function getDefaultHeaderActions(): array { return [ - EditAction::make() - ->iconSize(IconSize::ExtraLarge) - ->iconButton(), + EditAction::make(), ]; } } diff --git a/app/Filament/Admin/Resources/Nodes/Pages/CreateNode.php b/app/Filament/Admin/Resources/Nodes/Pages/CreateNode.php index c79fe14f6..8fa088122 100644 --- a/app/Filament/Admin/Resources/Nodes/Pages/CreateNode.php +++ b/app/Filament/Admin/Resources/Nodes/Pages/CreateNode.php @@ -46,7 +46,7 @@ class CreateNode extends CreateRecord {{ trans('admin/node.create') }} diff --git a/app/Filament/Admin/Resources/Nodes/Pages/EditNode.php b/app/Filament/Admin/Resources/Nodes/Pages/EditNode.php index 9e49ed1f3..c30609d42 100644 --- a/app/Filament/Admin/Resources/Nodes/Pages/EditNode.php +++ b/app/Filament/Admin/Resources/Nodes/Pages/EditNode.php @@ -38,7 +38,6 @@ use Filament\Schemas\Components\Utilities\Set; use Filament\Schemas\Components\View; use Filament\Schemas\Schema; use Filament\Support\Enums\Alignment; -use Filament\Support\Enums\IconSize; use Filament\Support\RawJs; use Illuminate\Http\Client\ConnectionException; use Illuminate\Support\Facades\Http; @@ -647,8 +646,8 @@ class EditNode extends EditRecord ->disabled(fn (Get $get) => $get('pulled')) ->headerActions([ Action::make('pull') - ->label(trans('admin/node.diagnostics.pull')) - ->icon(TablerIcon::CloudDownload)->iconButton()->iconSize(IconSize::ExtraLarge) + ->tooltip(trans('admin/node.diagnostics.pull')) + ->icon(TablerIcon::CloudDownload) ->hidden(fn (Get $get) => $get('pulled')) ->action(function (Get $get, Set $set, Node $node) { $includeEndpoints = $get('include_endpoints') ?? true; @@ -685,9 +684,9 @@ class EditNode extends EditRecord } }), Action::make('upload') - ->label(trans('admin/node.diagnostics.upload')) + ->tooltip(trans('admin/node.diagnostics.upload')) ->visible(fn (Get $get) => $get('pulled') ?? false) - ->icon(TablerIcon::CloudUpload)->iconButton()->iconSize(IconSize::ExtraLarge) + ->icon(TablerIcon::CloudUpload) ->action(function (Get $get, Set $set) { try { $response = Http::asMultipart() @@ -713,7 +712,7 @@ class EditNode extends EditRecord ->body("{$url}") ->success() ->actions([ - Action::make('viewLogs') + Action::make('exclude_viewLogs') ->label(trans('admin/node.diagnostics.view_logs')) ->url($url) ->openUrlInNewTab(true), @@ -733,9 +732,9 @@ class EditNode extends EditRecord } }), Action::make('clear') - ->label(trans('admin/node.diagnostics.clear')) + ->tooltip(trans('admin/node.diagnostics.clear')) ->visible(fn (Get $get) => $get('pulled') ?? false) - ->icon(TablerIcon::Trash)->iconButton()->iconSize(IconSize::ExtraLarge)->color('danger') + ->icon(TablerIcon::Trash)->color('danger') ->action(function (Get $get, Set $set) { $set('pulled', false); $set('uploaded', false); @@ -809,10 +808,12 @@ class EditNode extends EditRecord return [ DeleteAction::make() ->disabled(fn (Node $node) => $node->servers()->count() > 0) - ->label(fn (Node $node) => $node->servers()->count() > 0 ? trans('admin/node.node_has_servers') : trans('filament-actions::delete.single.label')) - ->iconButton()->iconSize(IconSize::ExtraLarge), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->tooltip(fn (Node $node) => $node->servers()->count() > 0 ? trans('admin/node.node_has_servers') : trans('filament-actions::delete.single.label')), + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; } diff --git a/app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php b/app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php index b7eb0e54d..2bfc1623a 100644 --- a/app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php +++ b/app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php @@ -9,12 +9,9 @@ use App\Filament\Components\Tables\Filters\TagsFilter; use App\Models\Node; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; use Filament\Actions\CreateAction; use Filament\Actions\EditAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; @@ -66,6 +63,11 @@ class ListNodes extends ListRecords ->recordActions([ EditAction::make(), ]) + ->toolbarActions([ + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::Plus), + ]) ->emptyStateIcon(TablerIcon::Server2) ->emptyStateDescription('') ->emptyStateHeading(trans('admin/node.no_nodes')) @@ -74,14 +76,4 @@ class ListNodes extends ListRecords ->model(Node::class), ]); } - - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return [ - CreateAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->icon(TablerIcon::FilePlus), - ]; - } } diff --git a/app/Filament/Admin/Resources/Nodes/RelationManagers/AllocationsRelationManager.php b/app/Filament/Admin/Resources/Nodes/RelationManagers/AllocationsRelationManager.php index 8712e37d7..2ddeaf841 100644 --- a/app/Filament/Admin/Resources/Nodes/RelationManagers/AllocationsRelationManager.php +++ b/app/Filament/Admin/Resources/Nodes/RelationManagers/AllocationsRelationManager.php @@ -18,7 +18,6 @@ use Filament\Forms\Components\TextInput; use Filament\Resources\RelationManagers\RelationManager; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\SelectColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextInputColumn; @@ -88,9 +87,8 @@ class AllocationsRelationManager extends RelationManager DeleteBulkAction::make() ->authorize(fn () => user()?->can('update', $this->getOwnerRecord())), Action::make('create new allocation') - ->label(trans('admin/node.create_allocation')) + ->tooltip(trans('admin/node.create_allocation')) ->icon(TablerIcon::WorldPlus) - ->iconButton()->iconSize(IconSize::ExtraLarge) ->schema(fn () => [ Select::make('allocation_ip') ->options(fn () => collect($this->getOwnerRecord()->ipAddresses())->mapWithKeys(fn (string $ip) => [$ip => $ip])) @@ -101,8 +99,7 @@ class AllocationsRelationManager extends RelationManager ->afterStateUpdated(fn (Set $set) => $set('allocation_ports', [])) ->live() ->hintAction( - Action::make('refresh') - ->iconButton() + Action::make('hint_refresh') ->icon(TablerIcon::Refresh) ->tooltip(trans('admin/node.refresh')) ->action(function () { diff --git a/app/Filament/Admin/Resources/Plugins/PluginResource.php b/app/Filament/Admin/Resources/Plugins/PluginResource.php index 4770b1d2d..a9c42da62 100644 --- a/app/Filament/Admin/Resources/Plugins/PluginResource.php +++ b/app/Filament/Admin/Resources/Plugins/PluginResource.php @@ -16,7 +16,6 @@ use Filament\Forms\Components\TextInput; use Filament\Infolists\Components\TextEntry; use Filament\Notifications\Notification; use Filament\Resources\Resource; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Http\UploadedFile; @@ -84,7 +83,7 @@ class PluginResource extends Resource ->sortable(), ]) ->recordActions([ - Action::make('view') + Action::make('exclude_view') ->label(trans('filament-actions::view.single.label')) ->icon(fn (Plugin $plugin) => $plugin->getReadme() ? TablerIcon::Eye : TablerIcon::EyeShare) ->color('gray') @@ -104,7 +103,7 @@ class PluginResource extends Resource ->markdown() ->state(fn (Plugin $plugin) => $plugin->getReadme()), ] : null), - Action::make('settings') + Action::make('exclude_settings') ->label(trans('admin/plugin.settings')) ->authorize(fn (Plugin $plugin) => user()?->can('update', $plugin)) ->icon(TablerIcon::Settings) @@ -114,7 +113,7 @@ class PluginResource extends Resource ->action(fn (array $data, Plugin $plugin) => $plugin->saveSettings($data)) ->slideOver(), ActionGroup::make([ - Action::make('install') + Action::make('exclude_install') ->label(trans('admin/plugin.install')) ->authorize(fn (Plugin $plugin) => user()?->can('update', $plugin)) ->icon(TablerIcon::Terminal) @@ -138,7 +137,7 @@ class PluginResource extends Resource ->send(); } }), - Action::make('update') + Action::make('exclude_update') ->label(trans('admin/plugin.update')) ->authorize(fn (Plugin $plugin) => user()?->can('update', $plugin)) ->icon(TablerIcon::Download) @@ -162,7 +161,7 @@ class PluginResource extends Resource ->send(); } }), - Action::make('enable') + Action::make('exclude_enable') ->label(trans('admin/plugin.enable')) ->authorize(fn (Plugin $plugin) => user()?->can('update', $plugin)) ->icon(TablerIcon::Check) @@ -181,7 +180,7 @@ class PluginResource extends Resource ->title(trans('admin/plugin.notifications.enabled')) ->send(); }), - Action::make('disable') + Action::make('exclude_disable') ->label(trans('admin/plugin.disable')) ->authorize(fn (Plugin $plugin) => user()?->can('update', $plugin)) ->icon(TablerIcon::X) @@ -197,7 +196,7 @@ class PluginResource extends Resource ->title(trans('admin/plugin.notifications.disabled')) ->send(); }), - Action::make('delete') + Action::make('exclude_delete') ->label(trans('filament-actions::delete.single.label')) ->authorize(fn (Plugin $plugin) => user()?->can('delete', $plugin)) ->icon(TablerIcon::Trash) @@ -214,7 +213,7 @@ class PluginResource extends Resource ->title(trans('admin/plugin.notifications.deleted')) ->send(); }), - Action::make('uninstall') + Action::make('exclude_uninstall') ->label(trans('admin/plugin.uninstall')) ->authorize(fn (Plugin $plugin) => user()?->can('update', $plugin)) ->icon(TablerIcon::Terminal) @@ -243,11 +242,10 @@ class PluginResource extends Resource ]) ->headerActions([ Action::make('import_from_file') - ->label(trans('admin/plugin.import_from_file')) + ->hiddenLabel() + ->tooltip(trans('admin/plugin.import_from_file')) ->authorize(fn () => user()?->can('create', Plugin::class)) ->icon(TablerIcon::FileDownload) - ->iconButton() - ->iconSize(IconSize::ExtraLarge) ->schema([ // TODO: switch to new file upload FileUpload::make('file') @@ -287,11 +285,10 @@ class PluginResource extends Resource } }), Action::make('import_from_url') - ->label(trans('admin/plugin.import_from_url')) + ->hiddenLabel() + ->tooltip(trans('admin/plugin.import_from_url')) ->authorize(fn () => user()?->can('create', Plugin::class)) ->icon(TablerIcon::WorldDownload) - ->iconButton() - ->iconSize(IconSize::ExtraLarge) ->schema([ TextInput::make('url') ->required() diff --git a/app/Filament/Admin/Resources/Roles/Pages/CreateRole.php b/app/Filament/Admin/Resources/Roles/Pages/CreateRole.php index 72af628b9..f131d86f2 100644 --- a/app/Filament/Admin/Resources/Roles/Pages/CreateRole.php +++ b/app/Filament/Admin/Resources/Roles/Pages/CreateRole.php @@ -10,7 +10,6 @@ use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Resources\Pages\CreateRecord; -use Filament\Support\Enums\IconSize; use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Spatie\Permission\Models\Permission; @@ -33,8 +32,11 @@ class CreateRole extends CreateRecord protected function getDefaultHeaderActions(): array { return [ - $this->getCreateFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('create') + ->hiddenLabel() + ->action('create') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/create-record.form.actions.create.label')) ->icon(TablerIcon::FilePlus), ]; } diff --git a/app/Filament/Admin/Resources/Roles/Pages/EditRole.php b/app/Filament/Admin/Resources/Roles/Pages/EditRole.php index 302c38595..9f531ec74 100644 --- a/app/Filament/Admin/Resources/Roles/Pages/EditRole.php +++ b/app/Filament/Admin/Resources/Roles/Pages/EditRole.php @@ -11,7 +11,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; -use Filament\Support\Enums\IconSize; use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Spatie\Permission\Models\Permission; @@ -59,11 +58,13 @@ class EditRole extends EditRecord { return [ DeleteAction::make() - ->label(fn (Role $role) => $role->isRootAdmin() ? trans('admin/role.root_admin_delete') : ($role->users_count >= 1 ? trans('admin/role.in_use') : trans('filament-actions::delete.single.label'))) - ->disabled(fn (Role $role) => $role->isRootAdmin() || $role->users_count >= 1) - ->iconButton()->iconSize(IconSize::ExtraLarge), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->tooltip(fn (Role $role) => $role->isRootAdmin() ? trans('admin/role.root_admin_delete') : ($role->users_count >= 1 ? trans('admin/role.in_use') : trans('filament-actions::delete.single.label'))) + ->disabled(fn (Role $role) => $role->isRootAdmin() || $role->users_count >= 1), + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; } diff --git a/app/Filament/Admin/Resources/Roles/Pages/ListRoles.php b/app/Filament/Admin/Resources/Roles/Pages/ListRoles.php index ada967185..c018e6874 100644 --- a/app/Filament/Admin/Resources/Roles/Pages/ListRoles.php +++ b/app/Filament/Admin/Resources/Roles/Pages/ListRoles.php @@ -2,15 +2,10 @@ namespace App\Filament\Admin\Resources\Roles\Pages; -use App\Enums\TablerIcon; use App\Filament\Admin\Resources\Roles\RoleResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListRoles extends ListRecords { @@ -18,14 +13,4 @@ class ListRoles extends ListRecords use CanCustomizeHeaderWidgets; protected static string $resource = RoleResource::class; - - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return [ - CreateAction::make() - ->icon(TablerIcon::FilePlus) - ->iconButton()->iconSize(IconSize::ExtraLarge), - ]; - } } diff --git a/app/Filament/Admin/Resources/Roles/Pages/ViewRole.php b/app/Filament/Admin/Resources/Roles/Pages/ViewRole.php index c7054b996..aacca83a6 100644 --- a/app/Filament/Admin/Resources/Roles/Pages/ViewRole.php +++ b/app/Filament/Admin/Resources/Roles/Pages/ViewRole.php @@ -9,7 +9,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\EditAction; use Filament\Resources\Pages\ViewRecord; -use Filament\Support\Enums\IconSize; class ViewRole extends ViewRecord { @@ -22,8 +21,7 @@ class ViewRole extends ViewRecord protected function getDefaultHeaderActions(): array { return [ - EditAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge), + EditAction::make(), ]; } } diff --git a/app/Filament/Admin/Resources/Roles/RoleResource.php b/app/Filament/Admin/Resources/Roles/RoleResource.php index f1266c2bb..d090300ce 100644 --- a/app/Filament/Admin/Resources/Roles/RoleResource.php +++ b/app/Filament/Admin/Resources/Roles/RoleResource.php @@ -16,6 +16,8 @@ use App\Traits\Filament\CanModifyTable; use BackedEnum; use Exception; use Filament\Actions\Action; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\CreateAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Actions\ViewAction; @@ -101,10 +103,15 @@ class RoleResource extends Resource ->hidden(fn ($record) => static::getEditAuthorizationResponse($record)->allowed()), EditAction::make(), ]) - ->checkIfRecordIsSelectableUsing(fn (Role $role) => !$role->isRootAdmin() && $role->users_count <= 0) - ->groupedBulkActions([ - DeleteBulkAction::make(), - ]); + ->toolbarActions([ + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::Plus), + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), + ]) + ->checkIfRecordIsSelectableUsing(fn (Role $role) => !$role->isRootAdmin() && $role->users_count <= 0); } /** diff --git a/app/Filament/Admin/Resources/Servers/Pages/CreateServer.php b/app/Filament/Admin/Resources/Servers/Pages/CreateServer.php index 75c31e463..a74fc7b4d 100644 --- a/app/Filament/Admin/Resources/Servers/Pages/CreateServer.php +++ b/app/Filament/Admin/Resources/Servers/Pages/CreateServer.php @@ -255,7 +255,7 @@ class CreateServer extends CreateRecord ->ip() ->live() ->hintAction( - Action::make('refresh') + Action::make('hint_refresh') ->iconButton() ->icon(TablerIcon::Refresh) ->tooltip(trans('admin/node.refresh')) diff --git a/app/Filament/Admin/Resources/Servers/Pages/EditServer.php b/app/Filament/Admin/Resources/Servers/Pages/EditServer.php index 1e6657cee..4db2eba28 100644 --- a/app/Filament/Admin/Resources/Servers/Pages/EditServer.php +++ b/app/Filament/Admin/Resources/Servers/Pages/EditServer.php @@ -57,7 +57,6 @@ use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; use Filament\Schemas\Schema; use Filament\Support\Enums\Alignment; -use Filament\Support\Enums\IconSize; use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\Client\ConnectionException; use Illuminate\Support\Arr; @@ -122,8 +121,8 @@ class EditServer extends EditRecord ->columnSpan(2) ->alignJustify(), Action::make('uploadIcon') - ->iconButton()->iconSize(IconSize::Large) ->icon(TablerIcon::PhotoUp) + ->tooltip(trans('admin/server.import_image')) ->modal() ->modalSubmitActionLabel(trans('server/setting.server_info.icon.upload')) ->schema([ @@ -260,7 +259,7 @@ class EditServer extends EditRecord TextInput::make('name') ->prefixIcon(TablerIcon::Server) ->label(trans('admin/server.name')) - ->suffixAction(Action::make('random') + ->suffixAction(Action::make('hint_random') ->icon('tabler-dice-' . random_int(1, 6)) ->action(function (Set $set, Get $get) { $egg = Egg::find($get('egg_id')); @@ -729,7 +728,7 @@ class EditServer extends EditRecord ->preload() ->required() ->hintAction( - Action::make('change_egg') + Action::make('hint_change_egg') ->label(trans('admin/server.change_egg')) ->action(function (array $data, Server $server, EggChangerService $service) { $service->handle($server, $data['egg_id'], $data['keep_old_variables']); @@ -796,7 +795,7 @@ class EditServer extends EditRecord }) ->selectablePlaceholder(false) ->columnSpanFull() - ->hintAction(PreviewStartupAction::make('preview')), + ->hintAction(PreviewStartupAction::make('hint_preview')), Textarea::make('startup') ->hiddenLabel() @@ -1101,7 +1100,8 @@ class EditServer extends EditRecord return [ Action::make('Delete') ->color('danger') - ->label(trans('filament-actions::delete.single.label')) + ->hiddenLabel() + ->tooltip(trans('filament-actions::delete.single.label')) ->modalHeading(trans('filament-actions::delete.single.modal.heading', ['label' => $this->getRecordTitle()])) ->modalSubmitActionLabel(trans('filament-actions::delete.single.label')) ->requiresConfirmation() @@ -1124,8 +1124,7 @@ class EditServer extends EditRecord }) ->hidden(fn () => $canForceDelete) ->authorize(fn (Server $server) => user()?->can('delete server', $server)) - ->icon(TablerIcon::Trash) - ->iconButton()->iconSize(IconSize::ExtraLarge), + ->icon(TablerIcon::Trash), Action::make('ForceDelete') ->color('danger') ->label(trans('filament-actions::force-delete.single.label')) @@ -1144,12 +1143,15 @@ class EditServer extends EditRecord ->visible(fn () => $canForceDelete) ->authorize(fn (Server $server) => user()?->can('delete server', $server)), Action::make('console') - ->label(trans('admin/server.console')) + ->hiddenLabel() + ->tooltip(trans('admin/server.console')) ->icon(TablerIcon::Terminal) - ->iconButton()->iconSize(IconSize::ExtraLarge) ->url(fn (Server $server) => Console::getUrl(panel: 'server', tenant: $server)), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; diff --git a/app/Filament/Admin/Resources/Servers/Pages/ListServers.php b/app/Filament/Admin/Resources/Servers/Pages/ListServers.php index 99417d3b9..418fbaa0b 100644 --- a/app/Filament/Admin/Resources/Servers/Pages/ListServers.php +++ b/app/Filament/Admin/Resources/Servers/Pages/ListServers.php @@ -9,11 +9,9 @@ use App\Models\Server; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; -use Filament\Actions\ActionGroup; use Filament\Actions\CreateAction; use Filament\Actions\EditAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\SelectColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Grouping\Group; @@ -92,28 +90,21 @@ class ListServers extends ListRecords ->sortable(), ]) ->recordActions([ - Action::make('View') - ->label(trans('admin/server.view')) - ->iconButton() + Action::make('view') + ->tooltip(trans('admin/server.view')) ->icon(TablerIcon::Terminal) - ->iconSize(IconSize::Large) ->url(fn (Server $server) => Console::getUrl(panel: 'server', tenant: $server)) ->authorize(fn (Server $server) => user()?->canAccessTenant($server)), EditAction::make(), ]) + ->toolbarActions([ + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::Plus), + ]) ->searchable() ->emptyStateIcon(TablerIcon::BrandDocker) ->emptyStateDescription('') ->emptyStateHeading(trans('admin/server.no_servers')); } - - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return [ - CreateAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->icon(TablerIcon::FilePlus), - ]; - } } diff --git a/app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php b/app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php index c9fbcc10b..57f7d1dbc 100644 --- a/app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php +++ b/app/Filament/Admin/Resources/Servers/RelationManagers/AllocationsRelationManager.php @@ -107,9 +107,9 @@ class AllocationsRelationManager extends RelationManager } }), CreateAction::make() - ->label(trans('admin/server.create_allocation')) + ->hiddenLabel() + ->tooltip(trans('admin/server.create_allocation')) ->icon(TablerIcon::Network) - ->iconButton()->iconSize(IconSize::ExtraLarge) ->createAnother(false) ->schema(fn () => [ Select::make('allocation_ip') @@ -120,7 +120,6 @@ class AllocationsRelationManager extends RelationManager ->live() ->hintAction( Action::make('refresh') - ->iconButton() ->icon(TablerIcon::Refresh) ->tooltip(trans('admin/node.refresh')) ->action(function () { @@ -155,7 +154,7 @@ class AllocationsRelationManager extends RelationManager ->preloadRecordSelect() ->recordSelectOptionsQuery(fn ($query) => $query->whereBelongsTo($this->getOwnerRecord()->node)->whereNull('server_id')) ->recordSelectSearchColumns(['ip', 'port']) - ->label(trans('admin/server.add_allocation')) + ->tooltip(trans('admin/server.add_allocation')) ->after(function (array $data) { Allocation::whereIn('id', array_values(array_unique($data['recordId'])))->update(['is_locked' => true]); diff --git a/app/Filament/Admin/Resources/Servers/RelationManagers/DatabasesRelationManager.php b/app/Filament/Admin/Resources/Servers/RelationManagers/DatabasesRelationManager.php index 24266f328..069e60c32 100644 --- a/app/Filament/Admin/Resources/Servers/RelationManagers/DatabasesRelationManager.php +++ b/app/Filament/Admin/Resources/Servers/RelationManagers/DatabasesRelationManager.php @@ -19,7 +19,6 @@ use Filament\Forms\Components\TextInput; use Filament\Notifications\Notification; use Filament\Resources\RelationManagers\RelationManager; use Filament\Schemas\Schema; -use Filament\Support\Enums\IconSize; use Filament\Support\Exceptions\Halt; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; @@ -84,7 +83,6 @@ class DatabasesRelationManager extends RelationManager ViewAction::make() ->color('primary'), DeleteAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge) ->successNotificationTitle(null) ->using(function (Database $database, DatabaseManagementService $service) { try { @@ -106,11 +104,11 @@ class DatabasesRelationManager extends RelationManager ]) ->toolbarActions([ CreateAction::make() + ->hiddenLabel() ->disabled(fn () => DatabaseHost::count() < 1) - ->label(fn () => DatabaseHost::count() < 1 ? trans('admin/server.no_db_hosts') : trans('admin/server.create_database')) + ->tooltip(fn () => DatabaseHost::count() < 1 ? trans('admin/server.no_db_hosts') : trans('admin/server.create_database')) ->color(fn () => DatabaseHost::count() < 1 ? 'danger' : 'primary') ->icon(fn () => DatabaseHost::count() < 1 ? TablerIcon::DatabaseX : TablerIcon::DatabasePlus) - ->iconButton()->iconSize(IconSize::ExtraLarge) ->createAnother(false) ->action(function (array $data, DatabaseManagementService $service, RandomWordService $randomWordService) { $data['database'] ??= $randomWordService->word() . random_int(1, 420); diff --git a/app/Filament/Admin/Resources/Users/Pages/CreateUser.php b/app/Filament/Admin/Resources/Users/Pages/CreateUser.php index 3f282c7e7..a0034b3c2 100644 --- a/app/Filament/Admin/Resources/Users/Pages/CreateUser.php +++ b/app/Filament/Admin/Resources/Users/Pages/CreateUser.php @@ -11,7 +11,6 @@ use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Resources\Pages\CreateRecord; -use Filament\Support\Enums\IconSize; use Illuminate\Database\Eloquent\Model; class CreateUser extends CreateRecord @@ -34,8 +33,11 @@ class CreateUser extends CreateRecord protected function getDefaultHeaderActions(): array { return [ - $this->getCreateFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('create') + ->hiddenLabel() + ->action('create') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/create-record.form.actions.create.label')) ->icon(TablerIcon::UserPlus), ]; } diff --git a/app/Filament/Admin/Resources/Users/Pages/EditUser.php b/app/Filament/Admin/Resources/Users/Pages/EditUser.php index 0d5accc23..5b575b5d2 100644 --- a/app/Filament/Admin/Resources/Users/Pages/EditUser.php +++ b/app/Filament/Admin/Resources/Users/Pages/EditUser.php @@ -12,7 +12,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; -use Filament\Support\Enums\IconSize; use Illuminate\Database\Eloquent\Model; class EditUser extends EditRecord @@ -34,11 +33,13 @@ class EditUser extends EditRecord { return [ DeleteAction::make() - ->label(fn (User $user) => user()?->id === $user->id ? trans('admin/user.self_delete') : ($user->servers()->count() > 0 ? trans('admin/user.has_servers') : trans('filament-actions::delete.single.modal.actions.delete.label'))) - ->disabled(fn (User $user) => user()?->id === $user->id || $user->servers()->count() > 0) - ->iconButton()->iconSize(IconSize::ExtraLarge), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->tooltip(fn (User $user) => user()?->id === $user->id ? trans('admin/user.self_delete') : ($user->servers()->count() > 0 ? trans('admin/user.has_servers') : trans('filament-actions::delete.single.modal.actions.delete.label'))) + ->disabled(fn (User $user) => user()?->id === $user->id || $user->servers()->count() > 0), + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; } diff --git a/app/Filament/Admin/Resources/Users/Pages/ListUsers.php b/app/Filament/Admin/Resources/Users/Pages/ListUsers.php index 9942e8698..b714fde20 100644 --- a/app/Filament/Admin/Resources/Users/Pages/ListUsers.php +++ b/app/Filament/Admin/Resources/Users/Pages/ListUsers.php @@ -2,15 +2,10 @@ namespace App\Filament\Admin\Resources\Users\Pages; -use App\Enums\TablerIcon; use App\Filament\Admin\Resources\Users\UserResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListUsers extends ListRecords { @@ -18,14 +13,4 @@ class ListUsers extends ListRecords use CanCustomizeHeaderWidgets; protected static string $resource = UserResource::class; - - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return [ - CreateAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->icon(TablerIcon::UserPlus), - ]; - } } diff --git a/app/Filament/Admin/Resources/Users/Pages/ViewUser.php b/app/Filament/Admin/Resources/Users/Pages/ViewUser.php index 615ca5d5f..386deece2 100644 --- a/app/Filament/Admin/Resources/Users/Pages/ViewUser.php +++ b/app/Filament/Admin/Resources/Users/Pages/ViewUser.php @@ -9,7 +9,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\EditAction; use Filament\Resources\Pages\ViewRecord; -use Filament\Support\Enums\IconSize; class ViewUser extends ViewRecord { @@ -22,8 +21,7 @@ class ViewUser extends ViewRecord protected function getDefaultHeaderActions(): array { return [ - EditAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge), + EditAction::make(), ]; } } diff --git a/app/Filament/Admin/Resources/Users/UserResource.php b/app/Filament/Admin/Resources/Users/UserResource.php index 0cc78be68..1a7cfe316 100644 --- a/app/Filament/Admin/Resources/Users/UserResource.php +++ b/app/Filament/Admin/Resources/Users/UserResource.php @@ -26,6 +26,8 @@ use BackedEnum; use DateTimeZone; use Exception; use Filament\Actions\Action; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\CreateAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Actions\ViewAction; @@ -138,10 +140,15 @@ class UserResource extends Resource ->hidden(fn ($record) => static::getEditAuthorizationResponse($record)->allowed()), EditAction::make(), ]) - ->checkIfRecordIsSelectableUsing(fn (User $user) => user()?->id !== $user->id && !$user->servers_count) - ->groupedBulkActions([ - DeleteBulkAction::make(), - ]); + ->toolbarActions([ + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::UserPlus), + ]) + ->checkIfRecordIsSelectableUsing(fn (User $user) => user()?->id !== $user->id && !$user->servers_count); } public static function defaultForm(Schema $schema): Schema @@ -199,7 +206,7 @@ class UserResource extends Resource ->hintIcon(fn ($operation) => $operation === 'create' ? TablerIcon::QuestionMark : null, fn ($operation) => $operation === 'create' ? trans('admin/user.password_help') : null) ->password() ->hintAction( - Action::make('password_reset') + Action::make('hint_password_reset') ->label(trans('admin/user.password_reset')) ->hidden(fn (string $operation) => $operation === 'create' || config('mail.default', 'log') === 'log') ->icon(TablerIcon::Send) diff --git a/app/Filament/Admin/Resources/Webhooks/Pages/CreateWebhookConfiguration.php b/app/Filament/Admin/Resources/Webhooks/Pages/CreateWebhookConfiguration.php index 3f52d912d..2fdc7375d 100644 --- a/app/Filament/Admin/Resources/Webhooks/Pages/CreateWebhookConfiguration.php +++ b/app/Filament/Admin/Resources/Webhooks/Pages/CreateWebhookConfiguration.php @@ -10,7 +10,6 @@ use App\Traits\Filament\CanCustomizeHeaderWidgets; use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Resources\Pages\CreateRecord; -use Filament\Support\Enums\IconSize; class CreateWebhookConfiguration extends CreateRecord { @@ -26,11 +25,15 @@ class CreateWebhookConfiguration extends CreateRecord { return [ $this->getCancelFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() + ->tooltip(trans('filament-panels::resources/pages/create-record.form.actions.cancel.label')) ->icon(TablerIcon::ArrowLeft), - $this->getCreateFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->icon(TablerIcon::FilePlus), + Action::make('create') + ->hiddenLabel() + ->action('create') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/create-record.form.actions.create.label')) + ->icon(TablerIcon::Plus), ]; } diff --git a/app/Filament/Admin/Resources/Webhooks/Pages/EditWebhookConfiguration.php b/app/Filament/Admin/Resources/Webhooks/Pages/EditWebhookConfiguration.php index fe08e7db4..5b80927a7 100644 --- a/app/Filament/Admin/Resources/Webhooks/Pages/EditWebhookConfiguration.php +++ b/app/Filament/Admin/Resources/Webhooks/Pages/EditWebhookConfiguration.php @@ -12,7 +12,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\DeleteAction; use Filament\Resources\Pages\EditRecord; -use Filament\Support\Enums\IconSize; class EditWebhookConfiguration extends EditRecord { @@ -25,16 +24,18 @@ class EditWebhookConfiguration extends EditRecord protected function getDefaultHeaderActions(): array { return [ - DeleteAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge), + DeleteAction::make(), Action::make('test_now') ->label(trans('admin/webhook.test_now')) ->color('primary') ->disabled(fn (WebhookConfiguration $webhookConfiguration) => count($webhookConfiguration->events) === 0) ->action(fn (WebhookConfiguration $webhookConfiguration) => $webhookConfiguration->run()) ->tooltip(trans('admin/webhook.test_now_help')), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; } diff --git a/app/Filament/Admin/Resources/Webhooks/Pages/ListWebhookConfigurations.php b/app/Filament/Admin/Resources/Webhooks/Pages/ListWebhookConfigurations.php index cfe2f186b..50a1f17b1 100644 --- a/app/Filament/Admin/Resources/Webhooks/Pages/ListWebhookConfigurations.php +++ b/app/Filament/Admin/Resources/Webhooks/Pages/ListWebhookConfigurations.php @@ -2,15 +2,10 @@ namespace App\Filament\Admin\Resources\Webhooks\Pages; -use App\Enums\TablerIcon; use App\Filament\Admin\Resources\Webhooks\WebhookResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; -use Filament\Actions\CreateAction; use Filament\Resources\Pages\ListRecords; -use Filament\Support\Enums\IconSize; class ListWebhookConfigurations extends ListRecords { @@ -18,14 +13,4 @@ class ListWebhookConfigurations extends ListRecords use CanCustomizeHeaderWidgets; protected static string $resource = WebhookResource::class; - - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return [ - CreateAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->icon(TablerIcon::FilePlus), - ]; - } } diff --git a/app/Filament/Admin/Resources/Webhooks/Pages/ViewWebhookConfiguration.php b/app/Filament/Admin/Resources/Webhooks/Pages/ViewWebhookConfiguration.php index bde009ea6..226b64cda 100644 --- a/app/Filament/Admin/Resources/Webhooks/Pages/ViewWebhookConfiguration.php +++ b/app/Filament/Admin/Resources/Webhooks/Pages/ViewWebhookConfiguration.php @@ -9,7 +9,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\EditAction; use Filament\Resources\Pages\ViewRecord; -use Filament\Support\Enums\IconSize; class ViewWebhookConfiguration extends ViewRecord { @@ -22,8 +21,7 @@ class ViewWebhookConfiguration extends ViewRecord protected function getDefaultHeaderActions(): array { return [ - EditAction::make() - ->iconButton()->iconSize(IconSize::ExtraLarge), + EditAction::make(), ]; } } diff --git a/app/Filament/Admin/Resources/Webhooks/WebhookResource.php b/app/Filament/Admin/Resources/Webhooks/WebhookResource.php index 64c8505ce..34eb4342e 100644 --- a/app/Filament/Admin/Resources/Webhooks/WebhookResource.php +++ b/app/Filament/Admin/Resources/Webhooks/WebhookResource.php @@ -17,6 +17,8 @@ use App\Traits\Filament\CanModifyTable; use BackedEnum; use Exception; use Filament\Actions\Action; +use Filament\Actions\BulkActionGroup; +use Filament\Actions\CreateAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Actions\ReplicateAction; @@ -109,8 +111,13 @@ class WebhookResource extends Resource ->beforeReplicaSaved(fn (WebhookConfiguration $replica) => $replica->description .= ' Copy ' . now()->format('Y-m-d H:i:s')) ->successRedirectUrl(fn (WebhookConfiguration $replica) => EditWebhookConfiguration::getUrl(['record' => $replica])), ]) - ->groupedBulkActions([ - DeleteBulkAction::make(), + ->toolbarActions([ + CreateAction::make() + ->hiddenLabel() + ->icon(TablerIcon::Plus), + BulkActionGroup::make([ + DeleteBulkAction::make(), + ]), ]) ->emptyStateIcon(TablerIcon::Webhook) ->emptyStateDescription('') diff --git a/app/Filament/Admin/Widgets/CanaryWidget.php b/app/Filament/Admin/Widgets/CanaryWidget.php index 3606dcdff..d73bc0171 100644 --- a/app/Filament/Admin/Widgets/CanaryWidget.php +++ b/app/Filament/Admin/Widgets/CanaryWidget.php @@ -40,7 +40,7 @@ class CanaryWidget extends FormWidget ->state(trans('admin/dashboard.sections.intro-developers.extra_note')), ]) ->headerActions([ - Action::make('issues') + Action::make('db_issues') ->label(trans('admin/dashboard.sections.intro-developers.button_issues')) ->icon(TablerIcon::BrandGithub) ->url('https://github.com/pelican-dev/panel/issues', true), diff --git a/app/Filament/Admin/Widgets/HelpWidget.php b/app/Filament/Admin/Widgets/HelpWidget.php index 66f441405..2c994dcbf 100644 --- a/app/Filament/Admin/Widgets/HelpWidget.php +++ b/app/Filament/Admin/Widgets/HelpWidget.php @@ -31,7 +31,7 @@ class HelpWidget extends FormWidget ->state(trans('admin/dashboard.sections.intro-help.content')), ]) ->headerActions([ - Action::make('docs') + Action::make('db_docs') ->label(trans('admin/dashboard.sections.intro-help.button_docs')) ->icon(TablerIcon::Speedboat) ->url('https://pelican.dev/docs', true), diff --git a/app/Filament/Admin/Widgets/NoNodesWidget.php b/app/Filament/Admin/Widgets/NoNodesWidget.php index 87358c426..3cd458821 100644 --- a/app/Filament/Admin/Widgets/NoNodesWidget.php +++ b/app/Filament/Admin/Widgets/NoNodesWidget.php @@ -38,7 +38,7 @@ class NoNodesWidget extends FormWidget ->state(trans('admin/dashboard.sections.intro-first-node.content')), ]) ->headerActions([ - Action::make('create-node') + Action::make('db_create-node') ->label(trans('admin/dashboard.sections.intro-first-node.button_label')) ->icon(TablerIcon::Server2) ->url(CreateNode::getUrl()), diff --git a/app/Filament/Admin/Widgets/SupportWidget.php b/app/Filament/Admin/Widgets/SupportWidget.php index ba7d7bd41..1010aed66 100644 --- a/app/Filament/Admin/Widgets/SupportWidget.php +++ b/app/Filament/Admin/Widgets/SupportWidget.php @@ -34,7 +34,7 @@ class SupportWidget extends FormWidget ->state(trans('admin/dashboard.sections.intro-support.extra_note')), ]) ->headerActions([ - Action::make('donate') + Action::make('db_donate') ->label(trans('admin/dashboard.sections.intro-support.button_donate')) ->icon(TablerIcon::Cash) ->url('https://pelican.dev/donate', true) diff --git a/app/Filament/Admin/Widgets/UpdateWidget.php b/app/Filament/Admin/Widgets/UpdateWidget.php index cb2312570..181de8d36 100644 --- a/app/Filament/Admin/Widgets/UpdateWidget.php +++ b/app/Filament/Admin/Widgets/UpdateWidget.php @@ -58,7 +58,7 @@ class UpdateWidget extends FormWidget ]), ]) ->headerActions([ - Action::make('update') + Action::make('db_update') ->label(trans('admin/dashboard.sections.intro-update-available.heading')) ->icon(TablerIcon::ClipboardText) ->url('https://pelican.dev/docs/panel/update', true) diff --git a/app/Filament/Components/Actions/DeleteServerIcon.php b/app/Filament/Components/Actions/DeleteServerIcon.php index a85eedb55..d2d1e8398 100644 --- a/app/Filament/Components/Actions/DeleteServerIcon.php +++ b/app/Filament/Components/Actions/DeleteServerIcon.php @@ -6,7 +6,6 @@ use App\Enums\TablerIcon; use App\Models\Server; use Filament\Actions\Action; use Filament\Notifications\Notification; -use Filament\Support\Enums\IconSize; use Illuminate\Support\Facades\Storage; class DeleteServerIcon extends Action @@ -24,12 +23,10 @@ class DeleteServerIcon extends Action $this->hiddenLabel(); + $this->tooltip(trans('admin/server.import_image')); + $this->icon(TablerIcon::Trash); - $this->iconButton(); - - $this->iconSize(IconSize::Large); - $this->color('danger'); $this->action(function ($record) { diff --git a/app/Filament/Components/Actions/ExportEggAction.php b/app/Filament/Components/Actions/ExportEggAction.php index 9006b0fed..94d5e8459 100644 --- a/app/Filament/Components/Actions/ExportEggAction.php +++ b/app/Filament/Components/Actions/ExportEggAction.php @@ -8,7 +8,6 @@ use App\Models\Egg; use Filament\Actions\Action; use Filament\Infolists\Components\TextEntry; use Filament\Support\Enums\Alignment; -use Filament\Support\Enums\IconSize; class ExportEggAction extends Action { @@ -21,16 +20,12 @@ class ExportEggAction extends Action { parent::setUp(); - $this->label(trans('filament-actions::export.modal.actions.export.label')); - - $this->iconButton(); + $this->tooltip(trans('filament-actions::export.modal.actions.export.label')); $this->icon(TablerIcon::Download); $this->tableIcon(TablerIcon::Download); - $this->iconSize(IconSize::ExtraLarge); - $this->authorize(fn () => user()?->can('export egg')); $this->modalHeading(fn (Egg $egg) => trans('filament-actions::export.modal.actions.export.label') . ' ' . $egg->name); @@ -46,11 +41,11 @@ class ExportEggAction extends Action $this->modalFooterActionsAlignment(Alignment::Center); $this->modalFooterActions([ - Action::make('json') + Action::make('exclude_json') ->label(trans('admin/egg.export.as', ['format' => 'json'])) ->url(fn (Egg $egg) => route('api.application.eggs.eggs.export', ['egg' => $egg, 'format' => EggFormat::JSON->value]), true) ->close(), - Action::make('yaml') + Action::make('exclude_yaml') ->label(trans('admin/egg.export.as', ['format' => 'yaml'])) ->url(fn (Egg $egg) => route('api.application.eggs.eggs.export', ['egg' => $egg, 'format' => EggFormat::YAML->value]), true) ->close(), diff --git a/app/Filament/Components/Actions/ExportScheduleAction.php b/app/Filament/Components/Actions/ExportScheduleAction.php index ea7092fb2..1e46b666c 100644 --- a/app/Filament/Components/Actions/ExportScheduleAction.php +++ b/app/Filament/Components/Actions/ExportScheduleAction.php @@ -9,7 +9,6 @@ use App\Models\Server; use App\Services\Schedules\Sharing\ScheduleExporterService; use Filament\Actions\Action; use Filament\Facades\Filament; -use Filament\Support\Enums\IconSize; class ExportScheduleAction extends Action { @@ -24,10 +23,6 @@ class ExportScheduleAction extends Action $this->hiddenLabel(); - $this->iconButton(); - - $this->iconSize(IconSize::ExtraLarge); - $this->icon(TablerIcon::Download); $this->tooltip(trans('server/schedule.export')); diff --git a/app/Filament/Components/Actions/ImportEggAction.php b/app/Filament/Components/Actions/ImportEggAction.php index 0d53b62bf..e8afc3ce8 100644 --- a/app/Filament/Components/Actions/ImportEggAction.php +++ b/app/Filament/Components/Actions/ImportEggAction.php @@ -18,7 +18,6 @@ use Filament\Infolists\Components\TextEntry; use Filament\Notifications\Notification; use Filament\Schemas\Components\Tabs; use Filament\Schemas\Components\Tabs\Tab; -use Filament\Support\Enums\IconSize; use Filament\Support\Enums\Width; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Artisan; @@ -35,14 +34,12 @@ class ImportEggAction extends Action { parent::setUp(); - $this->label(trans('filament-actions::import.modal.actions.import.label')); + $this->tooltip(trans('filament-actions::import.modal.actions.import.label')); - $this->iconButton(); + $this->hiddenLabel(); $this->icon(TablerIcon::FileImport); - $this->iconSize(IconSize::ExtraLarge); - $this->modalWidth(Width::ScreenExtraLarge); $this->authorize(fn () => user()?->can('import egg')); diff --git a/app/Filament/Components/Actions/PreviewStartupAction.php b/app/Filament/Components/Actions/PreviewStartupAction.php index a7d7b4a45..fde287b00 100644 --- a/app/Filament/Components/Actions/PreviewStartupAction.php +++ b/app/Filament/Components/Actions/PreviewStartupAction.php @@ -12,7 +12,7 @@ class PreviewStartupAction extends Action { public static function getDefaultName(): ?string { - return 'preview'; + return 'hint_preview'; } protected function setUp(): void diff --git a/app/Filament/Components/Actions/RotateDatabasePasswordAction.php b/app/Filament/Components/Actions/RotateDatabasePasswordAction.php index c893f7da8..ae3204023 100644 --- a/app/Filament/Components/Actions/RotateDatabasePasswordAction.php +++ b/app/Filament/Components/Actions/RotateDatabasePasswordAction.php @@ -16,14 +16,14 @@ class RotateDatabasePasswordAction extends Action { public static function getDefaultName(): ?string { - return 'rotate'; + return 'hint_rotate'; } protected function setUp(): void { parent::setUp(); - $this->label(trans('admin/databasehost.rotate')); + $this->tooltip(trans('admin/databasehost.rotate')); $this->icon(TablerIcon::Refresh); diff --git a/app/Filament/Components/Actions/UpdateEggAction.php b/app/Filament/Components/Actions/UpdateEggAction.php index 22a0b35f9..3f5793a61 100644 --- a/app/Filament/Components/Actions/UpdateEggAction.php +++ b/app/Filament/Components/Actions/UpdateEggAction.php @@ -8,7 +8,6 @@ use App\Services\Eggs\Sharing\EggImporterService; use Exception; use Filament\Actions\Action; use Filament\Notifications\Notification; -use Filament\Support\Enums\IconSize; class UpdateEggAction extends Action { @@ -21,14 +20,10 @@ class UpdateEggAction extends Action { parent::setUp(); - $this->label(trans_choice('admin/egg.update', 1)); - - $this->iconButton(); + $this->tooltip(trans_choice('admin/egg.update', 1)); $this->icon(TablerIcon::CloudDownload); - $this->iconSize(IconSize::ExtraLarge); - $this->color('success'); $this->requiresConfirmation(); diff --git a/app/Filament/Components/Actions/UpdateNodeAllocations.php b/app/Filament/Components/Actions/UpdateNodeAllocations.php index 3dfeb5b27..91459f5f4 100644 --- a/app/Filament/Components/Actions/UpdateNodeAllocations.php +++ b/app/Filament/Components/Actions/UpdateNodeAllocations.php @@ -9,7 +9,6 @@ use Exception; use Filament\Actions\Action; use Filament\Forms\Components\Select; use Filament\Notifications\Notification; -use Filament\Support\Enums\IconSize; class UpdateNodeAllocations extends Action { @@ -22,14 +21,10 @@ class UpdateNodeAllocations extends Action { parent::setUp(); - $this->label(trans('admin/node.bulk_update_ip')); + $this->tooltip(trans('admin/node.bulk_update_ip')); $this->icon(TablerIcon::Replace); - $this->iconSize(IconSize::ExtraLarge); - - $this->iconButton(); - $this->color('warning'); $this->requiresConfirmation(); diff --git a/app/Filament/Pages/Auth/EditProfile.php b/app/Filament/Pages/Auth/EditProfile.php index 10f754f6e..0ab26c4f6 100644 --- a/app/Filament/Pages/Auth/EditProfile.php +++ b/app/Filament/Pages/Auth/EditProfile.php @@ -41,7 +41,6 @@ use Filament\Schemas\Components\Tabs\Tab; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Schema; use Filament\Support\Colors\Color; -use Filament\Support\Enums\IconSize; use Filament\Support\Enums\Width; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\Hash; @@ -465,6 +464,15 @@ class EditProfile extends BaseEditProfile 'topbar' => trans('profile.topbar'), 'mixed' => trans('profile.mixed'), ]), + ToggleButtons::make('button_style') + ->label('Button Style') + ->inline() + ->default('icon') + + ->options([ + true => 'Icon', + false => 'Icon Button', + ]), ]), Section::make(trans('profile.console')) ->collapsible() @@ -568,10 +576,14 @@ class EditProfile extends BaseEditProfile { return [ $this->getCancelFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->tooltip(trans('filament-panels::auth/pages/edit-profile.actions.cancel.label')) + ->hiddenLabel() ->icon(TablerIcon::ArrowLeft), - $this->getSaveFormAction()->formId('form') - ->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) + ->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label')) ->icon(TablerIcon::DeviceFloppy), ]; @@ -586,9 +598,17 @@ class EditProfile extends BaseEditProfile 'console_graph_period' => $data['console_graph_period'], 'dashboard_layout' => $data['dashboard_layout'], 'top_navigation' => $data['top_navigation'], + 'button_style' => $data['button_style'], ]; - unset($data['console_font'],$data['console_font_size'], $data['console_rows'], $data['dashboard_layout'], $data['top_navigation']); + unset( + $data['console_font'], + $data['console_font_size'], + $data['console_rows'], + $data['dashboard_layout'], + $data['top_navigation'], + $data['button_style'], + ); $data['customization'] = json_encode($customization); @@ -602,6 +622,7 @@ class EditProfile extends BaseEditProfile $data['console_rows'] = (int) $this->getUser()->getCustomization(CustomizationKey::ConsoleRows); $data['console_graph_period'] = (int) $this->getUser()->getCustomization(CustomizationKey::ConsoleGraphPeriod); $data['dashboard_layout'] = $this->getUser()->getCustomization(CustomizationKey::DashboardLayout); + $data['button_style'] = $this->getUser()->getCustomization(CustomizationKey::ButtonStyle); // Handle migration from boolean to string navigation types $topNavigation = $this->getUser()->getCustomization(CustomizationKey::TopNavigation); diff --git a/app/Filament/Server/Pages/Settings.php b/app/Filament/Server/Pages/Settings.php index 430930e6a..73e0f9de1 100644 --- a/app/Filament/Server/Pages/Settings.php +++ b/app/Filament/Server/Pages/Settings.php @@ -27,7 +27,6 @@ use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; use Filament\Schemas\Schema; use Filament\Support\Enums\Alignment; -use Filament\Support\Enums\IconSize; use Illuminate\Support\Facades\Storage; use Livewire\Features\SupportFileUploads\TemporaryUploadedFile; @@ -90,7 +89,8 @@ class Settings extends ServerFormPage ->columnSpan(2) ->alignJustify(), Action::make('uploadIcon') - ->iconButton()->iconSize(IconSize::Large) + ->hiddenLabel() + ->tooltip(trans('admin/server.import_image')) ->icon(TablerIcon::PhotoUp) ->modal() ->modalSubmitActionLabel(trans('server/setting.server_info.icon.upload')) @@ -307,7 +307,7 @@ class Settings extends ServerFormPage ->disabled() ->copyable() ->hintAction( - Action::make('connect_sftp') + Action::make('hint_connect_sftp') ->label(trans('server/setting.server_info.sftp.action')) ->color('success') ->icon(TablerIcon::Plug) diff --git a/app/Filament/Server/Resources/Activities/ActivityResource.php b/app/Filament/Server/Resources/Activities/ActivityResource.php index d876ae8ab..f26d9258a 100644 --- a/app/Filament/Server/Resources/Activities/ActivityResource.php +++ b/app/Filament/Server/Resources/Activities/ActivityResource.php @@ -118,7 +118,7 @@ class ActivityResource extends Resource return $user; }) ->hintAction( - Action::make('edit') + Action::make('hint_edit') ->label(trans('filament-actions::edit.single.label')) ->icon(TablerIcon::Edit) ->visible(fn (ActivityLog $activityLog) => $activityLog->actor instanceof User && user()?->can('update', $activityLog->actor)) diff --git a/app/Filament/Server/Resources/Allocations/AllocationResource.php b/app/Filament/Server/Resources/Allocations/AllocationResource.php index 05b3462ec..5ce49991f 100644 --- a/app/Filament/Server/Resources/Allocations/AllocationResource.php +++ b/app/Filament/Server/Resources/Allocations/AllocationResource.php @@ -20,7 +20,6 @@ use Filament\Actions\DetachAction; use Filament\Facades\Filament; use Filament\Resources\Pages\PageRegistration; use Filament\Resources\Resource; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextInputColumn; @@ -101,7 +100,7 @@ class AllocationResource extends Resource ]) ->toolbarActions([ Action::make('add_allocation') - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->icon(fn () => $server->allocations()->count() >= $server->allocation_limit ? TablerIcon::NetworkOff : TablerIcon::Network) ->authorize(fn () => user()?->can(SubuserPermission::AllocationCreate, $server)) ->tooltip(fn () => $server->allocations()->count() >= $server->allocation_limit ? trans('server/network.limit') : trans('server/network.add')) diff --git a/app/Filament/Server/Resources/Allocations/Pages/ListAllocations.php b/app/Filament/Server/Resources/Allocations/Pages/ListAllocations.php index 35ceef0e0..143c6879d 100644 --- a/app/Filament/Server/Resources/Allocations/Pages/ListAllocations.php +++ b/app/Filament/Server/Resources/Allocations/Pages/ListAllocations.php @@ -5,8 +5,6 @@ namespace App\Filament\Server\Resources\Allocations\Pages; use App\Filament\Server\Resources\Allocations\AllocationResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; use Filament\Resources\Pages\ListRecords; class ListAllocations extends ListRecords @@ -16,12 +14,6 @@ class ListAllocations extends ListRecords protected static string $resource = AllocationResource::class; - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return []; - } - public function getBreadcrumbs(): array { return []; diff --git a/app/Filament/Server/Resources/Backups/BackupResource.php b/app/Filament/Server/Resources/Backups/BackupResource.php index 148172d02..ebcafd69c 100644 --- a/app/Filament/Server/Resources/Backups/BackupResource.php +++ b/app/Filament/Server/Resources/Backups/BackupResource.php @@ -266,7 +266,7 @@ class BackupResource extends Resource ->disabled(fn () => $server->backups()->count() >= $server->backup_limit) ->color(fn () => $server->backups()->count() >= $server->backup_limit ? 'danger' : 'primary') ->createAnother(false) - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->successNotificationTitle(null) ->action(function (InitiateBackupService $initiateBackupService, $data) use ($server) { $action = $initiateBackupService->setIgnoredFiles(explode(PHP_EOL, $data['ignored'] ?? '')); diff --git a/app/Filament/Server/Resources/Backups/Pages/ListBackups.php b/app/Filament/Server/Resources/Backups/Pages/ListBackups.php index 8ce269220..effbb70c9 100644 --- a/app/Filament/Server/Resources/Backups/Pages/ListBackups.php +++ b/app/Filament/Server/Resources/Backups/Pages/ListBackups.php @@ -5,8 +5,6 @@ namespace App\Filament\Server\Resources\Backups\Pages; use App\Filament\Server\Resources\Backups\BackupResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; use Filament\Resources\Pages\ListRecords; class ListBackups extends ListRecords @@ -16,12 +14,6 @@ class ListBackups extends ListRecords protected static string $resource = BackupResource::class; - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return []; - } - public function getBreadcrumbs(): array { return []; diff --git a/app/Filament/Server/Resources/Databases/DatabaseResource.php b/app/Filament/Server/Resources/Databases/DatabaseResource.php index 56d15bc3c..232b3835e 100644 --- a/app/Filament/Server/Resources/Databases/DatabaseResource.php +++ b/app/Filament/Server/Resources/Databases/DatabaseResource.php @@ -30,7 +30,6 @@ use Filament\Resources\Pages\PageRegistration; use Filament\Resources\Resource; use Filament\Schemas\Components\Grid; use Filament\Schemas\Schema; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Support\Str; @@ -160,7 +159,7 @@ class DatabaseResource extends Resource ]) ->toolbarActions([ CreateAction::make('new') - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->icon(fn () => $server->databases()->count() >= $server->database_limit ? TablerIcon::DatabaseX : TablerIcon::DatabasePlus) ->tooltip(fn () => $server->databases()->count() >= $server->database_limit ? trans('server/database.limit') : trans('server/database.create_database')) ->disabled(fn () => $server->databases()->count() >= $server->database_limit) diff --git a/app/Filament/Server/Resources/Databases/Pages/ListDatabases.php b/app/Filament/Server/Resources/Databases/Pages/ListDatabases.php index b7fc59130..25667cf23 100644 --- a/app/Filament/Server/Resources/Databases/Pages/ListDatabases.php +++ b/app/Filament/Server/Resources/Databases/Pages/ListDatabases.php @@ -5,8 +5,6 @@ namespace App\Filament\Server\Resources\Databases\Pages; use App\Filament\Server\Resources\Databases\DatabaseResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; use Filament\Resources\Pages\ListRecords; class ListDatabases extends ListRecords @@ -16,12 +14,6 @@ class ListDatabases extends ListRecords protected static string $resource = DatabaseResource::class; - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return []; - } - public function getBreadcrumbs(): array { return []; diff --git a/app/Filament/Server/Resources/Files/Pages/EditFiles.php b/app/Filament/Server/Resources/Files/Pages/EditFiles.php index 18645e528..a3108b7c7 100644 --- a/app/Filament/Server/Resources/Files/Pages/EditFiles.php +++ b/app/Filament/Server/Resources/Files/Pages/EditFiles.php @@ -82,7 +82,7 @@ class EditFiles extends Page ->components([ Section::make(trans('server/file.actions.edit.title', ['file' => $this->path])) ->footerActions([ - Action::make('save_and_close') + Action::make('fm_save_and_close') ->label(trans('server/file.actions.edit.save_close')) ->authorize(fn () => user()?->can(SubuserPermission::FileUpdate, $server)) ->icon(TablerIcon::DeviceFloppy) @@ -102,7 +102,7 @@ class EditFiles extends Page $this->redirectToList(); }), - Action::make('save') + Action::make('fm_save') ->label(trans('server/file.actions.edit.save')) ->authorize(fn () => user()?->can(SubuserPermission::FileUpdate, $server)) ->icon(TablerIcon::DeviceFloppy) @@ -120,7 +120,7 @@ class EditFiles extends Page ->body(fn () => $this->path) ->send(); }), - Action::make('cancel') + Action::make('fm_cancel') ->label(trans('server/file.actions.edit.cancel')) ->color('danger') ->icon(TablerIcon::X) diff --git a/app/Filament/Server/Resources/Files/Pages/ListFiles.php b/app/Filament/Server/Resources/Files/Pages/ListFiles.php index 6fdd36da8..4d42786e6 100644 --- a/app/Filament/Server/Resources/Files/Pages/ListFiles.php +++ b/app/Filament/Server/Resources/Files/Pages/ListFiles.php @@ -2,6 +2,7 @@ namespace App\Filament\Server\Resources\Files\Pages; +use App\Enums\CustomizationKey; use App\Enums\EditorLanguages; use App\Enums\SubuserPermission; use App\Enums\TablerIcon; @@ -134,7 +135,7 @@ class ListFiles extends ListRecords Action::make('view') ->authorize(fn () => user()?->can(SubuserPermission::FileRead, $server)) ->label(trans('server/file.actions.open')) - ->icon(TablerIcon::Eye)->iconSize(IconSize::Large) + ->icon(TablerIcon::Eye) ->visible(fn (File $file) => $file->is_directory) ->url(fn (File $file) => self::getUrl(['path' => encode_path(join_paths($this->path, $file->name))])), EditAction::make('edit') @@ -142,7 +143,7 @@ class ListFiles extends ListRecords ->visible(fn (File $file) => $file->canEdit()) ->url(fn (File $file) => EditFiles::getUrl(['path' => encode_path(join_paths($this->path, $file->name))])), ActionGroup::make([ - Action::make('rename') + Action::make('fm_rename') ->authorize(fn () => user()?->can(SubuserPermission::FileUpdate, $server)) ->label(trans('server/file.actions.rename.title')) ->icon(TablerIcon::Forms)->iconSize(IconSize::Large) @@ -172,7 +173,7 @@ class ListFiles extends ListRecords $this->refreshPage(); }), - Action::make('copy') + Action::make('fm_copy') ->authorize(fn () => user()?->can(SubuserPermission::FileCreate, $server)) ->label(trans('server/file.actions.copy.title')) ->icon(TablerIcon::Copy)->iconSize(IconSize::Large) @@ -191,13 +192,13 @@ class ListFiles extends ListRecords $this->refreshPage(); }), - Action::make('download') + Action::make('fm_download') ->authorize(fn () => user()?->can(SubuserPermission::FileReadContent, $server)) ->label(trans('server/file.actions.download')) ->icon(TablerIcon::Download)->iconSize(IconSize::Large) ->visible(fn (File $file) => $file->is_file) ->url(fn (File $file) => DownloadFiles::getUrl(['path' => encode_path(join_paths($this->path, $file->name))]), true), - Action::make('move') + Action::make('fm_move') ->authorize(fn () => user()?->can(SubuserPermission::FileUpdate, $server)) ->label(trans('server/file.actions.move.title')) ->icon(TablerIcon::Replace)->iconSize(IconSize::Large) @@ -234,7 +235,7 @@ class ListFiles extends ListRecords $this->refreshPage(); }), - Action::make('permissions') + Action::make('fm_permissions') ->authorize(fn () => user()?->can(SubuserPermission::FileUpdate, $server)) ->label(trans('server/file.actions.permissions.title')) ->icon(TablerIcon::License)->iconSize(IconSize::Large) @@ -296,7 +297,7 @@ class ListFiles extends ListRecords ->success() ->send(); }), - Action::make('archive') + Action::make('fm_archive') ->authorize(fn () => user()?->can(SubuserPermission::FileArchive, $server)) ->label(trans('server/file.actions.archive.title')) ->icon(TablerIcon::Archive)->iconSize(IconSize::Large) @@ -336,7 +337,7 @@ class ListFiles extends ListRecords $this->refreshPage(); }), - Action::make('unarchive') + Action::make('fm_unarchive') ->authorize(fn () => user()?->can(SubuserPermission::FileArchive, $server)) ->label(trans('server/file.actions.unarchive.title')) ->icon(TablerIcon::Archive)->iconSize(IconSize::Large) @@ -359,8 +360,6 @@ class ListFiles extends ListRecords ])->iconSize(IconSize::Large), DeleteAction::make() ->authorize(fn () => user()?->can(SubuserPermission::FileDelete, $server)) - ->hiddenLabel() - ->iconSize(IconSize::Large) ->requiresConfirmation() ->modalHeading(fn (File $file) => trans('filament-actions::delete.single.modal.heading', ['label' => $file->name . ' ' . ($file->is_directory ? 'folder' : 'file')])) ->action(function (File $file) { @@ -377,7 +376,9 @@ class ListFiles extends ListRecords ]) ->toolbarActions([ BulkActionGroup::make([ - BulkAction::make('move') + BulkAction::make('fm_move') + ->label(trans('server/file.actions.move.title')) + ->icon(TablerIcon::Replace)->iconSize(IconSize::Large) ->authorize(fn () => user()?->can(SubuserPermission::FileUpdate, $server)) ->schema([ TextInput::make('location') @@ -406,7 +407,9 @@ class ListFiles extends ListRecords $this->refreshPage(); }), - BulkAction::make('archive') + BulkAction::make('fm_archive') + ->label(trans('server/file.actions.archive.title')) + ->icon(TablerIcon::Archive)->iconSize(IconSize::Large) ->authorize(fn () => user()?->can(SubuserPermission::FileArchive, $server)) ->schema([ Grid::make(3) @@ -446,7 +449,7 @@ class ListFiles extends ListRecords $this->refreshPage(); }), - DeleteBulkAction::make() + DeleteBulkAction::make('fm_delete') ->successNotificationTitle(null) ->authorize(fn () => user()?->can(SubuserPermission::FileDelete, $server)) ->action(function (Collection $files) { @@ -470,7 +473,7 @@ class ListFiles extends ListRecords Action::make('new_file') ->authorize(fn () => user()?->can(SubuserPermission::FileCreate, $server)) ->tooltip(trans('server/file.actions.new_file.title')) - ->hiddenLabel()->icon(TablerIcon::FilePlus)->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel()->icon(TablerIcon::FilePlus) ->color('primary') ->modalSubmitActionLabel(trans('server/file.actions.new_file.create')) ->action(function ($data) { @@ -511,7 +514,7 @@ class ListFiles extends ListRecords ]), Action::make('new_folder') ->authorize(fn () => user()?->can(SubuserPermission::FileCreate, $server)) - ->hiddenLabel()->icon(TablerIcon::FolderPlus)->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel()->icon(TablerIcon::FolderPlus) ->tooltip(trans('server/file.actions.new_folder.title')) ->color('primary') ->action(function ($data) { @@ -545,7 +548,7 @@ class ListFiles extends ListRecords ->view('filament.server.pages.file-upload'), Action::make('uploadURL') ->authorize(fn () => user()?->can(SubuserPermission::FileCreate, $server)) - ->hiddenLabel()->icon(TablerIcon::Download)->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel()->icon(TablerIcon::WorldDownload) ->tooltip(trans('server/file.actions.upload.from_url')) ->modalHeading(trans('server/file.actions.upload.from_url')) ->color('success') @@ -567,10 +570,10 @@ class ListFiles extends ListRecords ]), Action::make('search') ->authorize(fn () => user()?->can(SubuserPermission::FileRead, $server)) - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->tooltip(trans('server/file.actions.nested_search.title')) ->color('primary') - ->icon(TablerIcon::WorldSearch) + ->icon(TablerIcon::FolderSearch) ->modalHeading(trans('server/file.actions.nested_search.title')) ->modalSubmitActionLabel(trans('server/file.actions.nested_search.search')) ->schema([ @@ -705,4 +708,24 @@ class ListFiles extends ListRecords ->where('path', '.*'), ); } + + public function fileUploadAction(): Action + { + if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { + return Action::make('fileUpload') + ->iconSize(IconSize::ExtraLarge) + ->iconButton() + ->color('success') + ->icon(TablerIcon::Upload) + ->tooltip(trans('server/file.actions.upload.title')) + ->extraAttributes(['@click' => 'triggerBrowse']); + } + + return Action::make('fileUpload') + ->hiddenLabel() + ->color('success') + ->icon(TablerIcon::Upload) + ->tooltip(trans('server/file.actions.upload.title')) + ->extraAttributes(['@click' => 'triggerBrowse']); + } } diff --git a/app/Filament/Server/Resources/Schedules/Pages/EditSchedule.php b/app/Filament/Server/Resources/Schedules/Pages/EditSchedule.php index c05ee6179..eff631ff9 100644 --- a/app/Filament/Server/Resources/Schedules/Pages/EditSchedule.php +++ b/app/Filament/Server/Resources/Schedules/Pages/EditSchedule.php @@ -17,7 +17,6 @@ use Filament\Actions\ActionGroup; use Filament\Actions\DeleteAction; use Filament\Facades\Filament; use Filament\Resources\Pages\EditRecord; -use Filament\Support\Enums\IconSize; class EditSchedule extends EditRecord { @@ -54,16 +53,13 @@ class EditSchedule extends EditRecord { return [ DeleteAction::make() - ->hiddenLabel() - ->iconButton()->iconSize(IconSize::ExtraLarge) - ->tooltip(trans('server/schedule.delete')) ->after(function ($record) { Activity::event('server:schedule.delete') ->property('name', $record->name) ->log(); }), Action::make('run_now') - ->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->icon(TablerIcon::Run) ->authorize(fn () => user()?->can(SubuserPermission::ScheduleUpdate, Filament::getTenant())) ->tooltip(fn (Schedule $schedule) => $schedule->tasks->count() === 0 ? trans('server/schedule.no_tasks') : ($schedule->status === ScheduleStatus::Processing ? ScheduleStatus::Processing->getLabel() : trans('server/schedule.run_now'))) @@ -80,8 +76,10 @@ class EditSchedule extends EditRecord $this->fillForm(); }), ExportScheduleAction::make(), - $this->getSaveFormAction()->formId('form') - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + Action::make('save') + ->hiddenLabel() + ->action('save') + ->keyBindings(['mod+s']) ->icon(TablerIcon::DeviceFloppy) ->tooltip(trans('server/schedule.save')), ]; diff --git a/app/Filament/Server/Resources/Schedules/Pages/ListSchedules.php b/app/Filament/Server/Resources/Schedules/Pages/ListSchedules.php index 32f48ef17..94920db25 100644 --- a/app/Filament/Server/Resources/Schedules/Pages/ListSchedules.php +++ b/app/Filament/Server/Resources/Schedules/Pages/ListSchedules.php @@ -5,8 +5,6 @@ namespace App\Filament\Server\Resources\Schedules\Pages; use App\Filament\Server\Resources\Schedules\ScheduleResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; use Filament\Resources\Pages\ListRecords; class ListSchedules extends ListRecords @@ -16,12 +14,6 @@ class ListSchedules extends ListRecords protected static string $resource = ScheduleResource::class; - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return []; - } - public function getBreadcrumbs(): array { return []; diff --git a/app/Filament/Server/Resources/Schedules/Pages/ViewSchedule.php b/app/Filament/Server/Resources/Schedules/Pages/ViewSchedule.php index 82ddd2eda..6809f4370 100644 --- a/app/Filament/Server/Resources/Schedules/Pages/ViewSchedule.php +++ b/app/Filament/Server/Resources/Schedules/Pages/ViewSchedule.php @@ -10,7 +10,6 @@ use Filament\Actions\Action; use Filament\Actions\ActionGroup; use Filament\Actions\EditAction; use Filament\Resources\Pages\ViewRecord; -use Filament\Support\Enums\IconSize; class ViewSchedule extends ViewRecord { @@ -24,7 +23,7 @@ class ViewSchedule extends ViewRecord { return [ EditAction::make() - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->icon(TablerIcon::CalendarCode) ->tooltip(trans('server/schedule.edit')), ]; diff --git a/app/Filament/Server/Resources/Schedules/ScheduleResource.php b/app/Filament/Server/Resources/Schedules/ScheduleResource.php index c9a9e9cd2..a9ed0e4cf 100644 --- a/app/Filament/Server/Resources/Schedules/ScheduleResource.php +++ b/app/Filament/Server/Resources/Schedules/ScheduleResource.php @@ -41,7 +41,6 @@ use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; use Filament\Schemas\Schema; -use Filament\Support\Enums\IconSize; use Filament\Support\Exceptions\Halt; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; @@ -349,12 +348,12 @@ class ScheduleResource extends Resource ]) ->toolbarActions([ CreateAction::make() - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->icon(TablerIcon::CalendarPlus) ->color('primary') ->tooltip(trans('server/schedule.new')), ImportScheduleAction::make() - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->icon(TablerIcon::FileImport) ->color('success') ->tooltip(trans('server/schedule.import')), diff --git a/app/Filament/Server/Resources/Subusers/Pages/ListSubusers.php b/app/Filament/Server/Resources/Subusers/Pages/ListSubusers.php index 7fef5a180..d42c99529 100644 --- a/app/Filament/Server/Resources/Subusers/Pages/ListSubusers.php +++ b/app/Filament/Server/Resources/Subusers/Pages/ListSubusers.php @@ -5,8 +5,6 @@ namespace App\Filament\Server\Resources\Subusers\Pages; use App\Filament\Server\Resources\Subusers\SubuserResource; use App\Traits\Filament\CanCustomizeHeaderActions; use App\Traits\Filament\CanCustomizeHeaderWidgets; -use Filament\Actions\Action; -use Filament\Actions\ActionGroup; use Filament\Resources\Pages\ListRecords; use Illuminate\Contracts\Support\Htmlable; @@ -17,12 +15,6 @@ class ListSubusers extends ListRecords protected static string $resource = SubuserResource::class; - /** @return array */ - protected function getDefaultHeaderActions(): array - { - return []; - } - public function getBreadcrumbs(): array { return []; diff --git a/app/Filament/Server/Resources/Subusers/SubuserResource.php b/app/Filament/Server/Resources/Subusers/SubuserResource.php index 0d6cf0990..c55d5058a 100644 --- a/app/Filament/Server/Resources/Subusers/SubuserResource.php +++ b/app/Filament/Server/Resources/Subusers/SubuserResource.php @@ -35,7 +35,6 @@ use Filament\Schemas\Components\Tabs; use Filament\Schemas\Components\Tabs\Tab; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; -use Filament\Support\Enums\IconSize; use Filament\Tables\Columns\ImageColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; @@ -218,7 +217,7 @@ class SubuserResource extends Resource ]) ->toolbarActions([ CreateAction::make('invite') - ->hiddenLabel()->iconButton()->iconSize(IconSize::ExtraLarge) + ->hiddenLabel() ->icon(TablerIcon::UserPlus) ->tooltip(trans('server/user.invite_user')) ->createAnother(false) diff --git a/app/Listeners/Server/ServerInstalledListener.php b/app/Listeners/Server/ServerInstalledListener.php index cdf60604c..9f9ca262d 100644 --- a/app/Listeners/Server/ServerInstalledListener.php +++ b/app/Listeners/Server/ServerInstalledListener.php @@ -21,7 +21,7 @@ class ServerInstalledListener ->title(trans('notifications.' . ($event->initialInstall ? 'installation' : 'reinstallation') . '_' . ($event->successful ? 'completed' : 'failed'), locale: $locale)) ->body(trans('server/setting.server_info.server_name', ['name' => $event->server->name], $locale)) ->actions([ - Action::make('view') + Action::make('exclude_view') ->button() ->label(trans('notifications.open_server', locale: $locale)) ->markAsRead() diff --git a/app/Listeners/Server/SubUserAddedListener.php b/app/Listeners/Server/SubUserAddedListener.php index e1dcd85bd..22121e9cb 100644 --- a/app/Listeners/Server/SubUserAddedListener.php +++ b/app/Listeners/Server/SubUserAddedListener.php @@ -21,7 +21,7 @@ class SubUserAddedListener ->title(trans('notifications.user_added.title', locale: $locale)) ->body(trans('notifications.user_added.body', ['server' => $event->subuser->server->name], $locale)) ->actions([ - Action::make('view') + Action::make('exclude_view') ->button() ->label(trans('notifications.open_server', locale: $locale)) ->markAsRead() diff --git a/app/Providers/Filament/FilamentServiceProvider.php b/app/Providers/Filament/FilamentServiceProvider.php index 788172eba..48d636737 100644 --- a/app/Providers/Filament/FilamentServiceProvider.php +++ b/app/Providers/Filament/FilamentServiceProvider.php @@ -2,16 +2,26 @@ namespace App\Providers\Filament; +use App\Enums\CustomizationKey; use App\Enums\TablerIcon; +use Filament\Actions\Action; +use Filament\Actions\CreateAction; use Filament\Actions\DeleteAction; +use Filament\Actions\EditAction; use Filament\Actions\View\ActionsIconAlias; +use Filament\Actions\ViewAction; use Filament\Forms\Components\Field; +use Filament\Forms\Components\KeyValue; +use Filament\Forms\Components\Repeater; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput\Actions\CopyAction; +use Filament\Forms\Components\TextInput\Actions\HidePasswordAction; +use Filament\Forms\Components\TextInput\Actions\ShowPasswordAction; use Filament\Forms\View\FormsIconAlias; use Filament\Notifications\View\NotificationsIconAlias; use Filament\Schemas\View\SchemaIconAlias; use Filament\Support\Colors\Color; +use Filament\Support\Enums\IconSize; use Filament\Support\Facades\FilamentColor; use Filament\Support\Facades\FilamentIcon; use Filament\Support\Facades\FilamentView; @@ -86,7 +96,115 @@ class FilamentServiceProvider extends ServiceProvider }); Select::configureUsing(fn (Select $select) => $select->native(false)); - DeleteAction::configureUsing(fn (DeleteAction $action) => $action->icon(TablerIcon::Trash)); + + KeyValue::configureUsing(fn (KeyValue $keyValue) => $keyValue->deleteAction(function (Action $action) { + $action->tooltip(trans('filament-forms::components.key_value.actions.delete.label')); + $action->iconSize(IconSize::Large); + })); + + Repeater::configureUsing(fn (Repeater $repeater) => $repeater->deleteAction(function (Action $action) { + $action->tooltip(trans('filament-forms::components.repeater.actions.delete.label')); + $action->iconSize(IconSize::Large); + })); + + ShowPasswordAction::configureUsing(function (ShowPasswordAction $action) { + $action->tooltip(trans('filament-forms::components.text_input.actions.show_password.label')); + $action->iconSize(IconSize::Large); + }); + + HidePasswordAction::configureUsing(function (HidePasswordAction $action) { + $action->tooltip(trans('filament-forms::components.text_input.actions.hide_password.label')); + $action->iconSize(IconSize::Large); + }); + + CopyAction::configureUsing(function (CopyAction $action) { + $action->tooltip(trans('filament-forms::components.text_input.actions.copy.label')); + $action->iconSize(IconSize::Large); + }); + + DeleteAction::configureUsing(function (DeleteAction $action) { + $action->icon(TablerIcon::Trash); + $action->tooltip(trans('filament-actions::delete.single.modal.actions.delete.label')); + $action->hiddenLabel(); + $action->iconSize(IconSize::Large); + + if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { + $action->iconButton(); + $action->iconSize(IconSize::ExtraLarge); + } + }); + + CreateAction::configureUsing(function (CreateAction $action) { + $action->tooltip(fn (): string => trans('filament-actions::create.single.label', ['label' => $action->getModelLabel()])); + $action->iconSize(IconSize::Large); + + if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { + $action->iconButton(); + $action->iconSize(IconSize::ExtraLarge); + } + }); + + EditAction::configureUsing(function (EditAction $action) { + $action->tooltip(trans('filament-actions::edit.single.label')); + $action->iconSize(IconSize::Large); + + if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { + $action->iconButton(); + $action->iconSize(IconSize::ExtraLarge); + } + }); + + ViewAction::configureUsing(function (ViewAction $action) { + $action->tooltip(trans('filament-actions::view.single.label')); + $action->iconSize(IconSize::Large); + + if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { + $action->iconButton(); + $action->iconSize(IconSize::ExtraLarge); + } + }); + + Action::configureUsing(function (Action $action) { + $action->iconSize(IconSize::Large); + + if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { + $name = $action->getName(); + + $excludedPrefixes = [ + 'enable_oauth_', + 'disable_oauth_', + 'enable_captcha_', + 'disable_captcha_', + 'db_', // dashboard + 'fm_', // file manager + 'hint_', // hint actions + 'exclude_', // exclude actions + ]; + + $excludeActions = [ + 'profile', + 'logout', + 'start', + 'stop', + 'restart', + 'kill', + 'fileUpload', + ]; + + foreach ($excludedPrefixes as $prefix) { + if (str_starts_with($name, $prefix)) { + return; + } + } + + if (in_array($name, $excludeActions, true)) { + return; + } + + $action->iconButton(); + $action->iconSize(IconSize::ExtraLarge); + } + }); FilamentIcon::register([ ActionsIconAlias::DELETE_ACTION => TablerIcon::Trash, diff --git a/lang/en/admin/egg.php b/lang/en/admin/egg.php index 65416a7da..2f06b46af 100644 --- a/lang/en/admin/egg.php +++ b/lang/en/admin/egg.php @@ -27,6 +27,7 @@ return [ 'github' => 'GitHub', 'refresh' => 'Refresh', 'import_image' => 'Import Image', + 'delete_image' => 'Delete Image', 'no_local_ip' => 'Local IP Addresses are not allowed', 'unsupported_format' => 'Unsupported Format. Supported Formats: :formats', 'invalid_url' => 'The provided URL is invalid', diff --git a/lang/en/admin/server.php b/lang/en/admin/server.php index efa8b5919..e0bb2beba 100644 --- a/lang/en/admin/server.php +++ b/lang/en/admin/server.php @@ -7,6 +7,8 @@ return [ 'no_servers' => 'No Servers', 'create' => 'Create Server', 'ip_address' => 'IP Address', + 'import_image' => 'Import Image', + 'delete_image' => 'Delete Image', 'ip_address_helper' => 'Usually your machine\'s public IP unless you are port forwarding.', 'port' => 'Port', 'ports' => 'Ports', diff --git a/resources/views/filament/server/pages/file-upload.blade.php b/resources/views/filament/server/pages/file-upload.blade.php index c59899b23..cffa0364e 100644 --- a/resources/views/filament/server/pages/file-upload.blade.php +++ b/resources/views/filament/server/pages/file-upload.blade.php @@ -162,17 +162,17 @@ if (failed.length === 0) { new window.FilamentNotification() - .title('{{ trans('server/file.actions.upload.success') }}') + .title('{{ preg_replace("/'/", "\\'", trans('server/file.actions.upload.success')) }}') .success() .send(); } else if (failed.length === this.totalFiles) { new window.FilamentNotification() - .title('{{ trans('server/file.actions.upload.failed') }}') + .title('{{ preg_replace("/'/", "\\'", trans('server/file.actions.upload.failed')) }}') .danger() .send(); } else { new window.FilamentNotification() - .title('{{ trans('server/file.actions.upload.failed') }}') + .title('{{ preg_replace("/'/", "\\'", trans('server/file.actions.upload.failed')) }}') .danger() .send(); } @@ -199,7 +199,7 @@ } catch (error) { console.error('Upload error:', error); new window.FilamentNotification() - .title('{{ trans('server/file.actions.upload.error') }}') + .title('{{ preg_replace("/'/", "\\'", trans('server/file.actions.upload.failed')) }}') .danger() .send(); this.isUploading = false; @@ -303,13 +303,8 @@ }, }" > - - + {{ $this->fileUploadAction }} +
Date: Tue, 27 Jan 2026 23:40:20 -0500 Subject: [PATCH 2/3] Laravel 12.49.0 Shift (#2145) Co-authored-by: Shift --- composer.json | 8 +- composer.lock | 632 +++++++++++++++++++++++++------------------------- 2 files changed, 320 insertions(+), 320 deletions(-) diff --git a/composer.json b/composer.json index 0c8a434b2..b29ac9b5f 100644 --- a/composer.json +++ b/composer.json @@ -15,15 +15,15 @@ "filament/filament": "^4.5", "gboquizosanchez/filament-log-viewer": "^2.1", "guzzlehttp/guzzle": "^7.10", - "laravel/framework": "^12.47", + "laravel/framework": "^12.49", "laravel/helpers": "^1.8", "laravel/sanctum": "^4.2", "laravel/socialite": "^5.24", "laravel/tinker": "^2.10.1", "laravel/ui": "^4.6", "lcobucci/jwt": "^5.6", - "league/flysystem-aws-s3-v3": "^3.30", - "league/flysystem-memory": "^3.29", + "league/flysystem-aws-s3-v3": "^3.31", + "league/flysystem-memory": "^3.31", "phiki/phiki": "^2.0", "phpseclib/phpseclib": "~3.0.18", "predis/predis": "^2.3", @@ -32,7 +32,7 @@ "socialiteproviders/authentik": "^5.2", "socialiteproviders/discord": "^4.2", "socialiteproviders/steam": "^4.3", - "spatie/laravel-data": "^4.18", + "spatie/laravel-data": "^4.19", "spatie/laravel-fractal": "^6.3", "spatie/laravel-health": "^1.34", "spatie/laravel-permission": "^6.24", diff --git a/composer.lock b/composer.lock index 9d8d47ff7..892df26cf 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": "d04f257eded24fcbe9ab36a797594188", + "content-hash": "15f89930db77693b2d692dbadf22fb9f", "packages": [ { "name": "anourvalar/eloquent-serialize", @@ -128,16 +128,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.369.15", + "version": "3.369.21", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "7c62f41fb0460c3e5d5c1f70e93e726f1daa75f5" + "reference": "7076af00534135cbbf6cc19eb2521124a3549f0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7c62f41fb0460c3e5d5c1f70e93e726f1daa75f5", - "reference": "7c62f41fb0460c3e5d5c1f70e93e726f1daa75f5", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7076af00534135cbbf6cc19eb2521124a3549f0d", + "reference": "7076af00534135cbbf6cc19eb2521124a3549f0d", "shasum": "" }, "require": { @@ -219,9 +219,9 @@ "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.369.15" + "source": "https://github.com/aws/aws-sdk-php/tree/3.369.21" }, - "time": "2026-01-16T19:18:57+00:00" + "time": "2026-01-27T19:14:48+00:00" }, { "name": "blade-ui-kit/blade-heroicons", @@ -294,16 +294,16 @@ }, { "name": "blade-ui-kit/blade-icons", - "version": "1.8.0", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/driesvints/blade-icons.git", - "reference": "7b743f27476acb2ed04cb518213d78abe096e814" + "reference": "47e7b6f43250e6404e4224db8229219cd42b543c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/driesvints/blade-icons/zipball/7b743f27476acb2ed04cb518213d78abe096e814", - "reference": "7b743f27476acb2ed04cb518213d78abe096e814", + "url": "https://api.github.com/repos/driesvints/blade-icons/zipball/47e7b6f43250e6404e4224db8229219cd42b543c", + "reference": "47e7b6f43250e6404e4224db8229219cd42b543c", "shasum": "" }, "require": { @@ -350,7 +350,7 @@ } ], "description": "A package to easily make use of icons in your Laravel Blade views.", - "homepage": "https://github.com/blade-ui-kit/blade-icons", + "homepage": "https://github.com/driesvints/blade-icons", "keywords": [ "blade", "icons", @@ -358,8 +358,8 @@ "svg" ], "support": { - "issues": "https://github.com/blade-ui-kit/blade-icons/issues", - "source": "https://github.com/blade-ui-kit/blade-icons" + "issues": "https://github.com/driesvints/blade-icons/issues", + "source": "https://github.com/driesvints/blade-icons" }, "funding": [ { @@ -371,7 +371,7 @@ "type": "paypal" } ], - "time": "2025-02-13T20:35:06+00:00" + "time": "2026-01-20T09:46:32+00:00" }, { "name": "brick/math", @@ -1323,16 +1323,16 @@ }, { "name": "filament/actions", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "583efc16a403b4d452b7fb859e883b9b464b35a3" + "reference": "e9936617c3f74b18bf24a0645a6314a719c74a33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/583efc16a403b4d452b7fb859e883b9b464b35a3", - "reference": "583efc16a403b4d452b7fb859e883b9b464b35a3", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/e9936617c3f74b18bf24a0645a6314a719c74a33", + "reference": "e9936617c3f74b18bf24a0645a6314a719c74a33", "shasum": "" }, "require": { @@ -1368,20 +1368,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-16T10:31:42+00:00" + "time": "2026-01-27T12:10:55+00:00" }, { "name": "filament/filament", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "3b9c96737e5cbf092be71550628b2df55fcdcd57" + "reference": "2fe37fa96447cc61a70354b43f854b3632e388cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/3b9c96737e5cbf092be71550628b2df55fcdcd57", - "reference": "3b9c96737e5cbf092be71550628b2df55fcdcd57", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/2fe37fa96447cc61a70354b43f854b3632e388cc", + "reference": "2fe37fa96447cc61a70354b43f854b3632e388cc", "shasum": "" }, "require": { @@ -1425,20 +1425,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-16T10:31:56+00:00" + "time": "2026-01-27T12:10:56+00:00" }, { "name": "filament/forms", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "e974d21d9f88f130eb3e474d85aa8e9b8b5e4054" + "reference": "63dfeb69b3823e0effde1cefcdaae21c1ddf0814" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/e974d21d9f88f130eb3e474d85aa8e9b8b5e4054", - "reference": "e974d21d9f88f130eb3e474d85aa8e9b8b5e4054", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/63dfeb69b3823e0effde1cefcdaae21c1ddf0814", + "reference": "63dfeb69b3823e0effde1cefcdaae21c1ddf0814", "shasum": "" }, "require": { @@ -1475,20 +1475,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-16T10:32:00+00:00" + "time": "2026-01-27T12:10:56+00:00" }, { "name": "filament/infolists", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "a49a8124e4e2ccc46b0c67725b826160ae33ba8d" + "reference": "841a0520637b98822f09d008509e040ba9ef3faa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/a49a8124e4e2ccc46b0c67725b826160ae33ba8d", - "reference": "a49a8124e4e2ccc46b0c67725b826160ae33ba8d", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/841a0520637b98822f09d008509e040ba9ef3faa", + "reference": "841a0520637b98822f09d008509e040ba9ef3faa", "shasum": "" }, "require": { @@ -1520,20 +1520,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-16T10:32:09+00:00" + "time": "2026-01-23T10:58:05+00:00" }, { "name": "filament/notifications", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", - "reference": "f8657e9b98f549f316daf74cf24a659b85a10e12" + "reference": "af01c113555d26ba73e75331ca19772b92a34dcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/notifications/zipball/f8657e9b98f549f316daf74cf24a659b85a10e12", - "reference": "f8657e9b98f549f316daf74cf24a659b85a10e12", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/af01c113555d26ba73e75331ca19772b92a34dcf", + "reference": "af01c113555d26ba73e75331ca19772b92a34dcf", "shasum": "" }, "require": { @@ -1567,20 +1567,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-11-28T11:21:34+00:00" + "time": "2026-01-23T10:54:41+00:00" }, { "name": "filament/query-builder", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/query-builder.git", - "reference": "af25a2143d001995864b5135e54e67f56d60f330" + "reference": "bcafe9bb71ec34292440c4bded5ee395f037b2a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/query-builder/zipball/af25a2143d001995864b5135e54e67f56d60f330", - "reference": "af25a2143d001995864b5135e54e67f56d60f330", + "url": "https://api.github.com/repos/filamentphp/query-builder/zipball/bcafe9bb71ec34292440c4bded5ee395f037b2a5", + "reference": "bcafe9bb71ec34292440c4bded5ee395f037b2a5", "shasum": "" }, "require": { @@ -1613,20 +1613,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-16T10:31:39+00:00" + "time": "2026-01-23T10:52:35+00:00" }, { "name": "filament/schemas", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/schemas.git", - "reference": "1b03f3a6038f2d7ad0376fbd92532f0bb4bf8495" + "reference": "1638d2b16f7684b7925d9c6253592ecd308d7f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/schemas/zipball/1b03f3a6038f2d7ad0376fbd92532f0bb4bf8495", - "reference": "1b03f3a6038f2d7ad0376fbd92532f0bb4bf8495", + "url": "https://api.github.com/repos/filamentphp/schemas/zipball/1638d2b16f7684b7925d9c6253592ecd308d7f12", + "reference": "1638d2b16f7684b7925d9c6253592ecd308d7f12", "shasum": "" }, "require": { @@ -1658,20 +1658,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-09T15:08:07+00:00" + "time": "2026-01-27T12:11:14+00:00" }, { "name": "filament/support", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "895ce0a1b2cd93984842a0a32d85be858f3437d4" + "reference": "26894b15b989f89c83b004b38e513b9b2843a0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/895ce0a1b2cd93984842a0a32d85be858f3437d4", - "reference": "895ce0a1b2cd93984842a0a32d85be858f3437d4", + "url": "https://api.github.com/repos/filamentphp/support/zipball/26894b15b989f89c83b004b38e513b9b2843a0c4", + "reference": "26894b15b989f89c83b004b38e513b9b2843a0c4", "shasum": "" }, "require": { @@ -1716,20 +1716,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-09T15:08:09+00:00" + "time": "2026-01-27T12:11:14+00:00" }, { "name": "filament/tables", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "688f1b9aee8cbfda5c0609469cc4447351a76790" + "reference": "ae5a17dfc442b9ac9ff6d3f91a96538c3771ee3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/688f1b9aee8cbfda5c0609469cc4447351a76790", - "reference": "688f1b9aee8cbfda5c0609469cc4447351a76790", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/ae5a17dfc442b9ac9ff6d3f91a96538c3771ee3c", + "reference": "ae5a17dfc442b9ac9ff6d3f91a96538c3771ee3c", "shasum": "" }, "require": { @@ -1762,20 +1762,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-16T10:31:39+00:00" + "time": "2026-01-27T12:10:54+00:00" }, { "name": "filament/widgets", - "version": "v4.5.3", + "version": "v4.6.1", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", - "reference": "aab40f5e0919963a7bd1993ff1b65949d5508cc5" + "reference": "2dfe6ea8d6a491cdf1eb7056561ec9db4b8cfeb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/widgets/zipball/aab40f5e0919963a7bd1993ff1b65949d5508cc5", - "reference": "aab40f5e0919963a7bd1993ff1b65949d5508cc5", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/2dfe6ea8d6a491cdf1eb7056561ec9db4b8cfeb2", + "reference": "2dfe6ea8d6a491cdf1eb7056561ec9db4b8cfeb2", "shasum": "" }, "require": { @@ -1806,7 +1806,7 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-01-16T10:31:41+00:00" + "time": "2026-01-23T10:56:26+00:00" }, { "name": "firebase/php-jwt", @@ -2544,16 +2544,16 @@ }, { "name": "laravel/framework", - "version": "v12.47.0", + "version": "v12.49.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "ab8114c2e78f32e64eb238fc4b495bea3f8b80ec" + "reference": "4bde4530545111d8bdd1de6f545fa8824039fcb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ab8114c2e78f32e64eb238fc4b495bea3f8b80ec", - "reference": "ab8114c2e78f32e64eb238fc4b495bea3f8b80ec", + "url": "https://api.github.com/repos/laravel/framework/zipball/4bde4530545111d8bdd1de6f545fa8824039fcb5", + "reference": "4bde4530545111d8bdd1de6f545fa8824039fcb5", "shasum": "" }, "require": { @@ -2666,7 +2666,7 @@ "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", "opis/json-schema": "^2.4.1", - "orchestra/testbench-core": "^10.8.1", + "orchestra/testbench-core": "^10.9.0", "pda/pheanstalk": "^5.0.6|^7.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", @@ -2762,7 +2762,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2026-01-13T15:29:06+00:00" + "time": "2026-01-28T03:40:49+00:00" }, { "name": "laravel/helpers", @@ -2823,16 +2823,16 @@ }, { "name": "laravel/prompts", - "version": "v0.3.10", + "version": "v0.3.11", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "360ba095ef9f51017473505191fbd4ab73e1cab3" + "reference": "dd2a2ed95acacbcccd32fd98dee4c946ae7a7217" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/360ba095ef9f51017473505191fbd4ab73e1cab3", - "reference": "360ba095ef9f51017473505191fbd4ab73e1cab3", + "url": "https://api.github.com/repos/laravel/prompts/zipball/dd2a2ed95acacbcccd32fd98dee4c946ae7a7217", + "reference": "dd2a2ed95acacbcccd32fd98dee4c946ae7a7217", "shasum": "" }, "require": { @@ -2876,22 +2876,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.10" + "source": "https://github.com/laravel/prompts/tree/v0.3.11" }, - "time": "2026-01-13T20:29:29+00:00" + "time": "2026-01-27T02:55:06+00:00" }, { "name": "laravel/sanctum", - "version": "v4.2.3", + "version": "v4.3.0", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "47d26f1d310879ff757b971f5a6fc631d18663fd" + "reference": "c978c82b2b8ab685468a7ca35224497d541b775a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/47d26f1d310879ff757b971f5a6fc631d18663fd", - "reference": "47d26f1d310879ff757b971f5a6fc631d18663fd", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/c978c82b2b8ab685468a7ca35224497d541b775a", + "reference": "c978c82b2b8ab685468a7ca35224497d541b775a", "shasum": "" }, "require": { @@ -2941,7 +2941,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2026-01-11T18:20:25+00:00" + "time": "2026-01-22T22:27:01+00:00" }, { "name": "laravel/serializable-closure", @@ -3560,16 +3560,16 @@ }, { "name": "league/flysystem", - "version": "3.30.2", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277" + "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", - "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1717e0b3642b0df65ecb0cc89cdd99fa840672ff", + "reference": "1717e0b3642b0df65ecb0cc89cdd99fa840672ff", "shasum": "" }, "require": { @@ -3637,22 +3637,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.30.2" + "source": "https://github.com/thephpleague/flysystem/tree/3.31.0" }, - "time": "2025-11-10T17:13:11+00:00" + "time": "2026-01-23T15:38:47+00:00" }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.30.1", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "d286e896083bed3190574b8b088b557b59eb66f5" + "reference": "e36a2bc60b06332c92e4435047797ded352b446f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d286e896083bed3190574b8b088b557b59eb66f5", - "reference": "d286e896083bed3190574b8b088b557b59eb66f5", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/e36a2bc60b06332c92e4435047797ded352b446f", + "reference": "e36a2bc60b06332c92e4435047797ded352b446f", "shasum": "" }, "require": { @@ -3692,22 +3692,22 @@ "storage" ], "support": { - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.30.1" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.31.0" }, - "time": "2025-10-20T15:27:33+00:00" + "time": "2026-01-23T15:30:45+00:00" }, { "name": "league/flysystem-local", - "version": "3.30.2", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d" + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d", - "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", "shasum": "" }, "require": { @@ -3741,22 +3741,22 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" }, - "time": "2025-11-10T11:23:37+00:00" + "time": "2026-01-23T15:30:45+00:00" }, { "name": "league/flysystem-memory", - "version": "3.29.0", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-memory.git", - "reference": "219c79ad8b1d614a58ac17b775bfb3a6b7228126" + "reference": "b2d1700ed1215684e7276e55bcacf350e0e06ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-memory/zipball/219c79ad8b1d614a58ac17b775bfb3a6b7228126", - "reference": "219c79ad8b1d614a58ac17b775bfb3a6b7228126", + "url": "https://api.github.com/repos/thephpleague/flysystem-memory/zipball/b2d1700ed1215684e7276e55bcacf350e0e06ff9", + "reference": "b2d1700ed1215684e7276e55bcacf350e0e06ff9", "shasum": "" }, "require": { @@ -3789,9 +3789,9 @@ "memory" ], "support": { - "source": "https://github.com/thephpleague/flysystem-memory/tree/3.29.0" + "source": "https://github.com/thephpleague/flysystem-memory/tree/3.31.0" }, - "time": "2024-08-09T21:24:39+00:00" + "time": "2026-01-23T15:30:45+00:00" }, { "name": "league/fractal", @@ -4263,16 +4263,16 @@ }, { "name": "livewire/livewire", - "version": "v3.7.4", + "version": "v3.7.6", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "5a8dffd4c0ab357ff7ed5b39e7c2453d962a68e0" + "reference": "276ac156f6ae414990784854a2673e3d23c68b24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/5a8dffd4c0ab357ff7ed5b39e7c2453d962a68e0", - "reference": "5a8dffd4c0ab357ff7ed5b39e7c2453d962a68e0", + "url": "https://api.github.com/repos/livewire/livewire/zipball/276ac156f6ae414990784854a2673e3d23c68b24", + "reference": "276ac156f6ae414990784854a2673e3d23c68b24", "shasum": "" }, "require": { @@ -4327,7 +4327,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.7.4" + "source": "https://github.com/livewire/livewire/tree/v3.7.6" }, "funding": [ { @@ -4335,7 +4335,7 @@ "type": "github" } ], - "time": "2026-01-13T09:37:21+00:00" + "time": "2026-01-23T05:41:38+00:00" }, { "name": "masterminds/html5", @@ -5383,16 +5383,16 @@ }, { "name": "phiki/phiki", - "version": "v2.0.5", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/phikiphp/phiki.git", - "reference": "36d03e4c103b825f2657db966730d43e2035ff00" + "reference": "b16020573e9f4ad3c9d230c17ed4c84c15356e28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phikiphp/phiki/zipball/36d03e4c103b825f2657db966730d43e2035ff00", - "reference": "36d03e4c103b825f2657db966730d43e2035ff00", + "url": "https://api.github.com/repos/phikiphp/phiki/zipball/b16020573e9f4ad3c9d230c17ed4c84c15356e28", + "reference": "b16020573e9f4ad3c9d230c17ed4c84c15356e28", "shasum": "" }, "require": { @@ -5438,7 +5438,7 @@ "description": "Syntax highlighting using TextMate grammars in PHP.", "support": { "issues": "https://github.com/phikiphp/phiki/issues", - "source": "https://github.com/phikiphp/phiki/tree/v2.0.5" + "source": "https://github.com/phikiphp/phiki/tree/v2.1.0" }, "funding": [ { @@ -5450,7 +5450,7 @@ "type": "other" } ], - "time": "2025-11-04T20:03:45+00:00" + "time": "2026-01-20T21:26:48+00:00" }, { "name": "phpdocumentor/reflection", @@ -5776,16 +5776,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.48", + "version": "3.0.49", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "64065a5679c50acb886e82c07aa139b0f757bb89" + "reference": "6233a1e12584754e6b5daa69fe1289b47775c1b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/64065a5679c50acb886e82c07aa139b0f757bb89", - "reference": "64065a5679c50acb886e82c07aa139b0f757bb89", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/6233a1e12584754e6b5daa69fe1289b47775c1b9", + "reference": "6233a1e12584754e6b5daa69fe1289b47775c1b9", "shasum": "" }, "require": { @@ -5866,7 +5866,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.48" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.49" }, "funding": [ { @@ -5882,20 +5882,20 @@ "type": "tidelift" } ], - "time": "2025-12-15T11:51:42+00:00" + "time": "2026-01-27T09:17:28+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "2.3.1", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374" + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/16dbf9937da8d4528ceb2145c9c7c0bd29e26374", - "reference": "16dbf9937da8d4528ceb2145c9c7c0bd29e26374", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "shasum": "" }, "require": { @@ -5927,9 +5927,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.1" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2026-01-12T11:33:04+00:00" + "time": "2026-01-25T14:56:51+00:00" }, { "name": "pragmarx/google2fa", @@ -7494,16 +7494,16 @@ }, { "name": "spatie/laravel-data", - "version": "4.18.0", + "version": "4.19.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-data.git", - "reference": "c10784f1133d540a702bd6db36ed659f4bc0606a" + "reference": "33ea9c6359015415bc46138eb256051ceff24a2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-data/zipball/c10784f1133d540a702bd6db36ed659f4bc0606a", - "reference": "c10784f1133d540a702bd6db36ed659f4bc0606a", + "url": "https://api.github.com/repos/spatie/laravel-data/zipball/33ea9c6359015415bc46138eb256051ceff24a2e", + "reference": "33ea9c6359015415bc46138eb256051ceff24a2e", "shasum": "" }, "require": { @@ -7520,13 +7520,12 @@ "livewire/livewire": "^3.0", "mockery/mockery": "^1.6", "nesbot/carbon": "^2.63|^3.0", - "orchestra/testbench": "^8.0|^9.0|^10.0", - "pestphp/pest": "^2.31|^3.0", - "pestphp/pest-plugin-laravel": "^2.0|^3.0", - "pestphp/pest-plugin-livewire": "^2.1|^3.0", + "orchestra/testbench": "^8.37.0|^9.16|^10.9", + "pestphp/pest": "^2.36|^3.8|^4.3", + "pestphp/pest-plugin-laravel": "^2.4|^3.0|^4.0", + "pestphp/pest-plugin-livewire": "^2.1|^3.0|^4.0", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", - "phpunit/phpunit": "^10.0|^11.0|^12.0", "spatie/invade": "^1.0", "spatie/laravel-typescript-transformer": "^2.5", "spatie/pest-plugin-snapshots": "^2.1", @@ -7565,7 +7564,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-data/issues", - "source": "https://github.com/spatie/laravel-data/tree/4.18.0" + "source": "https://github.com/spatie/laravel-data/tree/4.19.0" }, "funding": [ { @@ -7573,7 +7572,7 @@ "type": "github" } ], - "time": "2025-10-16T16:44:07+00:00" + "time": "2026-01-19T09:47:31+00:00" }, { "name": "spatie/laravel-fractal", @@ -7895,16 +7894,16 @@ }, { "name": "spatie/laravel-query-builder", - "version": "6.4.0", + "version": "6.4.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-query-builder.git", - "reference": "f73627028538bfa58d5437f79344fa93ae254a36" + "reference": "9c7427c0dff87d7232beeecd2d33bf7d21952b43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-query-builder/zipball/f73627028538bfa58d5437f79344fa93ae254a36", - "reference": "f73627028538bfa58d5437f79344fa93ae254a36", + "url": "https://api.github.com/repos/spatie/laravel-query-builder/zipball/9c7427c0dff87d7232beeecd2d33bf7d21952b43", + "reference": "9c7427c0dff87d7232beeecd2d33bf7d21952b43", "shasum": "" }, "require": { @@ -7965,7 +7964,7 @@ "type": "custom" } ], - "time": "2026-01-09T13:35:54+00:00" + "time": "2026-01-27T07:27:24+00:00" }, { "name": "spatie/php-structure-discoverer", @@ -8317,16 +8316,16 @@ }, { "name": "symfony/console", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6" + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/732a9ca6cd9dfd940c639062d5edbde2f6727fb6", - "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6", + "url": "https://api.github.com/repos/symfony/console/zipball/41e38717ac1dd7a46b6bda7d6a82af2d98a78894", + "reference": "41e38717ac1dd7a46b6bda7d6a82af2d98a78894", "shasum": "" }, "require": { @@ -8391,7 +8390,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.3" + "source": "https://github.com/symfony/console/tree/v7.4.4" }, "funding": [ { @@ -8411,7 +8410,7 @@ "type": "tidelift" } ], - "time": "2025-12-23T14:50:43+00:00" + "time": "2026-01-13T11:36:38+00:00" }, { "name": "symfony/css-selector", @@ -8551,16 +8550,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2" + "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/48be2b0653594eea32dcef130cca1c811dcf25c2", - "reference": "48be2b0653594eea32dcef130cca1c811dcf25c2", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8da531f364ddfee53e36092a7eebbbd0b775f6b8", + "reference": "8da531f364ddfee53e36092a7eebbbd0b775f6b8", "shasum": "" }, "require": { @@ -8609,7 +8608,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.4.0" + "source": "https://github.com/symfony/error-handler/tree/v7.4.4" }, "funding": [ { @@ -8629,20 +8628,20 @@ "type": "tidelift" } ], - "time": "2025-11-05T14:29:59+00:00" + "time": "2026-01-20T16:42:42+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d" + "reference": "dc2c0eba1af673e736bb851d747d266108aea746" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9dddcddff1ef974ad87b3708e4b442dc38b2261d", - "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dc2c0eba1af673e736bb851d747d266108aea746", + "reference": "dc2c0eba1af673e736bb851d747d266108aea746", "shasum": "" }, "require": { @@ -8694,7 +8693,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.4.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.4" }, "funding": [ { @@ -8714,7 +8713,7 @@ "type": "tidelift" } ], - "time": "2025-10-28T09:38:46+00:00" + "time": "2026-01-05T11:45:34+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -8864,16 +8863,16 @@ }, { "name": "symfony/finder", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "fffe05569336549b20a1be64250b40516d6e8d06" + "reference": "01b24a145bbeaa7141e75887ec904c34a6728a5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/fffe05569336549b20a1be64250b40516d6e8d06", - "reference": "fffe05569336549b20a1be64250b40516d6e8d06", + "url": "https://api.github.com/repos/symfony/finder/zipball/01b24a145bbeaa7141e75887ec904c34a6728a5f", + "reference": "01b24a145bbeaa7141e75887ec904c34a6728a5f", "shasum": "" }, "require": { @@ -8908,7 +8907,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.4.3" + "source": "https://github.com/symfony/finder/tree/v7.4.4" }, "funding": [ { @@ -8928,7 +8927,7 @@ "type": "tidelift" } ], - "time": "2025-12-23T14:50:43+00:00" + "time": "2026-01-12T12:19:02+00:00" }, { "name": "symfony/html-sanitizer", @@ -9006,16 +9005,16 @@ }, { "name": "symfony/http-client", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "d01dfac1e0dc99f18da48b18101c23ce57929616" + "reference": "d63c23357d74715a589454c141c843f0172bec6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/d01dfac1e0dc99f18da48b18101c23ce57929616", - "reference": "d01dfac1e0dc99f18da48b18101c23ce57929616", + "url": "https://api.github.com/repos/symfony/http-client/zipball/d63c23357d74715a589454c141c843f0172bec6c", + "reference": "d63c23357d74715a589454c141c843f0172bec6c", "shasum": "" }, "require": { @@ -9083,7 +9082,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.4.3" + "source": "https://github.com/symfony/http-client/tree/v7.4.4" }, "funding": [ { @@ -9103,7 +9102,7 @@ "type": "tidelift" } ], - "time": "2025-12-23T14:50:43+00:00" + "time": "2026-01-23T16:34:22+00:00" }, { "name": "symfony/http-client-contracts", @@ -9185,16 +9184,16 @@ }, { "name": "symfony/http-foundation", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "a70c745d4cea48dbd609f4075e5f5cbce453bd52" + "reference": "977a554a34cf8edc95ca351fbecb1bb1ad05cc94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a70c745d4cea48dbd609f4075e5f5cbce453bd52", - "reference": "a70c745d4cea48dbd609f4075e5f5cbce453bd52", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/977a554a34cf8edc95ca351fbecb1bb1ad05cc94", + "reference": "977a554a34cf8edc95ca351fbecb1bb1ad05cc94", "shasum": "" }, "require": { @@ -9243,7 +9242,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.4.3" + "source": "https://github.com/symfony/http-foundation/tree/v7.4.4" }, "funding": [ { @@ -9263,20 +9262,20 @@ "type": "tidelift" } ], - "time": "2025-12-23T14:23:49+00:00" + "time": "2026-01-09T12:14:21+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "885211d4bed3f857b8c964011923528a55702aa5" + "reference": "48b067768859f7b68acf41dfb857a5a4be00acdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/885211d4bed3f857b8c964011923528a55702aa5", - "reference": "885211d4bed3f857b8c964011923528a55702aa5", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/48b067768859f7b68acf41dfb857a5a4be00acdd", + "reference": "48b067768859f7b68acf41dfb857a5a4be00acdd", "shasum": "" }, "require": { @@ -9362,7 +9361,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.4.3" + "source": "https://github.com/symfony/http-kernel/tree/v7.4.4" }, "funding": [ { @@ -9382,20 +9381,20 @@ "type": "tidelift" } ], - "time": "2025-12-31T08:43:57+00:00" + "time": "2026-01-24T22:13:01+00:00" }, { "name": "symfony/mailer", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e472d35e230108231ccb7f51eb6b2100cac02ee4" + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e472d35e230108231ccb7f51eb6b2100cac02ee4", - "reference": "e472d35e230108231ccb7f51eb6b2100cac02ee4", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b750074c40c694ceb34cb926d6dffee231c5cd6", + "reference": "7b750074c40c694ceb34cb926d6dffee231c5cd6", "shasum": "" }, "require": { @@ -9446,7 +9445,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.4.3" + "source": "https://github.com/symfony/mailer/tree/v7.4.4" }, "funding": [ { @@ -9466,7 +9465,7 @@ "type": "tidelift" } ], - "time": "2025-12-16T08:02:06+00:00" + "time": "2026-01-08T08:25:11+00:00" }, { "name": "symfony/mailgun-mailer", @@ -9543,16 +9542,16 @@ }, { "name": "symfony/mime", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a" + "reference": "40945014c0a9471ccfe19673c54738fa19367a3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/bdb02729471be5d047a3ac4a69068748f1a6be7a", - "reference": "bdb02729471be5d047a3ac4a69068748f1a6be7a", + "url": "https://api.github.com/repos/symfony/mime/zipball/40945014c0a9471ccfe19673c54738fa19367a3c", + "reference": "40945014c0a9471ccfe19673c54738fa19367a3c", "shasum": "" }, "require": { @@ -9608,7 +9607,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.4.0" + "source": "https://github.com/symfony/mime/tree/v7.4.4" }, "funding": [ { @@ -9628,7 +9627,7 @@ "type": "tidelift" } ], - "time": "2025-11-16T10:14:42+00:00" + "time": "2026-01-08T16:12:55+00:00" }, { "name": "symfony/polyfill-ctype", @@ -10461,16 +10460,16 @@ }, { "name": "symfony/postmark-mailer", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/postmark-mailer.git", - "reference": "67eab9e06ff2adf74152df2ac95a07cef48eb7c5" + "reference": "8b573474e89368f1ddb25b43fd86a6dd51343e9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/postmark-mailer/zipball/67eab9e06ff2adf74152df2ac95a07cef48eb7c5", - "reference": "67eab9e06ff2adf74152df2ac95a07cef48eb7c5", + "url": "https://api.github.com/repos/symfony/postmark-mailer/zipball/8b573474e89368f1ddb25b43fd86a6dd51343e9b", + "reference": "8b573474e89368f1ddb25b43fd86a6dd51343e9b", "shasum": "" }, "require": { @@ -10511,7 +10510,7 @@ "description": "Symfony Postmark Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/postmark-mailer/tree/v7.4.0" + "source": "https://github.com/symfony/postmark-mailer/tree/v7.4.4" }, "funding": [ { @@ -10531,20 +10530,20 @@ "type": "tidelift" } ], - "time": "2025-08-04T07:05:15+00:00" + "time": "2026-01-08T08:25:11+00:00" }, { "name": "symfony/process", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f" + "reference": "626f07a53f4b4e2f00e11824cc29f928d797783b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/2f8e1a6cdf590ca63715da4d3a7a3327404a523f", - "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f", + "url": "https://api.github.com/repos/symfony/process/zipball/626f07a53f4b4e2f00e11824cc29f928d797783b", + "reference": "626f07a53f4b4e2f00e11824cc29f928d797783b", "shasum": "" }, "require": { @@ -10576,7 +10575,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.4.3" + "source": "https://github.com/symfony/process/tree/v7.4.4" }, "funding": [ { @@ -10596,20 +10595,20 @@ "type": "tidelift" } ], - "time": "2025-12-19T10:00:43+00:00" + "time": "2026-01-20T09:23:51+00:00" }, { "name": "symfony/routing", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090" + "reference": "0798827fe2c79caeed41d70b680c2c3507d10147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090", - "reference": "5d3fd7adf8896c2fdb54e2f0f35b1bcbd9e45090", + "url": "https://api.github.com/repos/symfony/routing/zipball/0798827fe2c79caeed41d70b680c2c3507d10147", + "reference": "0798827fe2c79caeed41d70b680c2c3507d10147", "shasum": "" }, "require": { @@ -10661,7 +10660,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.4.3" + "source": "https://github.com/symfony/routing/tree/v7.4.4" }, "funding": [ { @@ -10681,7 +10680,7 @@ "type": "tidelift" } ], - "time": "2025-12-19T10:00:43+00:00" + "time": "2026-01-12T12:19:02+00:00" }, { "name": "symfony/service-contracts", @@ -10772,16 +10771,16 @@ }, { "name": "symfony/string", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", - "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", + "url": "https://api.github.com/repos/symfony/string/zipball/1c4b10461bf2ec27537b5f36105337262f5f5d6f", + "reference": "1c4b10461bf2ec27537b5f36105337262f5f5d6f", "shasum": "" }, "require": { @@ -10839,7 +10838,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.4.0" + "source": "https://github.com/symfony/string/tree/v7.4.4" }, "funding": [ { @@ -10859,20 +10858,20 @@ "type": "tidelift" } ], - "time": "2025-11-27T13:27:24+00:00" + "time": "2026-01-12T10:54:30+00:00" }, { "name": "symfony/translation", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "7ef27c65d78886f7599fdd5c93d12c9243ecf44d" + "reference": "bfde13711f53f549e73b06d27b35a55207528877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/7ef27c65d78886f7599fdd5c93d12c9243ecf44d", - "reference": "7ef27c65d78886f7599fdd5c93d12c9243ecf44d", + "url": "https://api.github.com/repos/symfony/translation/zipball/bfde13711f53f549e73b06d27b35a55207528877", + "reference": "bfde13711f53f549e73b06d27b35a55207528877", "shasum": "" }, "require": { @@ -10939,7 +10938,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.4.3" + "source": "https://github.com/symfony/translation/tree/v7.4.4" }, "funding": [ { @@ -10959,7 +10958,7 @@ "type": "tidelift" } ], - "time": "2025-12-29T09:31:36+00:00" + "time": "2026-01-13T10:40:19+00:00" }, { "name": "symfony/translation-contracts", @@ -11045,16 +11044,16 @@ }, { "name": "symfony/uid", - "version": "v7.4.0", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "2498e9f81b7baa206f44de583f2f48350b90142c" + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2498e9f81b7baa206f44de583f2f48350b90142c", - "reference": "2498e9f81b7baa206f44de583f2f48350b90142c", + "url": "https://api.github.com/repos/symfony/uid/zipball/7719ce8aba76be93dfe249192f1fbfa52c588e36", + "reference": "7719ce8aba76be93dfe249192f1fbfa52c588e36", "shasum": "" }, "require": { @@ -11099,7 +11098,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.4.0" + "source": "https://github.com/symfony/uid/tree/v7.4.4" }, "funding": [ { @@ -11119,20 +11118,20 @@ "type": "tidelift" } ], - "time": "2025-09-25T11:02:55+00:00" + "time": "2026-01-03T23:30:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.4.3", + "version": "v7.4.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7e99bebcb3f90d8721890f2963463280848cba92" + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7e99bebcb3f90d8721890f2963463280848cba92", - "reference": "7e99bebcb3f90d8721890f2963463280848cba92", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0e4769b46a0c3c62390d124635ce59f66874b282", + "reference": "0e4769b46a0c3c62390d124635ce59f66874b282", "shasum": "" }, "require": { @@ -11186,7 +11185,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.4.3" + "source": "https://github.com/symfony/var-dumper/tree/v7.4.4" }, "funding": [ { @@ -11206,7 +11205,7 @@ "type": "tidelift" } ], - "time": "2025-12-18T07:04:31+00:00" + "time": "2026-01-01T22:13:48+00:00" }, { "name": "symfony/yaml", @@ -11774,16 +11773,16 @@ }, { "name": "brianium/paratest", - "version": "v7.8.4", + "version": "v7.8.5", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "130a9bf0e269ee5f5b320108f794ad03e275cad4" + "reference": "9b324c8fc319cf9728b581c7a90e1c8f6361c5e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/130a9bf0e269ee5f5b320108f794ad03e275cad4", - "reference": "130a9bf0e269ee5f5b320108f794ad03e275cad4", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/9b324c8fc319cf9728b581c7a90e1c8f6361c5e5", + "reference": "9b324c8fc319cf9728b581c7a90e1c8f6361c5e5", "shasum": "" }, "require": { @@ -11791,27 +11790,27 @@ "ext-pcre": "*", "ext-reflection": "*", "ext-simplexml": "*", - "fidry/cpu-core-counter": "^1.2.0", + "fidry/cpu-core-counter": "^1.3.0", "jean85/pretty-package-versions": "^2.1.1", - "php": "~8.2.0 || ~8.3.0 || ~8.4.0", - "phpunit/php-code-coverage": "^11.0.10", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "phpunit/php-code-coverage": "^11.0.12", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-timer": "^7.0.1", - "phpunit/phpunit": "^11.5.24", + "phpunit/phpunit": "^11.5.46", "sebastian/environment": "^7.2.1", - "symfony/console": "^6.4.22 || ^7.3.0", - "symfony/process": "^6.4.20 || ^7.3.0" + "symfony/console": "^6.4.22 || ^7.3.4 || ^8.0.3", + "symfony/process": "^6.4.20 || ^7.3.4 || ^8.0.3" }, "require-dev": { "doctrine/coding-standard": "^12.0.0", "ext-pcov": "*", "ext-posix": "*", - "phpstan/phpstan": "^2.1.17", + "phpstan/phpstan": "^2.1.33", "phpstan/phpstan-deprecation-rules": "^2.0.3", - "phpstan/phpstan-phpunit": "^2.0.6", - "phpstan/phpstan-strict-rules": "^2.0.4", - "squizlabs/php_codesniffer": "^3.13.2", - "symfony/filesystem": "^6.4.13 || ^7.3.0" + "phpstan/phpstan-phpunit": "^2.0.11", + "phpstan/phpstan-strict-rules": "^2.0.7", + "squizlabs/php_codesniffer": "^3.13.5", + "symfony/filesystem": "^6.4.13 || ^7.3.2 || ^8.0.1" }, "bin": [ "bin/paratest", @@ -11851,7 +11850,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.8.4" + "source": "https://github.com/paratestphp/paratest/tree/v7.8.5" }, "funding": [ { @@ -11863,7 +11862,7 @@ "type": "paypal" } ], - "time": "2025-06-23T06:07:21+00:00" + "time": "2026-01-08T08:02:38+00:00" }, { "name": "composer/class-map-generator", @@ -12362,16 +12361,16 @@ }, { "name": "larastan/larastan", - "version": "v3.9.0", + "version": "v3.9.1", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "82c18890d0d5b012bc39a3432531e5b6cd1b4b3a" + "reference": "4b92d9627f779fd32bdc16f53f8ce88c50446ff5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/82c18890d0d5b012bc39a3432531e5b6cd1b4b3a", - "reference": "82c18890d0d5b012bc39a3432531e5b6cd1b4b3a", + "url": "https://api.github.com/repos/larastan/larastan/zipball/4b92d9627f779fd32bdc16f53f8ce88c50446ff5", + "reference": "4b92d9627f779fd32bdc16f53f8ce88c50446ff5", "shasum": "" }, "require": { @@ -12440,7 +12439,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v3.9.0" + "source": "https://github.com/larastan/larastan/tree/v3.9.1" }, "funding": [ { @@ -12448,7 +12447,7 @@ "type": "github" } ], - "time": "2026-01-17T23:00:37+00:00" + "time": "2026-01-21T09:15:17+00:00" }, { "name": "laravel/pail", @@ -12843,38 +12842,38 @@ }, { "name": "pestphp/pest", - "version": "v3.8.4", + "version": "v3.8.5", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "72cf695554420e21858cda831d5db193db102574" + "reference": "7796630eafcfd1c02660cecdde3bc6984fbf01f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/72cf695554420e21858cda831d5db193db102574", - "reference": "72cf695554420e21858cda831d5db193db102574", + "url": "https://api.github.com/repos/pestphp/pest/zipball/7796630eafcfd1c02660cecdde3bc6984fbf01f4", + "reference": "7796630eafcfd1c02660cecdde3bc6984fbf01f4", "shasum": "" }, "require": { - "brianium/paratest": "^7.8.4", - "nunomaduro/collision": "^8.8.2", - "nunomaduro/termwind": "^2.3.1", + "brianium/paratest": "^7.8.5", + "nunomaduro/collision": "^8.8.3", + "nunomaduro/termwind": "^2.3.3", "pestphp/pest-plugin": "^3.0.0", "pestphp/pest-plugin-arch": "^3.1.1", "pestphp/pest-plugin-mutate": "^3.0.5", "php": "^8.2.0", - "phpunit/phpunit": "^11.5.33" + "phpunit/phpunit": "^11.5.50" }, "conflict": { "filp/whoops": "<2.16.0", - "phpunit/phpunit": ">11.5.33", + "phpunit/phpunit": ">11.5.50", "sebastian/exporter": "<6.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { "pestphp/pest-dev-tools": "^3.4.0", "pestphp/pest-plugin-type-coverage": "^3.6.1", - "symfony/process": "^7.3.0" + "symfony/process": "^7.4.4" }, "bin": [ "bin/pest" @@ -12939,7 +12938,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v3.8.4" + "source": "https://github.com/pestphp/pest/tree/v3.8.5" }, "funding": [ { @@ -12951,7 +12950,7 @@ "type": "github" } ], - "time": "2025-08-20T19:12:42+00:00" + "time": "2026-01-28T01:33:45+00:00" }, { "name": "pestphp/pest-plugin", @@ -13416,11 +13415,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.33", + "version": "2.1.37", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f", - "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/28cd424c5ea984128c95cfa7ea658808e8954e49", + "reference": "28cd424c5ea984128c95cfa7ea658808e8954e49", "shasum": "" }, "require": { @@ -13465,7 +13464,7 @@ "type": "github" } ], - "time": "2025-12-05T10:24:31+00:00" + "time": "2026-01-24T08:21:55+00:00" }, { "name": "phpunit/php-code-coverage", @@ -13804,16 +13803,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.33", + "version": "11.5.50", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "5965e9ff57546cb9137c0ff6aa78cb7442b05cf6" + "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5965e9ff57546cb9137c0ff6aa78cb7442b05cf6", - "reference": "5965e9ff57546cb9137c0ff6aa78cb7442b05cf6", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fdfc727f0fcacfeb8fcb30c7e5da173125b58be3", + "reference": "fdfc727f0fcacfeb8fcb30c7e5da173125b58be3", "shasum": "" }, "require": { @@ -13827,17 +13826,17 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.10", + "phpunit/php-code-coverage": "^11.0.12", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-invoker": "^5.0.1", "phpunit/php-text-template": "^4.0.1", "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.2", + "sebastian/comparator": "^6.3.3", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.0", + "sebastian/exporter": "^6.3.2", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", "sebastian/type": "^5.1.3", @@ -13885,7 +13884,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.33" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.50" }, "funding": [ { @@ -13909,7 +13908,7 @@ "type": "tidelift" } ], - "time": "2025-08-16T05:19:02+00:00" + "time": "2026-01-27T05:59:18+00:00" }, { "name": "sebastian/cli-parser", @@ -14083,16 +14082,16 @@ }, { "name": "sebastian/comparator", - "version": "6.3.2", + "version": "6.3.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", - "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { @@ -14151,7 +14150,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" }, "funding": [ { @@ -14171,7 +14170,7 @@ "type": "tidelift" } ], - "time": "2025-08-10T08:07:46+00:00" + "time": "2026-01-24T09:26:40+00:00" }, { "name": "sebastian/complexity", @@ -15189,38 +15188,39 @@ }, { "name": "spatie/laravel-ignition", - "version": "2.9.1", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "1baee07216d6748ebd3a65ba97381b051838707a" + "reference": "2abefdcca6074a9155f90b4ccb3345af8889d5f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", - "reference": "1baee07216d6748ebd3a65ba97381b051838707a", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2abefdcca6074a9155f90b4ccb3345af8889d5f5", + "reference": "2abefdcca6074a9155f90b4ccb3345af8889d5f5", "shasum": "" }, "require": { "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0|^12.0", - "php": "^8.1", - "spatie/ignition": "^1.15", - "symfony/console": "^6.2.3|^7.0", - "symfony/var-dumper": "^6.2.3|^7.0" + "illuminate/support": "^11.0|^12.0", + "nesbot/carbon": "^2.72|^3.0", + "php": "^8.2", + "spatie/ignition": "^1.15.1", + "symfony/console": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "require-dev": { - "livewire/livewire": "^2.11|^3.3.5", - "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1|^0.10", - "orchestra/testbench": "8.22.3|^9.0|^10.0", - "pestphp/pest": "^2.34|^3.7", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", - "phpstan/phpstan-phpunit": "^1.3.16|^2.0", - "vlucas/phpdotenv": "^5.5" + "livewire/livewire": "^3.7.0|^4.0", + "mockery/mockery": "^1.6.12", + "openai-php/client": "^0.10.3", + "orchestra/testbench": "^v9.16.0|^10.6", + "pestphp/pest": "^3.7|^4.0", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan-deprecation-rules": "^2.0.3", + "phpstan/phpstan-phpunit": "^2.0.8", + "vlucas/phpdotenv": "^5.6.2" }, "suggest": { "openai-php/client": "Require get solutions from OpenAI", @@ -15276,7 +15276,7 @@ "type": "github" } ], - "time": "2025-02-20T13:13:55+00:00" + "time": "2026-01-20T13:16:11+00:00" }, { "name": "staabm/side-effects-detector", @@ -15457,5 +15457,5 @@ "platform-overrides": { "php": "8.2" }, - "plugin-api-version": "2.9.0" + "plugin-api-version": "2.6.0" } From 833294bfaf2ac78e3f7be00c2043b0e89816f434 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Thu, 29 Jan 2026 15:37:05 +0100 Subject: [PATCH 3/3] Invisible button and tooltip fixes (#2149) --- .../Resources/ApiKeys/ApiKeyResource.php | 4 +-- .../DatabaseHosts/DatabaseHostResource.php | 4 +-- .../Admin/Resources/Eggs/Pages/ListEggs.php | 4 +-- .../Admin/Resources/Mounts/MountResource.php | 4 +-- .../Resources/Nodes/Pages/CreateNode.php | 5 ++-- .../Admin/Resources/Nodes/Pages/ListNodes.php | 4 +-- .../Admin/Resources/Roles/RoleResource.php | 4 +-- .../Resources/Servers/Pages/CreateServer.php | 15 ++++++----- .../Resources/Servers/Pages/EditServer.php | 9 ++++--- .../Resources/Servers/Pages/ListServers.php | 4 +-- .../Pages/EditWebhookConfiguration.php | 4 +-- .../Resources/Webhooks/WebhookResource.php | 8 +++--- app/Filament/Server/Pages/Settings.php | 2 +- .../Filament/FilamentServiceProvider.php | 25 ++++++++++++------- lang/en/admin/webhook.php | 3 +-- 15 files changed, 47 insertions(+), 52 deletions(-) diff --git a/app/Filament/Admin/Resources/ApiKeys/ApiKeyResource.php b/app/Filament/Admin/Resources/ApiKeys/ApiKeyResource.php index e5eb939e4..878f818e2 100644 --- a/app/Filament/Admin/Resources/ApiKeys/ApiKeyResource.php +++ b/app/Filament/Admin/Resources/ApiKeys/ApiKeyResource.php @@ -101,9 +101,7 @@ class ApiKeyResource extends Resource DeleteAction::make(), ]) ->toolbarActions([ - CreateAction::make() - ->hiddenLabel() - ->icon(TablerIcon::Plus), + CreateAction::make(), ]) ->emptyStateIcon(TablerIcon::Key) ->emptyStateDescription('') diff --git a/app/Filament/Admin/Resources/DatabaseHosts/DatabaseHostResource.php b/app/Filament/Admin/Resources/DatabaseHosts/DatabaseHostResource.php index df20c38ea..5d95e00dc 100644 --- a/app/Filament/Admin/Resources/DatabaseHosts/DatabaseHostResource.php +++ b/app/Filament/Admin/Resources/DatabaseHosts/DatabaseHostResource.php @@ -99,9 +99,7 @@ class DatabaseHostResource extends Resource EditAction::make(), ]) ->toolbarActions([ - CreateAction::make() - ->hiddenLabel() - ->icon(TablerIcon::Plus), + CreateAction::make(), BulkActionGroup::make([ DeleteBulkAction::make(), ]), diff --git a/app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php b/app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php index c904393fd..4e319b332 100644 --- a/app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php +++ b/app/Filament/Admin/Resources/Eggs/Pages/ListEggs.php @@ -84,9 +84,7 @@ class ListEggs extends ListRecords ->toolbarActions([ ImportEggAction::make() ->multiple(), - CreateAction::make() - ->hiddenLabel() - ->icon(TablerIcon::Plus), + CreateAction::make(), BulkActionGroup::make([ DeleteBulkAction::make() ->before(function (Collection &$records) { diff --git a/app/Filament/Admin/Resources/Mounts/MountResource.php b/app/Filament/Admin/Resources/Mounts/MountResource.php index f02fbfb3a..92dd1b629 100644 --- a/app/Filament/Admin/Resources/Mounts/MountResource.php +++ b/app/Filament/Admin/Resources/Mounts/MountResource.php @@ -102,9 +102,7 @@ class MountResource extends Resource EditAction::make(), ]) ->toolbarActions([ - CreateAction::make() - ->hiddenLabel() - ->icon(TablerIcon::Plus), + CreateAction::make(), BulkActionGroup::make([ DeleteBulkAction::make(), ]), diff --git a/app/Filament/Admin/Resources/Nodes/Pages/CreateNode.php b/app/Filament/Admin/Resources/Nodes/Pages/CreateNode.php index 8fa088122..34f68f9bc 100644 --- a/app/Filament/Admin/Resources/Nodes/Pages/CreateNode.php +++ b/app/Filament/Admin/Resources/Nodes/Pages/CreateNode.php @@ -40,13 +40,14 @@ class CreateNode extends CreateRecord ->components([ Wizard::make($this->getSteps()) ->columnSpanFull() - ->nextAction(fn (Action $action) => $action->iconButton()->iconSize(IconSize::ExtraLarge)->icon(TablerIcon::ArrowRight)) - ->previousAction(fn (Action $action) => $action->iconButton()->iconSize(IconSize::ExtraLarge)->icon(TablerIcon::ArrowLeft)) + ->nextAction(fn (Action $action) => $action->tooltip(fn () => $action->getLabel())->iconButton()->iconSize(IconSize::ExtraLarge)->icon(TablerIcon::ArrowRight)) + ->previousAction(fn (Action $action) => $action->tooltip(fn () => $action->getLabel())->iconButton()->iconSize(IconSize::ExtraLarge)->icon(TablerIcon::ArrowLeft)) ->submitAction(new HtmlString(Blade::render(<<<'BLADE' {{ trans('admin/node.create') }} diff --git a/app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php b/app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php index 2bfc1623a..a413bc5d4 100644 --- a/app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php +++ b/app/Filament/Admin/Resources/Nodes/Pages/ListNodes.php @@ -64,9 +64,7 @@ class ListNodes extends ListRecords EditAction::make(), ]) ->toolbarActions([ - CreateAction::make() - ->hiddenLabel() - ->icon(TablerIcon::Plus), + CreateAction::make(), ]) ->emptyStateIcon(TablerIcon::Server2) ->emptyStateDescription('') diff --git a/app/Filament/Admin/Resources/Roles/RoleResource.php b/app/Filament/Admin/Resources/Roles/RoleResource.php index d090300ce..bebf7af84 100644 --- a/app/Filament/Admin/Resources/Roles/RoleResource.php +++ b/app/Filament/Admin/Resources/Roles/RoleResource.php @@ -104,9 +104,7 @@ class RoleResource extends Resource EditAction::make(), ]) ->toolbarActions([ - CreateAction::make() - ->hiddenLabel() - ->icon(TablerIcon::Plus), + CreateAction::make(), BulkActionGroup::make([ DeleteBulkAction::make(), ]), diff --git a/app/Filament/Admin/Resources/Servers/Pages/CreateServer.php b/app/Filament/Admin/Resources/Servers/Pages/CreateServer.php index a74fc7b4d..20f4748c9 100644 --- a/app/Filament/Admin/Resources/Servers/Pages/CreateServer.php +++ b/app/Filament/Admin/Resources/Servers/Pages/CreateServer.php @@ -71,15 +71,17 @@ class CreateServer extends CreateRecord ->components([ Wizard::make($this->getSteps()) ->columnSpanFull() - ->nextAction(fn (Action $action) => $action->iconButton()->iconSize(IconSize::ExtraLarge)->icon(TablerIcon::ArrowRight)) - ->previousAction(fn (Action $action) => $action->iconButton()->iconSize(IconSize::ExtraLarge)->icon(TablerIcon::ArrowLeft)) + ->nextAction(fn (Action $action) => $action->tooltip(fn () => $action->getLabel())->iconButton()->iconSize(IconSize::ExtraLarge)->icon(TablerIcon::ArrowRight)) + ->previousAction(fn (Action $action) => $action->tooltip(fn () => $action->getLabel())->iconButton()->iconSize(IconSize::ExtraLarge)->icon(TablerIcon::ArrowLeft)) ->submitAction(new HtmlString(Blade::render(<<<'BLADE' - {{ trans('admin/server.create') }} - + BLADE))), ]); } @@ -105,7 +107,8 @@ class CreateServer extends CreateRecord TextInput::make('name') ->prefixIcon(TablerIcon::Server) ->label(trans('admin/server.name')) - ->suffixAction(Action::make('random') + ->suffixAction(Action::make('hint_random') + ->tooltip('Random') ->icon('tabler-dice-' . random_int(1, 6)) ->action(function (Set $set, Get $get) { $egg = Egg::find($get('egg_id')); diff --git a/app/Filament/Admin/Resources/Servers/Pages/EditServer.php b/app/Filament/Admin/Resources/Servers/Pages/EditServer.php index 4db2eba28..a17cb979a 100644 --- a/app/Filament/Admin/Resources/Servers/Pages/EditServer.php +++ b/app/Filament/Admin/Resources/Servers/Pages/EditServer.php @@ -260,6 +260,7 @@ class EditServer extends EditRecord ->prefixIcon(TablerIcon::Server) ->label(trans('admin/server.name')) ->suffixAction(Action::make('hint_random') + ->tooltip('Random') ->icon('tabler-dice-' . random_int(1, 6)) ->action(function (Set $set, Get $get) { $egg = Egg::find($get('egg_id')); @@ -862,7 +863,7 @@ class EditServer extends EditRecord ->columnSpan(3) ->schema([ Actions::make([ - Action::make('toggleInstall') + Action::make('exclude_toggle_install') ->label(trans('admin/server.toggle_install')) ->disabled(fn (Server $server) => $server->isSuspended()) ->modal(fn (Server $server) => $server->isFailedInstall()) @@ -913,7 +914,7 @@ class EditServer extends EditRecord ->columnSpan(3) ->schema([ Actions::make([ - Action::make('toggleSuspend') + Action::make('exclude_toggle_suspend') ->label(trans('admin/server.suspend')) ->color('warning') ->hidden(fn (Server $server) => $server->isSuspended()) @@ -969,7 +970,7 @@ class EditServer extends EditRecord ->columnSpan(3) ->schema([ Actions::make([ - Action::make('transfer') + Action::make('exclude_transfer') ->label(trans('admin/server.transfer')) ->disabled(fn (Server $server) => user()?->accessibleNodes()->count() <= 1 || $server->isInConflictState()) ->modalHeading(trans('admin/server.transfer')) @@ -1007,7 +1008,7 @@ class EditServer extends EditRecord ->columnSpan(3) ->schema([ Actions::make([ - Action::make('reinstall') + Action::make('exclude_reinstall') ->label(trans('admin/server.reinstall')) ->color('danger') ->requiresConfirmation() diff --git a/app/Filament/Admin/Resources/Servers/Pages/ListServers.php b/app/Filament/Admin/Resources/Servers/Pages/ListServers.php index 418fbaa0b..189ac4d71 100644 --- a/app/Filament/Admin/Resources/Servers/Pages/ListServers.php +++ b/app/Filament/Admin/Resources/Servers/Pages/ListServers.php @@ -98,9 +98,7 @@ class ListServers extends ListRecords EditAction::make(), ]) ->toolbarActions([ - CreateAction::make() - ->hiddenLabel() - ->icon(TablerIcon::Plus), + CreateAction::make(), ]) ->searchable() ->emptyStateIcon(TablerIcon::BrandDocker) diff --git a/app/Filament/Admin/Resources/Webhooks/Pages/EditWebhookConfiguration.php b/app/Filament/Admin/Resources/Webhooks/Pages/EditWebhookConfiguration.php index 5b80927a7..1a4bc87a6 100644 --- a/app/Filament/Admin/Resources/Webhooks/Pages/EditWebhookConfiguration.php +++ b/app/Filament/Admin/Resources/Webhooks/Pages/EditWebhookConfiguration.php @@ -26,11 +26,11 @@ class EditWebhookConfiguration extends EditRecord return [ DeleteAction::make(), Action::make('test_now') - ->label(trans('admin/webhook.test_now')) + ->tooltip(trans('admin/webhook.test_now')) ->color('primary') ->disabled(fn (WebhookConfiguration $webhookConfiguration) => count($webhookConfiguration->events) === 0) ->action(fn (WebhookConfiguration $webhookConfiguration) => $webhookConfiguration->run()) - ->tooltip(trans('admin/webhook.test_now_help')), + ->icon(TablerIcon::TestPipe), Action::make('save') ->hiddenLabel() ->action('save') diff --git a/app/Filament/Admin/Resources/Webhooks/WebhookResource.php b/app/Filament/Admin/Resources/Webhooks/WebhookResource.php index 34eb4342e..6f46fe810 100644 --- a/app/Filament/Admin/Resources/Webhooks/WebhookResource.php +++ b/app/Filament/Admin/Resources/Webhooks/WebhookResource.php @@ -112,9 +112,7 @@ class WebhookResource extends Resource ->successRedirectUrl(fn (WebhookConfiguration $replica) => EditWebhookConfiguration::getUrl(['record' => $replica])), ]) ->toolbarActions([ - CreateAction::make() - ->hiddenLabel() - ->icon(TablerIcon::Plus), + CreateAction::make(), BulkActionGroup::make([ DeleteBulkAction::make(), ]), @@ -152,9 +150,9 @@ class WebhookResource extends Resource ->schema(fn () => self::getRegularFields()) ->headerActions([ Action::make('reset_headers') - ->label(trans('admin/webhook.reset_headers')) + ->tooltip(trans('admin/webhook.reset_headers')) ->color('danger') - ->icon('heroicon-o-trash') + ->icon(TablerIcon::Restore) ->action(fn (Get $get, Set $set) => $set('headers', [ 'X-Webhook-Event' => '{{event}}', ])), diff --git a/app/Filament/Server/Pages/Settings.php b/app/Filament/Server/Pages/Settings.php index 73e0f9de1..86d845f05 100644 --- a/app/Filament/Server/Pages/Settings.php +++ b/app/Filament/Server/Pages/Settings.php @@ -338,7 +338,7 @@ class Settings extends ServerFormPage ->hidden(fn (Server $server) => !user()?->can(SubuserPermission::SettingsReinstall, $server)) ->columnSpanFull() ->footerActions([ - Action::make('reinstall') + Action::make('exclude_reinstall') ->label(trans('server/setting.reinstall.action')) ->color('danger') ->disabled(fn (Server $server) => !user()?->can(SubuserPermission::SettingsReinstall, $server)) diff --git a/app/Providers/Filament/FilamentServiceProvider.php b/app/Providers/Filament/FilamentServiceProvider.php index 48d636737..5b30646aa 100644 --- a/app/Providers/Filament/FilamentServiceProvider.php +++ b/app/Providers/Filament/FilamentServiceProvider.php @@ -98,33 +98,33 @@ class FilamentServiceProvider extends ServiceProvider Select::configureUsing(fn (Select $select) => $select->native(false)); KeyValue::configureUsing(fn (KeyValue $keyValue) => $keyValue->deleteAction(function (Action $action) { - $action->tooltip(trans('filament-forms::components.key_value.actions.delete.label')); + $action->tooltip(fn () => $action->getLabel()); $action->iconSize(IconSize::Large); })); Repeater::configureUsing(fn (Repeater $repeater) => $repeater->deleteAction(function (Action $action) { - $action->tooltip(trans('filament-forms::components.repeater.actions.delete.label')); + $action->tooltip(fn () => $action->getLabel()); $action->iconSize(IconSize::Large); })); ShowPasswordAction::configureUsing(function (ShowPasswordAction $action) { - $action->tooltip(trans('filament-forms::components.text_input.actions.show_password.label')); + $action->tooltip(fn () => $action->getLabel()); $action->iconSize(IconSize::Large); }); HidePasswordAction::configureUsing(function (HidePasswordAction $action) { - $action->tooltip(trans('filament-forms::components.text_input.actions.hide_password.label')); + $action->tooltip(fn () => $action->getLabel()); $action->iconSize(IconSize::Large); }); CopyAction::configureUsing(function (CopyAction $action) { - $action->tooltip(trans('filament-forms::components.text_input.actions.copy.label')); + $action->tooltip(fn () => $action->getLabel()); $action->iconSize(IconSize::Large); }); DeleteAction::configureUsing(function (DeleteAction $action) { $action->icon(TablerIcon::Trash); - $action->tooltip(trans('filament-actions::delete.single.modal.actions.delete.label')); + $action->tooltip(fn () => $action->getLabel()); $action->hiddenLabel(); $action->iconSize(IconSize::Large); @@ -135,7 +135,9 @@ class FilamentServiceProvider extends ServiceProvider }); CreateAction::configureUsing(function (CreateAction $action) { - $action->tooltip(fn (): string => trans('filament-actions::create.single.label', ['label' => $action->getModelLabel()])); + $action->icon(TablerIcon::Plus); + $action->tooltip(fn () => $action->getLabel()); + $action->hiddenLabel(); $action->iconSize(IconSize::Large); if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { @@ -145,7 +147,9 @@ class FilamentServiceProvider extends ServiceProvider }); EditAction::configureUsing(function (EditAction $action) { - $action->tooltip(trans('filament-actions::edit.single.label')); + $action->icon(TablerIcon::Pencil); + $action->tooltip(fn () => $action->getLabel()); + $action->hiddenLabel(); $action->iconSize(IconSize::Large); if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { @@ -155,7 +159,9 @@ class FilamentServiceProvider extends ServiceProvider }); ViewAction::configureUsing(function (ViewAction $action) { - $action->tooltip(trans('filament-actions::view.single.label')); + $action->icon(TablerIcon::Eye); + $action->tooltip(fn () => $action->getLabel()); + $action->hiddenLabel(); $action->iconSize(IconSize::Large); if (user()?->getCustomization(CustomizationKey::ButtonStyle)) { @@ -175,6 +181,7 @@ class FilamentServiceProvider extends ServiceProvider 'disable_oauth_', 'enable_captcha_', 'disable_captcha_', + 'oauth_', 'db_', // dashboard 'fm_', // file manager 'hint_', // hint actions diff --git a/lang/en/admin/webhook.php b/lang/en/admin/webhook.php index 69eff348b..66586c6b4 100644 --- a/lang/en/admin/webhook.php +++ b/lang/en/admin/webhook.php @@ -9,8 +9,7 @@ return [ 'no_webhooks' => 'No Webhooks', 'help' => 'Help', 'help_text' => 'You have to wrap variable name in between {{ }} for example if you want to get the name from the api you can use {{name}}.', - 'test_now' => 'Test Now', - 'test_now_help' => 'This will fire a `created: Server` event', + 'test_now' => 'Test now', 'table' => [ 'description' => 'Description', 'endpoint' => 'Endpoint',