records(fn () => $this->logs) ->columns([ TextColumn::make('time') ->label(__('Time')) ->fontFamily('mono') ->sortable(), TextColumn::make('jail') ->label(__('Jail')) ->badge() ->color('gray'), TextColumn::make('action') ->label(__('Action')) ->badge() ->color(fn (string $state): string => match (strtolower($state)) { 'ban' => 'danger', 'unban' => 'success', 'found' => 'warning', default => 'gray', }), TextColumn::make('ip') ->label(__('IP')) ->fontFamily('mono') ->copyable() ->placeholder(__('-')), TextColumn::make('message') ->label(__('Message')) ->wrap(), ]) ->emptyStateHeading(__('No log entries')) ->emptyStateDescription(__('Fail2ban logs will appear here once activity is detected.')) ->striped(); } public function render() { return $this->getTable()->render(); } }