Merge remote-tracking branch 'origin/main' into charles/ex-im-servers

This commit is contained in:
notCharles
2026-01-31 14:53:19 -05:00
86 changed files with 839 additions and 824 deletions

View File

@@ -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,
};
}

View File

@@ -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'),
];

View File

@@ -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(),
]);
}
}

View File

@@ -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']),
];

View File

@@ -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),

View File

@@ -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,10 @@ 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(),
])
->emptyStateIcon(TablerIcon::Key)
->emptyStateDescription('')

View File

@@ -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),
];
}

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [
CreateAction::make()
->iconButton()->iconSize(IconSize::ExtraLarge)
->icon(TablerIcon::FilePlus),
];
}
}

View File

@@ -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,11 @@ class DatabaseHostResource extends Resource
->hidden(fn ($record) => static::getEditAuthorizationResponse($record)->allowed()),
EditAction::make(),
])
->groupedBulkActions([
DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->emptyStateIcon(TablerIcon::Database)
->emptyStateDescription('')

View File

@@ -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),
];
}

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [
CreateAction::make()
->iconButton()->iconSize(IconSize::ExtraLarge)
->icon(TablerIcon::DatabasePlus),
];
}
}

View File

@@ -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(),
];
}
}

View File

@@ -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(),
]);
}
}

View File

@@ -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),
];
}

View File

@@ -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),
];
}

View File

@@ -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,52 @@ 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(),
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 +136,4 @@ class ListEggs extends ListRecords
->model(Egg::class),
]);
}
/** @return array<Action|ActionGroup>
* @throws Exception
*/
protected function getDefaultHeaderActions(): array
{
return [
ImportEggAction::make()
->multiple(),
CreateAction::make()
->icon(TablerIcon::FilePlus)
->iconButton()->iconSize(IconSize::ExtraLarge),
];
}
}

View File

@@ -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,11 @@ class MountResource extends Resource
->hidden(fn ($record) => static::getEditAuthorizationResponse($record)->allowed()),
EditAction::make(),
])
->groupedBulkActions([
DeleteBulkAction::make(),
->toolbarActions([
CreateAction::make(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->emptyStateIcon(TablerIcon::LayersLinked)
->emptyStateDescription('')

View File

@@ -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),
];
}

View File

@@ -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),
];
}

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [
CreateAction::make()
->iconButton()->iconSize(IconSize::ExtraLarge)
->icon(TablerIcon::FilePlus),
];
}
}

View File

@@ -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(),
];
}
}

View File

@@ -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'
<x-filament::icon-button
type="submit"
iconSize="xl"
icon="tabler-file-plus"
icon="tabler-plus"
tooltip="{{ trans('admin/node.create') }}"
>
{{ trans('admin/node.create') }}
</x-filament::icon-button>

View File

@@ -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),
];
}

View File

@@ -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,9 @@ class ListNodes extends ListRecords
->recordActions([
EditAction::make(),
])
->toolbarActions([
CreateAction::make(),
])
->emptyStateIcon(TablerIcon::Server2)
->emptyStateDescription('')
->emptyStateHeading(trans('admin/node.no_nodes'))
@@ -74,14 +74,4 @@ class ListNodes extends ListRecords
->model(Node::class),
]);
}
/** @return array<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [
CreateAction::make()
->iconButton()->iconSize(IconSize::ExtraLarge)
->icon(TablerIcon::FilePlus),
];
}
}

View File

@@ -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 () {

View File

@@ -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()

View File

@@ -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),
];
}

View File

@@ -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),
];
}

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [
CreateAction::make()
->icon(TablerIcon::FilePlus)
->iconButton()->iconSize(IconSize::ExtraLarge),
];
}
}

View File

@@ -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(),
];
}
}

View File

@@ -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,13 @@ 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(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->checkIfRecordIsSelectableUsing(fn (Role $role) => !$role->isRootAdmin() && $role->users_count <= 0);
}
/**

View File

@@ -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'
<x-filament::button
<x-filament::icon-button
type="submit"
size="sm"
iconSize="xl"
icon="tabler-plus"
tooltip="{{ trans('admin/server.create') }}"
>
{{ trans('admin/server.create') }}
</x-filament::button>
</x-filament::icon-button>
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'));
@@ -255,7 +258,7 @@ class CreateServer extends CreateRecord
->ip()
->live()
->hintAction(
Action::make('refresh')
Action::make('hint_refresh')
->iconButton()
->icon(TablerIcon::Refresh)
->tooltip(trans('admin/node.refresh'))

View File

@@ -58,7 +58,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;
@@ -123,8 +122,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([
@@ -261,7 +260,8 @@ class EditServer extends EditRecord
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'));
@@ -730,7 +730,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']);
@@ -797,7 +797,7 @@ class EditServer extends EditRecord
})
->selectablePlaceholder(false)
->columnSpanFull()
->hintAction(PreviewStartupAction::make('preview')),
->hintAction(PreviewStartupAction::make('hint_preview')),
Textarea::make('startup')
->hiddenLabel()
@@ -864,7 +864,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())
@@ -915,7 +915,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())
@@ -971,7 +971,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'))
@@ -1019,7 +1019,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()
@@ -1112,7 +1112,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()
@@ -1135,8 +1136,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'))
@@ -1155,12 +1155,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),
];

View File

@@ -10,11 +10,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;
@@ -93,15 +91,16 @@ 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(),
])
->searchable()
->emptyStateIcon(TablerIcon::BrandDocker)
->emptyStateDescription('')

View File

@@ -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]);

View File

@@ -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);

View File

@@ -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),
];
}

View File

@@ -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),
];
}

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [
CreateAction::make()
->iconButton()->iconSize(IconSize::ExtraLarge)
->icon(TablerIcon::UserPlus),
];
}
}

View File

@@ -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(),
];
}
}

View File

@@ -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)

View File

@@ -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),
];
}

View File

@@ -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'))
->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')),
$this->getSaveFormAction()->formId('form')
->iconButton()->iconSize(IconSize::ExtraLarge)
->icon(TablerIcon::TestPipe),
Action::make('save')
->hiddenLabel()
->action('save')
->keyBindings(['mod+s'])
->tooltip(trans('filament-panels::resources/pages/edit-record.form.actions.save.label'))
->icon(TablerIcon::DeviceFloppy),
];
}

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [
CreateAction::make()
->iconButton()->iconSize(IconSize::ExtraLarge)
->icon(TablerIcon::FilePlus),
];
}
}

View File

@@ -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(),
];
}
}

View File

@@ -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,11 @@ 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(),
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
])
->emptyStateIcon(TablerIcon::Webhook)
->emptyStateDescription('')
@@ -145,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}}',
])),

View File

@@ -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),

View File

@@ -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),

View File

@@ -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()),

View File

@@ -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)

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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(),

View File

@@ -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'));

View File

@@ -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'));

View File

@@ -12,7 +12,7 @@ class PreviewStartupAction extends Action
{
public static function getDefaultName(): ?string
{
return 'preview';
return 'hint_preview';
}
protected function setUp(): void

View File

@@ -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);

View File

@@ -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();

View File

@@ -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();

View File

@@ -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);

View File

@@ -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)
@@ -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))

View File

@@ -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))

View File

@@ -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'))

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [];
}
public function getBreadcrumbs(): array
{
return [];

View File

@@ -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'] ?? ''));

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [];
}
public function getBreadcrumbs(): array
{
return [];

View File

@@ -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)

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [];
}
public function getBreadcrumbs(): array
{
return [];

View File

@@ -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)

View File

@@ -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']);
}
}

View File

@@ -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')),
];

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [];
}
public function getBreadcrumbs(): array
{
return [];

View File

@@ -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')),
];

View File

@@ -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')),

View File

@@ -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<Action|ActionGroup> */
protected function getDefaultHeaderActions(): array
{
return [];
}
public function getBreadcrumbs(): array
{
return [];

View File

@@ -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)

View File

@@ -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()

View File

@@ -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()

View File

@@ -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,122 @@ 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(fn () => $action->getLabel());
$action->iconSize(IconSize::Large);
}));
Repeater::configureUsing(fn (Repeater $repeater) => $repeater->deleteAction(function (Action $action) {
$action->tooltip(fn () => $action->getLabel());
$action->iconSize(IconSize::Large);
}));
ShowPasswordAction::configureUsing(function (ShowPasswordAction $action) {
$action->tooltip(fn () => $action->getLabel());
$action->iconSize(IconSize::Large);
});
HidePasswordAction::configureUsing(function (HidePasswordAction $action) {
$action->tooltip(fn () => $action->getLabel());
$action->iconSize(IconSize::Large);
});
CopyAction::configureUsing(function (CopyAction $action) {
$action->tooltip(fn () => $action->getLabel());
$action->iconSize(IconSize::Large);
});
DeleteAction::configureUsing(function (DeleteAction $action) {
$action->icon(TablerIcon::Trash);
$action->tooltip(fn () => $action->getLabel());
$action->hiddenLabel();
$action->iconSize(IconSize::Large);
if (user()?->getCustomization(CustomizationKey::ButtonStyle)) {
$action->iconButton();
$action->iconSize(IconSize::ExtraLarge);
}
});
CreateAction::configureUsing(function (CreateAction $action) {
$action->icon(TablerIcon::Plus);
$action->tooltip(fn () => $action->getLabel());
$action->hiddenLabel();
$action->iconSize(IconSize::Large);
if (user()?->getCustomization(CustomizationKey::ButtonStyle)) {
$action->iconButton();
$action->iconSize(IconSize::ExtraLarge);
}
});
EditAction::configureUsing(function (EditAction $action) {
$action->icon(TablerIcon::Pencil);
$action->tooltip(fn () => $action->getLabel());
$action->hiddenLabel();
$action->iconSize(IconSize::Large);
if (user()?->getCustomization(CustomizationKey::ButtonStyle)) {
$action->iconButton();
$action->iconSize(IconSize::ExtraLarge);
}
});
ViewAction::configureUsing(function (ViewAction $action) {
$action->icon(TablerIcon::Eye);
$action->tooltip(fn () => $action->getLabel());
$action->hiddenLabel();
$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_',
'oauth_',
'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,

View File

@@ -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",

632
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -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',

View File

@@ -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',

View File

@@ -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',

View File

@@ -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 @@
},
}"
>
<x-filament::icon-button
iconSize="xl"
icon="tabler-upload"
color="success"
tooltip="{{ trans('server/file.actions.upload.title') }}"
@click="triggerBrowse">
</x-filament::icon-button>
{{ $this->fileUploadAction }}
<x-filament-actions::modals />
<input type="file" x-ref="fileInput" class="hidden" multiple @change="handleFileSelect">
<div
x-show="isUploading"

View File

@@ -211,17 +211,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();
}
@@ -248,7 +248,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.error')) }}')
.danger()
.send();
this.isUploading = false;