Added Support and Analytics for Release

This commit is contained in:
2026-07-10 21:59:35 +10:00
parent d765161b9a
commit 85eeba982f
24 changed files with 673 additions and 320 deletions
@@ -35,17 +35,36 @@ onUnmounted(() => document.removeEventListener('click', handleClickOutside))
<!-- Desktop nav -->
<nav class="nav-desktop">
<template v-if="!page.props.auth?.user">
<Link :href="route('login')" class="nav-link">Log In</Link>
<Link :href="route('register')" class="nav-link nav-link--highlight">Register</Link>
<Link :href="route('login')" class="nav-link">
<i class="mdi mdi-login" aria-hidden="true" />
Log In
</Link>
<Link :href="route('register')" class="nav-link nav-link--highlight">
<i class="mdi mdi-account-plus" aria-hidden="true" />
Register
</Link>
</template>
<template v-else>
<Link :href="route('flights.add')" class="nav-link">Add Flight</Link>
<Link :href="route('profile.view', { user: page.props.auth?.user.name })" class="nav-link">Profile</Link>
<Link :href="route('feed')" class="nav-link">Feed</Link>
<Link v-if="page.props.auth.roles.includes('admin')" :href="route('admin.dashboard')" class="nav-link">Admin</Link>
<Link :href="route('flights.add')" class="nav-link">
<i class="mdi mdi-airplane-plus" aria-hidden="true" />
Add Flight
</Link>
<Link :href="route('profile.view', { user: page.props.auth?.user.name })" class="nav-link">
<i class="mdi mdi-account" aria-hidden="true" />
Profile
</Link>
<Link :href="route('feed')" class="nav-link">
<i class="mdi mdi-timeline-text" aria-hidden="true" />
Feed
</Link>
<Link v-if="page.props.auth.roles.includes('admin')" :href="route('admin.dashboard')" class="nav-link">
<i class="mdi mdi-shield-account" aria-hidden="true" />
Admin
</Link>
<div class="dropdown" ref="dropdownRef">
<button class="nav-link dropdown-trigger" @click.stop="dropdownOpen = !dropdownOpen">
<i class="mdi mdi-account-circle" aria-hidden="true" />
{{ page.props.auth.user.name }}
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
@@ -53,10 +72,24 @@ onUnmounted(() => document.removeEventListener('click', handleClickOutside))
</svg>
</button>
<div v-if="dropdownOpen" class="dropdown-menu">
<Link :href="route('import.fr24')" class="dropdown-item">Import from FR24</Link>
<Link :href="route('user.settings')" class="dropdown-item">Settings</Link>
<Link :href="route('import.fr24')" class="dropdown-item">
<i class="mdi mdi-cloud-download" aria-hidden="true" />
Import from FR24
</Link>
<Link :href="route('user.settings')" class="dropdown-item">
<i class="mdi mdi-cog" aria-hidden="true" />
Settings
</Link>
<div class="dropdown-divider" />
<button class="dropdown-item dropdown-item--danger" @click="logout">Log Out</button>
<Link :href="route('support')" class="dropdown-item">
<i class="mdi mdi-lifebuoy" aria-hidden="true" />
Support
</Link>
<div class="dropdown-divider" />
<button class="dropdown-item dropdown-item--danger" @click="logout">
<i class="mdi mdi-logout" aria-hidden="true" />
Log Out
</button>
</div>
</div>
</template>
@@ -71,18 +104,47 @@ onUnmounted(() => document.removeEventListener('click', handleClickOutside))
<Transition name="slide">
<nav v-if="menuOpen" class="nav-mobile" @click.stop>
<template v-if="!page.props.auth?.user">
<Link :href="route('login')" class="nav-link" @click="menuOpen = false">Log In</Link>
<Link :href="route('register')" class="nav-link nav-link--highlight" @click="menuOpen = false">Register</Link>
<Link :href="route('login')" class="nav-link" @click="menuOpen = false">
<i class="mdi mdi-login" aria-hidden="true" />
Log In
</Link>
<Link :href="route('register')" class="nav-link nav-link--highlight" @click="menuOpen = false">
<i class="mdi mdi-account-plus" aria-hidden="true" />
Register
</Link>
</template>
<template v-else>
<span class="nav-greeting">Welcome, {{ page.props.auth.user.name }}</span>
<Link :href="route('flights.add')" class="nav-link" @click="menuOpen = false">Add Flight</Link>
<Link :href="route('profile.view', { user: page.props.auth.user.name })" class="nav-link" @click="menuOpen = false">Profile</Link>
<Link :href="route('feed')" class="nav-link nav-link" @click="menuOpen = false">Feed</Link>
<Link :href="route('import.fr24')" class="nav-link" @click="menuOpen = false">Import from FR24</Link>
<Link :href="route('user.settings')" class="nav-link" @click="menuOpen = false">Settings</Link>
<Link :href="route('flights.add')" class="nav-link" @click="menuOpen = false">
<i class="mdi mdi-airplane-plus" aria-hidden="true" />
Add Flight
</Link>
<Link :href="route('profile.view', { user: page.props.auth.user.name })" class="nav-link" @click="menuOpen = false">
<i class="mdi mdi-account" aria-hidden="true" />
Profile
</Link>
<Link :href="route('feed')" class="nav-link nav-link" @click="menuOpen = false">
<i class="mdi mdi-timeline-text" aria-hidden="true" />
Feed
</Link>
<Link :href="route('import.fr24')" class="nav-link" @click="menuOpen = false">
<i class="mdi mdi-cloud-download" aria-hidden="true" />
Import from FR24
</Link>
<Link :href="route('user.settings')" class="nav-link" @click="menuOpen = false">
<i class="mdi mdi-cog" aria-hidden="true" />
Settings
</Link>
<div class="dropdown-divider" />
<button class="nav-link nav-link--danger" @click="logout">Log Out</button>
<Link :href="route('support')" class="dropdown-item">
<i class="mdi mdi-lifebuoy" aria-hidden="true" />
Support
</Link>
<div class="dropdown-divider" />
<button class="nav-link nav-link--danger" @click="logout">
<i class="mdi mdi-logout" aria-hidden="true" />
Log Out
</button>
</template>
</nav>
</Transition>
@@ -121,7 +183,7 @@ header {
.nav-link {
display: flex;
align-items: center;
gap: 0.3em;
gap: 0.4em;
height: 100%;
padding: 0.3em 0.75em;
font-size: 0.875rem;
@@ -136,6 +198,12 @@ header {
transition: color 0.15s ease, background 0.15s ease;
}
.nav-link .mdi {
font-size: 1rem;
line-height: 1;
opacity: 0.8;
}
.nav-link:visited {
color: var(--text);
}
@@ -193,7 +261,9 @@ header {
}
.dropdown-item {
display: block;
display: flex;
align-items: center;
gap: 0.5em;
width: 100%;
padding: 0.4em 0.75em;
font-size: 0.875rem;
@@ -209,6 +279,12 @@ header {
transition: color 0.15s ease, background 0.15s ease;
}
.dropdown-item .mdi {
font-size: 1rem;
line-height: 1;
opacity: 0.8;
}
.dropdown-item:hover {
color: var(--accent);
background: rgba(56, 189, 248, 0.07);