feat(ui): unify resource headings with responsive action menus

Add responsive overflow handling and dedicated action menus for application,
service, database, and server headings, while improving upgrade and email
settings flows and returning 404s for missing deployment environments.
This commit is contained in:
Andras Bacsai
2026-08-13 12:17:16 +02:00
parent 592b537c61
commit 5f3108b68d
37 changed files with 1155 additions and 733 deletions
+23 -8
View File
@@ -42,19 +42,34 @@ it('uses the branded input focus state for the server filter', function () {
->not->toContain('<x-reicon name="check"');
});
it('groups all desktop proxy controls in the server actions dropdown', function () {
it('lists desktop proxy controls inline and keeps Traefik and refresh in Advanced', function () {
$navbar = file_get_contents(resource_path('views/livewire/server/navbar.blade.php'));
$desktopActions = str($navbar)->after('id="server-desktop-actions"')->before('@endteleport')->toString();
$overflow = file_get_contents(resource_path('views/components/resource-heading-overflow.blade.php'));
$advanced = file_get_contents(resource_path('views/components/server/advanced.blade.php'));
$desktopActions = str($navbar)->after("@teleport('#resource-action-hud-slot')")->before('@endteleport')->toString();
expect($desktopActions)
->toContain('Actions')
->toContain('Traefik Dashboard')
->toContain('name="external-link" class="size-3! opacity-70"')
->toContain('class="flex size-4 shrink-0 items-center justify-center"')
->toContain('Restart Proxy')
->toContain('Stop Proxy')
->toContain('Start Proxy')
->toContain('Refresh Proxy Status')
->toContain('listbox-panel')
->toContain('<x-server.advanced')
->not->toContain('Traefik Dashboard')
->not->toContain('Refresh Proxy Status')
->not->toContain('resource-heading-overflow-separator')
->not->toContain('<x-modal-confirmation');
expect(strpos($desktopActions, '<x-server.advanced'))
->toBeLessThan(strpos($desktopActions, 'id="server-desktop-actions"'));
expect($advanced)
->toContain('Advanced')
->toContain('name="grid"')
->toContain('Traefik Dashboard')
->toContain('name="external-link" class="size-3! opacity-70"')
->toContain('class="flex size-4 shrink-0 items-center justify-center"')
->toContain('Refresh Proxy Status');
expect($overflow)
->toContain('Actions')
->toContain('listbox-panel');
});