feat(ui): polish email modal, search loading, and volume tables

Move profile email change into a modal with Alpine focus/close handling,
show a loading overlay during command-palette navigation, and adjust
volumes/config-diff grids plus related service/storage UI. Cover with
feature tests for search, profile, storage, and domains.
This commit is contained in:
Andras Bacsai
2026-08-05 14:07:19 +02:00
parent a7a06aa6c8
commit 0312cc8ffb
18 changed files with 236 additions and 109 deletions
@@ -101,13 +101,15 @@ it('renders volumes as a data table with shared column headers', function () {
->toContain('Volume Name')
->toContain('Source Path')
->toContain('Destination Path')
->toContain('volumes-col-backup')
->toContain('supportsPreviewSuffix')
->toContain('openBackupModal')
->toContain('data-table-row')
->toContain('volumes-mobile-label')
->toContain('table-badge-success')
->not->toContain('table-badge table-badge-success')
->not->toContain('livewire:project.shared.storages.show')
->not->toContain('x-status-badge');
->not->toContain('x-status-badge')
->not->toContain('Service volume mounts are read-only here.');
// Show remains available for isolated embeds/tests but is no longer nested from All.
expect($showView)
@@ -118,7 +120,16 @@ it('renders volumes as a data table with shared column headers', function () {
expect($storageView)
->toContain('Str::headline($resource->name)')
->toContain(':flush="true"')
->toContain('storage-service-');
->toContain("'storage-service-'.\$resource->uuid");
$serviceConfigurationView = file_get_contents(resource_path('views/livewire/project/service/configuration.blade.php'));
expect($serviceConfigurationView)
->toContain('storageSections')
->toContain('menu-subitem')
->toContain('scrollToSettingsSection')
->toContain('Service volume mounts are read-only here.')
->toContain("'storage-service-'.\$resource->uuid");
$css = file_get_contents(resource_path('css/app.css'));
@@ -131,6 +142,8 @@ it('renders volumes as a data table with shared column headers', function () {
->toContain('@media (max-width: 768px)')
->toContain('.table-badge-success');
expect($css)->toContain('17.5rem');
// Settings form labels are 13px (not Tailwind text-sm 14px).
expect($css)
->toMatch('/\.application-settings-form label\s*\{[^}]*font-size:\s*13px/s');