diff --git a/.gitignore b/.gitignore
index f9f80d8..699f948 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,4 @@ yarn-error.log
CLAUDE.md
/jabali-panel_*.deb
/jabali-deps_*.deb
+.git-credentials
diff --git a/VERSION b/VERSION
index 6f42e4a..b899d52 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-VERSION=0.9-rc39
+VERSION=0.9-rc40
diff --git a/app/Filament/Jabali/Pages/Backups.php b/app/Filament/Jabali/Pages/Backups.php
index b1d0907..0f72c06 100644
--- a/app/Filament/Jabali/Pages/Backups.php
+++ b/app/Filament/Jabali/Pages/Backups.php
@@ -29,7 +29,8 @@ use Filament\Pages\Page;
use Filament\Schemas\Components\Actions as FormActions;
use Filament\Schemas\Components\Grid;
use Filament\Schemas\Components\Section;
-use Filament\Schemas\Components\View;
+use Filament\Schemas\Components\Tabs;
+use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
@@ -115,7 +116,18 @@ class Backups extends Page implements HasActions, HasForms, HasTable
->description(__('Create and manage backups of your account data. Backups include your websites, databases, and mailboxes. You can restore from any backup at any time.'))
->icon('heroicon-o-information-circle')
->iconColor('info'),
- View::make('filament.jabali.components.backup-tabs-nav'),
+ Tabs::make(__('Backup Sections'))
+ ->livewireProperty('activeTab')
+ ->tabs([
+ 'local' => Tab::make(__('My Backups'))
+ ->icon('heroicon-o-archive-box'),
+ 'remote' => Tab::make(__('Server Backups'))
+ ->icon('heroicon-o-cloud'),
+ 'destinations' => Tab::make(__('SFTP Destinations'))
+ ->icon('heroicon-o-server-stack'),
+ 'history' => Tab::make(__('Restore History'))
+ ->icon('heroicon-o-arrow-path'),
+ ]),
]);
}
diff --git a/app/Filament/Jabali/Pages/Email.php b/app/Filament/Jabali/Pages/Email.php
index 0972555..6105b81 100644
--- a/app/Filament/Jabali/Pages/Email.php
+++ b/app/Filament/Jabali/Pages/Email.php
@@ -29,7 +29,8 @@ use Filament\Infolists\Components\TextEntry;
use Filament\Notifications\Notification;
use Filament\Pages\Page;
use Filament\Schemas\Components\Section;
-use Filament\Schemas\Components\View;
+use Filament\Schemas\Components\Tabs;
+use Filament\Schemas\Components\Tabs\Tab;
use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Concerns\InteractsWithTable;
@@ -134,7 +135,22 @@ class Email extends Page implements HasActions, HasForms, HasTable
public function emailForm(Schema $schema): Schema
{
return $schema->schema([
- View::make('filament.jabali.components.email-tabs-nav'),
+ Tabs::make(__('Email Sections'))
+ ->livewireProperty('activeTab')
+ ->tabs([
+ 'mailboxes' => Tab::make(__('Mailboxes'))
+ ->icon('heroicon-o-envelope'),
+ 'forwarders' => Tab::make(__('Forwarders'))
+ ->icon('heroicon-o-arrow-right'),
+ 'autoresponders' => Tab::make(__('Autoresponders'))
+ ->icon('heroicon-o-clock'),
+ 'catchall' => Tab::make(__('Catch-All'))
+ ->icon('heroicon-o-inbox-stack'),
+ 'logs' => Tab::make(__('Logs'))
+ ->icon('heroicon-o-document-text'),
+ 'spam' => Tab::make(__('Spam Settings'))
+ ->icon('heroicon-o-shield-check'),
+ ]),
]);
}
diff --git a/app/Filament/Jabali/Pages/Logs.php b/app/Filament/Jabali/Pages/Logs.php
index 89d7f4d..fb8d953 100644
--- a/app/Filament/Jabali/Pages/Logs.php
+++ b/app/Filament/Jabali/Pages/Logs.php
@@ -14,6 +14,9 @@ use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Filament\Pages\Page;
+use Filament\Schemas\Components\Tabs;
+use Filament\Schemas\Components\Tabs\Tab;
+use Filament\Schemas\Schema;
use Illuminate\Contracts\Support\Htmlable;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\Url;
@@ -90,6 +93,27 @@ class Logs extends Page implements HasActions, HasForms
$this->activeTab = $this->normalizeTab($tab);
}
+ protected function getForms(): array
+ {
+ return ['tabsForm'];
+ }
+
+ public function tabsForm(Schema $schema): Schema
+ {
+ return $schema->schema([
+ Tabs::make(__('Log Sections'))
+ ->livewireProperty('activeTab')
+ ->tabs([
+ 'logs' => Tab::make(__('Logs'))
+ ->icon('heroicon-o-document-text'),
+ 'stats' => Tab::make(__('Statistics'))
+ ->icon('heroicon-o-chart-bar'),
+ 'activity' => Tab::make(__('Activity Log'))
+ ->icon('heroicon-o-clipboard-document-list'),
+ ]),
+ ]);
+ }
+
protected function normalizeTab(?string $tab): string
{
return match ($tab) {
diff --git a/app/Filament/Jabali/Pages/PostgreSQL.php b/app/Filament/Jabali/Pages/PostgreSQL.php
index 3b1eb95..b5502d0 100644
--- a/app/Filament/Jabali/Pages/PostgreSQL.php
+++ b/app/Filament/Jabali/Pages/PostgreSQL.php
@@ -16,6 +16,9 @@ use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Filament\Pages\Page;
+use Filament\Schemas\Components\Tabs;
+use Filament\Schemas\Components\Tabs\Tab;
+use Filament\Schemas\Schema;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Concerns\InteractsWithTable;
use Filament\Tables\Contracts\HasTable;
@@ -71,6 +74,25 @@ class PostgreSQL extends Page implements HasActions, HasForms, HasTable
$this->resetTable();
}
+ protected function getForms(): array
+ {
+ return ['tabsForm'];
+ }
+
+ public function tabsForm(Schema $schema): Schema
+ {
+ return $schema->schema([
+ Tabs::make(__('PostgreSQL Sections'))
+ ->livewireProperty('activeTab')
+ ->tabs([
+ 'databases' => Tab::make(__('Databases'))
+ ->icon('heroicon-o-circle-stack'),
+ 'users' => Tab::make(__('Users'))
+ ->icon('heroicon-o-users'),
+ ]),
+ ]);
+ }
+
protected function normalizeTab(string $tab): string
{
return in_array($tab, ['databases', 'users'], true) ? $tab : 'databases';
diff --git a/install.sh b/install.sh
index 5efa05f..0155728 100755
--- a/install.sh
+++ b/install.sh
@@ -16,7 +16,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [[ -f "$SCRIPT_DIR/VERSION" ]]; then
JABALI_VERSION="$(sed -n 's/^VERSION=//p' "$SCRIPT_DIR/VERSION")"
fi
-JABALI_VERSION="${JABALI_VERSION:-0.9-rc39}"
+JABALI_VERSION="${JABALI_VERSION:-0.9-rc40}"
# Colors
RED='\033[0;31m'
diff --git a/resources/views/filament/jabali/components/backup-tabs-nav.blade.php b/resources/views/filament/jabali/components/backup-tabs-nav.blade.php
deleted file mode 100644
index 945849b..0000000
--- a/resources/views/filament/jabali/components/backup-tabs-nav.blade.php
+++ /dev/null
@@ -1,40 +0,0 @@
-@php
- $tabs = [
- 'local' => ['label' => __('My Backups'), 'icon' => 'heroicon-o-archive-box'],
- 'remote' => ['label' => __('Server Backups'), 'icon' => 'heroicon-o-cloud'],
- 'destinations' => ['label' => __('SFTP Destinations'), 'icon' => 'heroicon-o-server-stack'],
- 'history' => ['label' => __('Restore History'), 'icon' => 'heroicon-o-arrow-path'],
- ];
-@endphp
-
-
diff --git a/resources/views/filament/jabali/components/email-tabs-nav.blade.php b/resources/views/filament/jabali/components/email-tabs-nav.blade.php
deleted file mode 100644
index 5e3d97a..0000000
--- a/resources/views/filament/jabali/components/email-tabs-nav.blade.php
+++ /dev/null
@@ -1,42 +0,0 @@
-@php
- $tabs = [
- 'mailboxes' => ['label' => __('Mailboxes'), 'icon' => 'heroicon-o-envelope'],
- 'forwarders' => ['label' => __('Forwarders'), 'icon' => 'heroicon-o-arrow-right'],
- 'autoresponders' => ['label' => __('Autoresponders'), 'icon' => 'heroicon-o-clock'],
- 'catchall' => ['label' => __('Catch-All'), 'icon' => 'heroicon-o-inbox-stack'],
- 'logs' => ['label' => __('Logs'), 'icon' => 'heroicon-o-document-text'],
- 'spam' => ['label' => __('Spam Settings'), 'icon' => 'heroicon-o-shield-check'],
- ];
-@endphp
-
-
diff --git a/resources/views/filament/jabali/pages/logs.blade.php b/resources/views/filament/jabali/pages/logs.blade.php
index 0125145..819382b 100644
--- a/resources/views/filament/jabali/pages/logs.blade.php
+++ b/resources/views/filament/jabali/pages/logs.blade.php
@@ -1,43 +1,5 @@
- @php
- $tabs = [
- 'logs' => ['label' => __('Logs'), 'icon' => 'heroicon-o-document-text'],
- 'stats' => ['label' => __('Statistics'), 'icon' => 'heroicon-o-chart-bar'],
- 'activity' => ['label' => __('Activity Log'), 'icon' => 'heroicon-o-clipboard-document-list'],
- ];
- @endphp
-
-
+ {{ $this->tabsForm }}
@if(in_array($activeTab, ['logs', 'stats'], true))
@if(count($this->getDomainOptions()) > 0)
diff --git a/resources/views/filament/jabali/pages/postgresql.blade.php b/resources/views/filament/jabali/pages/postgresql.blade.php
index e96fc64..896e4eb 100644
--- a/resources/views/filament/jabali/pages/postgresql.blade.php
+++ b/resources/views/filament/jabali/pages/postgresql.blade.php
@@ -1,42 +1,5 @@
- @php
- $tabs = [
- 'databases' => ['label' => __('Databases'), 'icon' => 'heroicon-o-circle-stack'],
- 'users' => ['label' => __('Users'), 'icon' => 'heroicon-o-users'],
- ];
- @endphp
-
-
+ {{ $this->tabsForm }}
{{ $this->table }}