Normalize Iran city aliases to Asia/Tehran, harden the clock, and make settings timezone a safe select. Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
1.5 KiB
Vue
40 lines
1.5 KiB
Vue
<template>
|
|
<header class="fixed inset-x-0 top-0 z-50 border-b border-white/[0.06] bg-ink/70 backdrop-blur-md">
|
|
<div class="mx-auto flex max-w-[1500px] items-center justify-between px-6 py-4 md:px-10">
|
|
<NuxtLink to="/" class="font-display text-lg font-extrabold tracking-tight">
|
|
{{ brand }}<span class="align-super text-[0.55em] text-volt">®</span>
|
|
</NuxtLink>
|
|
<nav class="hidden items-center gap-6 text-sm text-ash md:flex">
|
|
<a href="#services" class="hover:text-volt">خدمات</a>
|
|
<a href="#work" class="hover:text-volt">نمونه کارها</a>
|
|
<a href="#team" class="hover:text-volt">تیم</a>
|
|
<NuxtLink to="/blog" class="hover:text-volt">بلاگ</NuxtLink>
|
|
<NuxtLink to="/gallery" class="hover:text-volt">گالری</NuxtLink>
|
|
<a href="#contact" class="text-bone hover:text-volt">تماس</a>
|
|
</nav>
|
|
<span class="text-xs text-ash tabular-nums" dir="ltr">{{ time }}</span>
|
|
</div>
|
|
</header>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { formatClock } from "~/utils/timezone";
|
|
|
|
const props = defineProps<{ brand?: string; timezone?: string }>();
|
|
const brand = computed(() => props.brand || "منتک");
|
|
const time = ref("");
|
|
|
|
onMounted(() => {
|
|
const tick = () => {
|
|
try {
|
|
time.value = formatClock(new Date(), props.timezone);
|
|
} catch {
|
|
time.value = "";
|
|
}
|
|
};
|
|
tick();
|
|
const id = setInterval(tick, 1000);
|
|
onUnmounted(() => clearInterval(id));
|
|
});
|
|
</script>
|