Files
vuelato/app/app.vue
Alejandro Martinez b8906efc80
Some checks failed
ci / ci (22, ubuntu-latest) (push) Has been cancelled
Initial commit: Vuelato - buscador de vuelos
Nuxt 4 + Supabase + Flightics API. Incluye búsqueda de vuelos,
inspiraciones, watchlist, tracking de precios y mapa interactivo.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 23:37:06 +02:00

113 lines
3.0 KiB
Vue

<script setup>
useHead({
meta: [
{ name: 'viewport', content: 'width=device-width, initial-scale=1' }
],
link: [
{ rel: 'icon', href: '/favicon.ico' }
],
htmlAttrs: {
lang: 'es'
}
})
useSeoMeta({
title: 'Vuelato - Busca vuelos baratos',
description: 'Buscador de vuelos con fechas flexibles'
})
const mobileMenu = ref(false)
const navLinks = [
{ to: '/search', label: 'Buscar', icon: 'i-lucide-search' },
{ to: '/explore', label: 'Explorar', icon: 'i-lucide-compass' },
{ to: '/multi-city', label: 'Multi-city', icon: 'i-lucide-route' },
{ to: '/tracking', label: 'Seguimiento', icon: 'i-lucide-bell' },
{ to: '/watchlist', label: 'Watchlist', icon: 'i-lucide-heart' }
]
</script>
<template>
<UApp>
<UHeader>
<template #left>
<NuxtLink to="/" class="font-bold text-lg">
Vuelato
</NuxtLink>
<nav class="hidden md:flex items-center gap-1 ml-4">
<UButton
v-for="link in navLinks"
:key="link.to"
:to="link.to"
:label="link.label"
variant="ghost"
color="neutral"
size="sm"
/>
</nav>
</template>
<template #right>
<AuthUserMenu />
<UColorModeButton />
<!-- Mobile menu button -->
<UButton
class="md:hidden"
:icon="mobileMenu ? 'i-lucide-x' : 'i-lucide-menu'"
color="neutral"
variant="ghost"
@click="mobileMenu = !mobileMenu"
/>
</template>
</UHeader>
<!-- Mobile nav -->
<Transition
enter-active-class="transition-all duration-200 ease-out"
enter-from-class="opacity-0 -translate-y-2"
enter-to-class="opacity-100 translate-y-0"
leave-active-class="transition-all duration-150 ease-in"
leave-from-class="opacity-100 translate-y-0"
leave-to-class="opacity-0 -translate-y-2"
>
<div v-if="mobileMenu" class="md:hidden border-b border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-950 px-4 py-3">
<nav class="flex flex-col gap-1">
<UButton
v-for="link in navLinks"
:key="link.to"
:to="link.to"
:label="link.label"
:icon="link.icon"
variant="ghost"
color="neutral"
block
class="justify-start"
@click="mobileMenu = false"
/>
</nav>
</div>
</Transition>
<UMain>
<NuxtPage />
</UMain>
<USeparator />
<UFooter>
<template #left>
<p class="text-sm text-muted">
Vuelato &copy; {{ new Date().getFullYear() }}
</p>
</template>
<template #right>
<div class="flex gap-3 text-sm text-muted">
<NuxtLink to="/search">Buscar</NuxtLink>
<NuxtLink to="/explore">Explorar</NuxtLink>
<NuxtLink to="/multi-city">Multi-city</NuxtLink>
</div>
</template>
</UFooter>
</UApp>
</template>