feat: mobile UI overhaul — iPhone-style app grid, icon-only tab bar, fullscreen app sessions

- Add AppIconGrid: 4-column swipeable icon grid with page dots for My Apps on mobile
- Tab bar: remove text labels, square icon-only buttons (w-14 h-14), doubled padding
- Hide tab bar and top context tabs when app session is open
- App session header hidden on mobile, replaced with floating glass close button
- App sessions now render fullscreen on mobile without nav chrome

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-30 21:03:00 +01:00
co-authored by Claude Opus 4.6
parent 7288bff6e0
commit 6bd515cb82
6 changed files with 357 additions and 15 deletions
+11 -2
View File
@@ -91,8 +91,16 @@
<p class="text-white/70">{{ t('apps.noResults', { query: searchQuery }) }}</p>
</div>
<!-- Apps Grid -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 pb-6">
<!-- Mobile: iPhone-style icon grid -->
<div class="md:hidden">
<AppIconGrid
:apps="filteredPackageEntries as [string, PackageDataEntry][]"
@go-to-app="goToApp"
/>
</div>
<!-- Desktop: Card grid -->
<div class="hidden md:grid grid-cols-2 lg:grid-cols-3 gap-4 pb-6">
<AppCard
v-for="([id, pkg], index) in filteredPackageEntries"
:key="id"
@@ -147,6 +155,7 @@ import { useServerStore } from '@/stores/server'
import { useAppLauncherStore } from '@/stores/appLauncher'
import type { PackageDataEntry } from '@/types/api'
import AppCard from './apps/AppCard.vue'
import AppIconGrid from './apps/AppIconGrid.vue'
import AppsUninstallModal from './apps/AppsUninstallModal.vue'
import { useAppsActions } from './apps/useAppsActions'
import {