Files

119 lines
6.3 KiB
Vue
Raw Permalink Normal View History

<template>
<footer id="contact" class="bg-white dark:bg-[#060a14] border-t border-slate-200/80 dark:border-slate-800/80 pt-16 pb-12 text-right">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-10 pb-12 border-b border-slate-100 dark:border-slate-800/80">
<div class="lg:col-span-3 space-y-3">
<h2 class="text-sm font-bold text-slate-900 dark:text-white">{{ footer.contactTitle }}</h2>
<ul class="space-y-3 text-xs text-slate-600 dark:text-slate-400 font-medium">
<li class="flex items-center gap-2">
<svg class="w-4 h-4 text-brand-600 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" /></svg>
<span>{{ settings.phone }}</span>
</li>
<li class="flex items-center gap-2">
<svg class="w-4 h-4 text-brand-600 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" /></svg>
<span>{{ settings.email }}</span>
</li>
<li class="flex items-center gap-2">
<svg class="w-4 h-4 text-brand-600 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" /><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" /></svg>
<span>{{ settings.address }}</span>
</li>
</ul>
</div>
<div class="lg:col-span-3 space-y-3">
<h2 class="text-sm font-bold text-slate-900 dark:text-white">{{ footer.productsTitle }}</h2>
<ul class="space-y-2 text-xs text-slate-600 dark:text-slate-400 font-medium">
<li v-for="link in footer.products" :key="link.label">
<a :href="resolveHref(link.href)" class="hover:text-brand-600 dark:hover:text-brand-400 transition-colors">{{ link.label }}</a>
</li>
</ul>
</div>
<div class="lg:col-span-2 space-y-3">
<h2 class="text-sm font-bold text-slate-900 dark:text-white">{{ footer.quickLinksTitle }}</h2>
<ul class="space-y-2 text-xs text-slate-600 dark:text-slate-400 font-medium">
<li v-for="link in footer.quickLinks" :key="link.label">
<a :href="resolveHref(link.href)" class="hover:text-brand-600 dark:hover:text-brand-400 transition-colors">{{ link.label }}</a>
</li>
</ul>
</div>
<div class="lg:col-span-4 space-y-4">
<div class="flex items-center gap-3">
<div class="flex items-center justify-center w-10 h-10 rounded-xl bg-gradient-to-br from-brand-600 to-sky-400 text-white">
<svg class="w-6 h-6" viewBox="0 0 32 32" fill="none" aria-hidden="true">
<path d="M6 22L12 8L16 15L20 8L26 22" stroke="white" stroke-width="3" stroke-linecap="round" />
</svg>
</div>
<div class="flex flex-col">
<span class="text-xl font-black text-slate-900 dark:text-white">{{ footer.brandTitle }}</span>
<span class="text-[9px] font-bold text-slate-400 tracking-wider">{{ footer.brandSubtitle }}</span>
</div>
</div>
<p class="text-xs text-slate-400 dark:text-slate-500 leading-relaxed font-normal">
<template v-for="(line, i) in footer.descriptionLines" :key="i">
<br v-if="i > 0">
{{ line }}
</template>
</p>
<div class="flex items-center gap-3 pt-2">
<a
v-for="social in socials"
:key="social.kind + social.url"
:href="social.url"
:aria-label="social.label"
:target="social.url.startsWith('http') ? '_blank' : undefined"
:rel="social.url.startsWith('http') ? 'noopener noreferrer' : undefined"
class="w-8 h-8 rounded-full bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300 hover:bg-brand-600 hover:text-white flex items-center justify-center transition-colors"
>
<SocialIcon :kind="social.kind" />
</a>
</div>
</div>
</div>
<div class="pt-8 flex flex-col sm:flex-row items-center justify-between text-xs text-slate-400 dark:text-slate-500 gap-4">
<div>{{ footer.copyright }}</div>
<div class="flex items-center gap-6">
<a
v-for="link in footer.legalLinks"
:key="link.label"
:href="resolveHref(link.href)"
class="hover:text-slate-600 dark:hover:text-slate-300 transition-colors"
>{{ link.label }}</a>
</div>
</div>
</div>
</footer>
</template>
<script setup lang="ts">
type SocialKind = "telegram" | "linkedin" | "instagram" | "link";
const DEFAULT_SOCIALS: Array<{ kind: SocialKind; label: string; url: string }> = [
{ kind: "telegram", label: "تلگرام", url: "#" },
{ kind: "linkedin", label: "لینکدین", url: "#" },
{ kind: "instagram", label: "اینستاگرام", url: "#" },
];
function detectKind(label: string, url: string): SocialKind {
const s = `${label} ${url}`.toLowerCase();
if (s.includes("t.me") || s.includes("telegram") || s.includes("تلگرام")) return "telegram";
if (s.includes("linkedin") || s.includes("لینکدین")) return "linkedin";
if (s.includes("instagram") || s.includes("اینستاگرام")) return "instagram";
return "link";
}
const { section, settings } = useSiteContent();
const footer = section("footer");
const resolveHref = useSectionHref();
const socials = computed(() => {
const list = settings.value.socials;
if (!list.length) return DEFAULT_SOCIALS;
return list.map((s) => ({ kind: detectKind(s.label, s.url), label: s.label, url: s.url }));
});
</script>