Update PWA assets and enhance UI components for improved user experience

- Replaced outdated favicon and app icons with new PNG assets for better scalability and visual quality.
- Updated index.html and manifest.json to reflect new icon paths and improve PWA support.
- Added a script in package.json to generate PWA icons automatically.
- Enhanced AppLauncherOverlay.vue with a refresh button for better user interaction.
- Improved SplashScreen.vue with new transition effects for a more engaging user experience.
This commit is contained in:
Dorian
2026-02-18 10:10:12 +00:00
parent d6ecf5ea2f
commit e6fb1d20be
17 changed files with 790 additions and 145 deletions

View File

@@ -22,6 +22,23 @@
</svg>
</div>
<span class="flex-1 truncate text-sm font-medium text-white/90">{{ store.title || 'App' }}</span>
<button
type="button"
class="flex items-center justify-center w-9 h-9 rounded-lg hover:bg-white/15 text-white/70 hover:text-white transition-colors disabled:opacity-70"
aria-label="Refresh"
:disabled="isRefreshing"
@click="refreshIframe"
>
<svg
class="w-5 h-5 transition-transform duration-300"
:class="{ 'animate-spin': isRefreshing }"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" />
</svg>
</button>
<button
ref="closeBtnRef"
type="button"
@@ -41,10 +58,11 @@
<iframe
ref="iframeRef"
v-if="store.url"
:key="iframeRefreshKey"
:src="store.url"
class="absolute inset-0 w-full h-full border-0 iframe-scrollbar-hide"
title="App content"
@load="injectScrollbarHideIfSameOrigin"
@load="onIframeLoad"
/>
</div>
</div>
@@ -60,6 +78,18 @@ import { useAppLauncherStore } from '@/stores/appLauncher'
const store = useAppLauncherStore()
const closeBtnRef = ref<HTMLButtonElement | null>(null)
const iframeRef = ref<HTMLIFrameElement | null>(null)
const iframeRefreshKey = ref(0)
const isRefreshing = ref(false)
function refreshIframe() {
isRefreshing.value = true
iframeRefreshKey.value++
}
function onIframeLoad() {
injectScrollbarHideIfSameOrigin()
isRefreshing.value = false
}
function injectScrollbarHideIfSameOrigin() {
try {
@@ -95,6 +125,8 @@ watch(
(open) => {
if (open) {
closeBtnRef.value?.focus()
} else {
isRefreshing.value = false
}
}
)