Files

825 lines
37 KiB
JavaScript

import { c as useSiteStore, V as VuesaxIcon_default, N as NuxtLink, ai as _plugin_vue_export_helper_default } from '../virtual/entry.mjs';
import { E as EASE, f as faNum } from './motion-BvlOLZ1k.mjs';
import { defineComponent, unref, withCtx, openBlock, createBlock, createCommentVNode, ref, computed, mergeProps, createVNode, createTextVNode, toDisplayString, watch, Fragment, renderList, useSSRContext } from 'vue';
import { p as publicAssetsURL } from '../routes/renderer.mjs';
import { ssrRenderAttrs, ssrRenderComponent, ssrRenderSlot, ssrRenderAttr, ssrInterpolate, ssrRenderStyle, ssrRenderClass, ssrRenderList } from 'vue/server-renderer';
import { defineStore } from 'pinia';
import { AnimatePresence, motion, useMotionValue, useSpring } from 'motion-v';
import 'vue-router';
import 'node:module';
import 'node:buffer';
import 'node:http';
import 'node:https';
import 'node:zlib';
import 'node:stream';
import 'node:util';
import 'node:url';
import 'node:net';
import 'node:fs';
import 'node:path';
import '../_/site.mjs';
import '../_/nitro.mjs';
import 'unhead/server';
import 'unhead/legacy';
import 'unhead/plugins';
import 'node:events';
import 'node:crypto';
import 'nostics';
import 'vue-bundle-renderer/runtime';
import 'devalue';
//#region app/stores/ui.ts
var useUiStore = defineStore("ui", {
state: () => ({
/** true once the preloader has finished */
ready: false,
/** mobile navigation overlay */
menuOpen: false
}),
actions: {
setReady() {
this.ready = true;
},
openMenu() {
this.menuOpen = true;
},
closeMenu() {
this.menuOpen = false;
}
}
});
//#endregion
//#region app/composables/useScrollY.ts
/** Reactive `window.scrollY > threshold`, evaluated after mount (passive listener). */
function useScrolledPast(threshold) {
return ref(false);
}
//#endregion
//#region app/components/layout/BackToTop.vue?vue&type=script&setup=true&lang.ts
var BackToTop_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
__name: "BackToTop",
__ssrInlineRender: true,
setup(__props) {
const show = useScrolledPast();
return (_ctx, _push, _parent, _attrs) => {
_push(ssrRenderComponent(unref(AnimatePresence), _attrs, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) {
if (unref(show)) _push(ssrRenderComponent(unref(motion).a, {
href: "#home",
"aria-label": "بازگشت به بالا",
initial: {
opacity: 0,
y: 24
},
animate: {
opacity: 1,
y: 0
},
exit: {
opacity: 0,
y: 24
},
class: "fixed bottom-6 left-6 z-[70] flex size-12 items-center justify-center rounded-full border border-line bg-panel/90 text-ink shadow-[0_10px_40px_rgba(0,0,0,0.5)] backdrop-blur transition-colors hover:border-accent hover:text-accent"
}, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) _push(ssrRenderComponent(VuesaxIcon_default, {
name: "arrow-up",
class: "size-5"
}, null, _parent, _scopeId));
else return [createVNode(VuesaxIcon_default, {
name: "arrow-up",
class: "size-5"
})];
}),
_: 1
}, _parent, _scopeId));
else _push(`<!---->`);
} else return [unref(show) ? (openBlock(), createBlock(unref(motion).a, {
key: 0,
href: "#home",
"aria-label": "بازگشت به بالا",
initial: {
opacity: 0,
y: 24
},
animate: {
opacity: 1,
y: 0
},
exit: {
opacity: 0,
y: 24
},
class: "fixed bottom-6 left-6 z-[70] flex size-12 items-center justify-center rounded-full border border-line bg-panel/90 text-ink shadow-[0_10px_40px_rgba(0,0,0,0.5)] backdrop-blur transition-colors hover:border-accent hover:text-accent"
}, {
default: withCtx(() => [createVNode(VuesaxIcon_default, {
name: "arrow-up",
class: "size-5"
})]),
_: 1
})) : createCommentVNode("", true)];
}),
_: 1
}, _parent));
};
}
});
//#endregion
//#region app/components/layout/BackToTop.vue
var _sfc_setup$6 = BackToTop_vue_vue_type_script_setup_true_lang_default.setup;
BackToTop_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/layout/BackToTop.vue");
return _sfc_setup$6 ? _sfc_setup$6(props, ctx) : void 0;
};
var BackToTop_default = Object.assign(BackToTop_vue_vue_type_script_setup_true_lang_default, { __name: "LayoutBackToTop" });
//#endregion
//#region app/components/layout/Cursor.vue?vue&type=script&setup=true&lang.ts
var Cursor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
__name: "Cursor",
__ssrInlineRender: true,
setup(__props) {
const x = useMotionValue(-100);
const y = useMotionValue(-100);
const sx = useSpring(x, {
stiffness: 550,
damping: 45,
mass: .4
});
const sy = useSpring(y, {
stiffness: 550,
damping: 45,
mass: .4
});
const hover = ref(false);
const visible = ref(false);
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(mergeProps({ class: "pointer-events-none fixed inset-0 z-[120] hidden [@media(pointer:fine)]:block" }, _attrs))}>`);
_push(ssrRenderComponent(unref(motion).div, {
style: {
x: unref(sx),
y: unref(sy)
},
class: "absolute -left-4 -top-4 size-8"
}, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) {
_push(ssrRenderComponent(unref(motion).div, {
animate: {
scale: unref(hover) ? 1.9 : 1,
opacity: unref(visible) ? 1 : 0,
rotate: unref(hover) ? 45 : 0
},
transition: {
type: "spring",
stiffness: 320,
damping: 24
},
class: "size-8 rounded-md border-2 border-accent/80"
}, null, _parent, _scopeId));
_push(`<div class="${ssrRenderClass(`absolute inset-0 m-auto size-1 rounded-full bg-accent transition-opacity duration-300 ${unref(visible) ? "opacity-100" : "opacity-0"}`)}"${_scopeId}></div>`);
} else return [createVNode(unref(motion).div, {
animate: {
scale: unref(hover) ? 1.9 : 1,
opacity: unref(visible) ? 1 : 0,
rotate: unref(hover) ? 45 : 0
},
transition: {
type: "spring",
stiffness: 320,
damping: 24
},
class: "size-8 rounded-md border-2 border-accent/80"
}, null, 8, ["animate"]), createVNode("div", { class: `absolute inset-0 m-auto size-1 rounded-full bg-accent transition-opacity duration-300 ${unref(visible) ? "opacity-100" : "opacity-0"}` }, null, 2)];
}),
_: 1
}, _parent));
_push(`</div>`);
};
}
});
//#endregion
//#region app/components/layout/Cursor.vue
var _sfc_setup$5 = Cursor_vue_vue_type_script_setup_true_lang_default.setup;
Cursor_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/layout/Cursor.vue");
return _sfc_setup$5 ? _sfc_setup$5(props, ctx) : void 0;
};
var Cursor_default = Object.assign(Cursor_vue_vue_type_script_setup_true_lang_default, { __name: "LayoutCursor" });
//#endregion
//#region \0virtual:public?%2Fimages%2Flogo.png
var _virtual_public__2Fimages_2Flogo_default = publicAssetsURL("/images/logo.png");
//#endregion
//#region app/components/ui/Logo.vue
var _sfc_main = {};
function _sfc_ssrRender(_ctx, _push, _parent, _attrs) {
_push(ssrRenderComponent(NuxtLink, mergeProps({
to: "/",
class: "flex items-center gap-3",
"aria-label": "ایمن پیشگامان"
}, _attrs), {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) _push(`<span class="flex size-10 items-center justify-center rounded-xl bg-white shadow-[0_0_28px_rgba(10,30,92,0.45)]"${_scopeId}><img${ssrRenderAttr("src", _virtual_public__2Fimages_2Flogo_default)} alt="ایمن پیشگامان" width="28" height="28" class="size-7 object-contain"${_scopeId}></span><span class="leading-tight"${_scopeId}><span class="block text-lg font-black"${_scopeId}>ایمن پیشگامان</span><span class="block font-mono text-[9px] tracking-[0.32em] text-muted"${_scopeId}> IMEN PISHGAMAN CO. </span></span>`);
else return [createVNode("span", { class: "flex size-10 items-center justify-center rounded-xl bg-white shadow-[0_0_28px_rgba(10,30,92,0.45)]" }, [createVNode("img", {
src: _virtual_public__2Fimages_2Flogo_default,
alt: "ایمن پیشگامان",
width: "28",
height: "28",
class: "size-7 object-contain"
})]), createVNode("span", { class: "leading-tight" }, [createVNode("span", { class: "block text-lg font-black" }, "ایمن پیشگامان"), createVNode("span", { class: "block font-mono text-[9px] tracking-[0.32em] text-muted" }, " IMEN PISHGAMAN CO. ")])];
}),
_: 1
}, _parent));
}
var _sfc_setup$4 = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/ui/Logo.vue");
return _sfc_setup$4 ? _sfc_setup$4(props, ctx) : void 0;
};
var Logo_default = /*#__PURE__*/ Object.assign(_plugin_vue_export_helper_default(_sfc_main, [["ssrRender", _sfc_ssrRender]]), { __name: "UiLogo" });
//#endregion
//#region app/components/layout/Footer.vue?vue&type=script&setup=true&lang.ts
var Footer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
__name: "Footer",
__ssrInlineRender: true,
setup(__props) {
const ALL_QUICK_LINKS = [
{
href: "/#home",
label: "خانه",
section: "hero"
},
{
href: "/#products",
label: "محصولات",
section: "productsIntro"
},
{
href: "/#about",
label: "درباره ما",
section: "about"
},
{
href: "/#services",
label: "خدمات",
section: "services"
},
{
href: "/#standards",
label: "استانداردها",
section: "standards"
},
{
href: "/#industries",
label: "صنایع",
section: "industries"
}
];
const SOCIAL_META = {
website: {
icon: "global",
label: "وب‌سایت"
},
telegram: {
icon: "send-2",
label: "تلگرام"
},
instagram: {
icon: "instagram",
label: "اینستاگرام"
},
linkedin: {
icon: "link",
label: "لینکدین"
},
whatsapp: {
icon: "messages-2",
label: "واتساپ"
},
bale: {
icon: "messages-2",
label: "بله"
},
eitaa: {
icon: "messages-2",
label: "ایتا"
},
aparat: {
icon: "video-play",
label: "آپارات"
},
youtube: {
icon: "video-play",
label: "یوتیوب"
},
email: {
icon: "sms",
label: "ایمیل"
},
phone: {
icon: "call",
label: "تماس"
}
};
const site = useSiteStore();
const footer = computed(() => site.sections.footer);
const settings = computed(() => site.settings);
const QUICK_LINKS = computed(() => ALL_QUICK_LINKS.filter((l) => site.sections?.[l.section]?.enabled !== false));
const PRODUCT_LINKS = computed(() => site.categories.map((c) => ({
label: c.name,
href: `/categories/${c.slug}`
})));
const SOCIALS = computed(() => settings.value.socials.map((s) => ({
...SOCIAL_META[s.type],
href: s.url,
external: /^https?:\/\//.test(s.url)
})));
return (_ctx, _push, _parent, _attrs) => {
const _component_NuxtLink = NuxtLink;
_push(`<footer${ssrRenderAttrs(mergeProps({ class: "relative overflow-hidden border-t border-line" }, _attrs))}><div class="hazard h-2.5"></div><div class="mx-auto max-w-[1480px] px-5 md:px-8"><div class="grid gap-12 py-16 md:grid-cols-12 md:py-20"><div class="md:col-span-5">`);
_push(ssrRenderComponent(Logo_default, null, null, _parent));
_push(`<p class="mt-6 max-w-sm text-sm leading-8 text-muted">${ssrInterpolate(unref(footer).about)}</p><div class="mt-7 flex gap-3"><!--[-->`);
ssrRenderList(unref(SOCIALS), (s) => {
_push(`<a${ssrRenderAttr("href", s.href)}${ssrRenderAttr("aria-label", s.label)}${ssrRenderAttr("target", s.external ? "_blank" : void 0)}${ssrRenderAttr("rel", s.external ? "noopener" : void 0)} class="flex size-10 items-center justify-center rounded-lg border border-line text-muted transition-all duration-300 hover:border-accent hover:bg-accent hover:text-bg">`);
_push(ssrRenderComponent(VuesaxIcon_default, {
name: s.icon,
class: "size-4"
}, null, _parent));
_push(`</a>`);
});
_push(`<!--]--></div></div><div class="md:col-span-2"><div class="font-mono text-xs tracking-[0.25em] text-accent">// دسترسی</div><ul class="mt-5 space-y-3"><!--[-->`);
ssrRenderList(unref(QUICK_LINKS), (l) => {
_push(`<li><a${ssrRenderAttr("href", l.href)} class="text-sm text-muted transition-colors hover:text-ink">${ssrInterpolate(l.label)}</a></li>`);
});
_push(`<!--]--></ul></div><div class="md:col-span-2"><div class="font-mono text-xs tracking-[0.25em] text-accent">// محصولات</div><ul class="mt-5 space-y-3"><!--[-->`);
ssrRenderList(unref(PRODUCT_LINKS), (p) => {
_push(`<li>`);
_push(ssrRenderComponent(_component_NuxtLink, {
to: p.href,
class: "text-sm text-muted transition-colors hover:text-ink"
}, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) _push(`${ssrInterpolate(p.label)}`);
else return [createTextVNode(toDisplayString(p.label), 1)];
}),
_: 2
}, _parent));
_push(`</li>`);
});
_push(`<!--]--></ul></div><div class="md:col-span-3"><div class="font-mono text-xs tracking-[0.25em] text-accent">// ارتباط</div><address class="mt-5 space-y-3 text-sm text-muted not-italic"><p class="leading-7">${ssrInterpolate(unref(settings).address.locality)}، ${ssrInterpolate(unref(settings).address.street)}</p><p class="font-mono tracking-wider" dir="ltr"><a${ssrRenderAttr("href", `tel:${unref(settings).phone}`)} class="transition-colors hover:text-ink">${ssrInterpolate(unref(settings).phoneDisplay)}</a></p><p class="font-mono tracking-wider" dir="ltr"><a${ssrRenderAttr("href", `mailto:${unref(settings).email}`)} class="transition-colors hover:text-ink">${ssrInterpolate(unref(settings).email)}</a></p><p class="pt-2 text-xs leading-6">${ssrInterpolate(unref(settings).workingHours)} `);
if (unref(footer).emergencyNote) _push(`<!--[--><br> ${ssrInterpolate(unref(footer).emergencyNote)}<!--]-->`);
else _push(`<!---->`);
_push(`</p></address></div></div><div aria-hidden="true" class="pointer-events-none select-none pb-6"><div class="text-outline text-center text-[17vw] font-black leading-[0.85] md:text-[11vw]">${ssrInterpolate(unref(settings).name)}</div></div><div class="flex flex-wrap items-center justify-between gap-4 border-t border-line py-6 text-xs text-muted"><div>${ssrInterpolate(unref(footer).copyright)}</div>`);
if (unref(footer).certLine) _push(`<div class="font-mono text-[10px] tracking-[0.25em]">${ssrInterpolate(unref(footer).certLine)}</div>`);
else _push(`<!---->`);
_push(`</div></div></footer>`);
};
}
});
//#endregion
//#region app/components/layout/Footer.vue
var _sfc_setup$3 = Footer_vue_vue_type_script_setup_true_lang_default.setup;
Footer_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/layout/Footer.vue");
return _sfc_setup$3 ? _sfc_setup$3(props, ctx) : void 0;
};
var Footer_default = Object.assign(Footer_vue_vue_type_script_setup_true_lang_default, { __name: "LayoutFooter" });
//#endregion
//#region app/composables/useTehranClock.ts
function useTehranClock() {
const now = ref(null);
return {
time: computed(() => now.value ? new Intl.DateTimeFormat("fa-IR", {
hour: "2-digit",
minute: "2-digit",
timeZone: "Asia/Tehran"
}).format(now.value) : "--:--"),
shift: computed(() => {
if (!now.value) return "";
const hour = Number(new Intl.DateTimeFormat("en-US", {
hour: "numeric",
hour12: false,
timeZone: "Asia/Tehran"
}).format(now.value));
return hour >= 6 && hour < 14 ? "صبح" : hour >= 14 && hour < 22 ? "عصر" : "شب";
})
};
}
//#endregion
//#region app/components/layout/Header.vue?vue&type=script&setup=true&lang.ts
var Header_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
__name: "Header",
__ssrInlineRender: true,
setup(__props) {
const ALL_LINKS = [
{
href: "/#home",
label: "خانه",
section: "hero"
},
{
href: "/#products",
label: "محصولات",
section: "productsIntro"
},
{
href: "/#about",
label: "درباره ما",
section: "about"
},
{
href: "/#services",
label: "خدمات",
section: "services"
},
{
href: "/#standards",
label: "استانداردها",
section: "standards"
},
{
href: "/#industries",
label: "صنایع",
section: "industries"
},
{
href: "/#contact",
label: "تماس",
section: "contact"
}
];
const ui = useUiStore();
const site = useSiteStore();
const settings = computed(() => site.settings);
const sections = computed(() => site.sections);
const LINKS = computed(() => ALL_LINKS.filter((l) => sections.value?.[l.section]?.enabled !== false));
const scrolled = useScrolledPast();
const { time, shift } = useTehranClock();
watch(() => ui.menuOpen, (open) => {
(void 0).body.style.overflow = open ? "hidden" : "";
});
return (_ctx, _push, _parent, _attrs) => {
_push(`<!--[-->`);
_push(ssrRenderComponent(unref(motion).header, {
initial: {
y: -90,
opacity: 0
},
animate: unref(ui).ready ? {
y: 0,
opacity: 1
} : {},
transition: {
duration: .9,
delay: .15,
ease: "EASE" in _ctx ? _ctx.EASE : unref(EASE)
},
class: `fixed inset-x-0 top-0 z-[80] transition-all duration-500 ${unref(scrolled) ? "border-b border-line bg-bg/85 py-3 backdrop-blur-xl" : "py-5"}`
}, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) {
_push(`<div class="mx-auto flex max-w-[1480px] items-center justify-between px-5 md:px-8"${_scopeId}>`);
_push(ssrRenderComponent(Logo_default, null, null, _parent, _scopeId));
_push(`<nav class="hidden items-center gap-7 lg:flex"${_scopeId}><!--[-->`);
ssrRenderList(unref(LINKS), (l) => {
_push(`<a${ssrRenderAttr("href", l.href)} class="group relative py-2 text-sm text-ink/75 transition-colors hover:text-ink"${_scopeId}>${ssrInterpolate(l.label)} <span class="absolute bottom-0 start-0 h-0.5 w-full origin-right scale-x-0 bg-accent transition-transform duration-300 group-hover:scale-x-100"${_scopeId}></span></a>`);
});
_push(`<!--]--></nav><div class="flex items-center gap-3"${_scopeId}><div class="hidden items-center gap-2.5 rounded-full border border-line px-4 py-2 text-[11px] text-muted xl:flex"${_scopeId}><span class="size-1.5 animate-pulse rounded-full bg-emerald-400"${_scopeId}></span><span class="font-mono"${_scopeId}>${ssrInterpolate(unref(time))}</span><span class="text-muted/50"${_scopeId}>|</span><span${_scopeId}>تهران — شیفت ${ssrInterpolate(unref(shift))}</span></div><a href="/#contact" class="hidden items-center gap-2 rounded-full bg-accent px-5 py-2.5 text-sm font-bold text-bg transition-all duration-300 hover:bg-accent-soft hover:shadow-[0_0_30px_rgba(255,90,0,0.4)] md:flex"${_scopeId}>`);
_push(ssrRenderComponent(VuesaxIcon_default, {
name: "call",
class: "size-4"
}, null, _parent, _scopeId));
_push(` درخواست مشاوره </a><button aria-label="باز کردن منو" class="flex size-11 items-center justify-center rounded-lg border border-line text-ink transition-colors hover:border-accent hover:text-accent lg:hidden"${_scopeId}>`);
_push(ssrRenderComponent(VuesaxIcon_default, {
name: "menu",
class: "size-5"
}, null, _parent, _scopeId));
_push(`</button></div></div>`);
} else return [createVNode("div", { class: "mx-auto flex max-w-[1480px] items-center justify-between px-5 md:px-8" }, [
createVNode(Logo_default),
createVNode("nav", { class: "hidden items-center gap-7 lg:flex" }, [(openBlock(true), createBlock(Fragment, null, renderList(unref(LINKS), (l) => {
return openBlock(), createBlock("a", {
key: l.href,
href: l.href,
class: "group relative py-2 text-sm text-ink/75 transition-colors hover:text-ink"
}, [createTextVNode(toDisplayString(l.label) + " ", 1), createVNode("span", { class: "absolute bottom-0 start-0 h-0.5 w-full origin-right scale-x-0 bg-accent transition-transform duration-300 group-hover:scale-x-100" })], 8, ["href"]);
}), 128))]),
createVNode("div", { class: "flex items-center gap-3" }, [
createVNode("div", { class: "hidden items-center gap-2.5 rounded-full border border-line px-4 py-2 text-[11px] text-muted xl:flex" }, [
createVNode("span", { class: "size-1.5 animate-pulse rounded-full bg-emerald-400" }),
createVNode("span", { class: "font-mono" }, toDisplayString(unref(time)), 1),
createVNode("span", { class: "text-muted/50" }, "|"),
createVNode("span", null, "تهران — شیفت " + toDisplayString(unref(shift)), 1)
]),
createVNode("a", {
href: "/#contact",
class: "hidden items-center gap-2 rounded-full bg-accent px-5 py-2.5 text-sm font-bold text-bg transition-all duration-300 hover:bg-accent-soft hover:shadow-[0_0_30px_rgba(255,90,0,0.4)] md:flex"
}, [createVNode(VuesaxIcon_default, {
name: "call",
class: "size-4"
}), createTextVNode(" درخواست مشاوره ")]),
createVNode("button", {
"aria-label": "باز کردن منو",
class: "flex size-11 items-center justify-center rounded-lg border border-line text-ink transition-colors hover:border-accent hover:text-accent lg:hidden",
onClick: unref(ui).openMenu
}, [createVNode(VuesaxIcon_default, {
name: "menu",
class: "size-5"
})], 8, ["onClick"])
])
])];
}),
_: 1
}, _parent));
_push(ssrRenderComponent(unref(AnimatePresence), null, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) {
if (unref(ui).menuOpen) _push(ssrRenderComponent(unref(motion).div, {
initial: { opacity: 0 },
animate: { opacity: 1 },
exit: { opacity: 0 },
transition: { duration: .35 },
class: "fixed inset-0 z-[110] flex flex-col bg-bg/95 backdrop-blur-2xl"
}, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) {
_push(`<div class="flex items-center justify-between border-b border-line px-5 py-4 md:px-8"${_scopeId}>`);
_push(ssrRenderComponent(Logo_default, null, null, _parent, _scopeId));
_push(`<button aria-label="بستن منو" class="flex size-11 items-center justify-center rounded-lg border border-line transition-colors hover:border-accent hover:text-accent"${_scopeId}>`);
_push(ssrRenderComponent(VuesaxIcon_default, {
name: "close-circle",
class: "size-5"
}, null, _parent, _scopeId));
_push(`</button></div><nav class="flex flex-1 flex-col justify-center gap-1 overflow-y-auto px-8"${_scopeId}><!--[-->`);
ssrRenderList(unref(LINKS), (l, i) => {
_push(ssrRenderComponent(unref(motion).a, {
key: l.href,
href: l.href,
initial: {
opacity: 0,
x: 44
},
animate: {
opacity: 1,
x: 0
},
transition: {
delay: .08 + i * .055,
duration: .55,
ease: "EASE" in _ctx ? _ctx.EASE : unref(EASE)
},
class: "group flex items-baseline gap-5 border-b border-line/60 py-4",
onClick: unref(ui).closeMenu
}, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) _push(`<span class="font-mono text-xs text-accent"${_scopeId}>${ssrInterpolate(("faNum" in _ctx ? _ctx.faNum : unref(faNum))(String(i + 1).padStart(2, "0")))}</span><span class="text-3xl font-black transition-colors group-hover:text-accent"${_scopeId}>${ssrInterpolate(l.label)}</span>`);
else return [createVNode("span", { class: "font-mono text-xs text-accent" }, toDisplayString(("faNum" in _ctx ? _ctx.faNum : unref(faNum))(String(i + 1).padStart(2, "0"))), 1), createVNode("span", { class: "text-3xl font-black transition-colors group-hover:text-accent" }, toDisplayString(l.label), 1)];
}),
_: 2
}, _parent, _scopeId));
});
_push(`<!--]--></nav><div class="flex items-center justify-between border-t border-line p-8 text-sm"${_scopeId}><div class="flex items-center gap-3 text-muted"${_scopeId}>`);
_push(ssrRenderComponent(VuesaxIcon_default, {
name: "call",
class: "size-4 text-accent"
}, null, _parent, _scopeId));
_push(`<a${ssrRenderAttr("href", `tel:${unref(settings).phone}`)} class="font-mono" dir="ltr"${_scopeId}>${ssrInterpolate(unref(settings).phoneDisplay)}</a></div><div class="text-xs text-muted"${_scopeId}>تهران — شیفت ${ssrInterpolate(unref(shift))}، ${ssrInterpolate(unref(time))}</div></div>`);
} else return [
createVNode("div", { class: "flex items-center justify-between border-b border-line px-5 py-4 md:px-8" }, [createVNode(Logo_default), createVNode("button", {
"aria-label": "بستن منو",
class: "flex size-11 items-center justify-center rounded-lg border border-line transition-colors hover:border-accent hover:text-accent",
onClick: unref(ui).closeMenu
}, [createVNode(VuesaxIcon_default, {
name: "close-circle",
class: "size-5"
})], 8, ["onClick"])]),
createVNode("nav", { class: "flex flex-1 flex-col justify-center gap-1 overflow-y-auto px-8" }, [(openBlock(true), createBlock(Fragment, null, renderList(unref(LINKS), (l, i) => {
return openBlock(), createBlock(unref(motion).a, {
key: l.href,
href: l.href,
initial: {
opacity: 0,
x: 44
},
animate: {
opacity: 1,
x: 0
},
transition: {
delay: .08 + i * .055,
duration: .55,
ease: "EASE" in _ctx ? _ctx.EASE : unref(EASE)
},
class: "group flex items-baseline gap-5 border-b border-line/60 py-4",
onClick: unref(ui).closeMenu
}, {
default: withCtx(() => [createVNode("span", { class: "font-mono text-xs text-accent" }, toDisplayString(("faNum" in _ctx ? _ctx.faNum : unref(faNum))(String(i + 1).padStart(2, "0"))), 1), createVNode("span", { class: "text-3xl font-black transition-colors group-hover:text-accent" }, toDisplayString(l.label), 1)]),
_: 2
}, 1032, [
"href",
"transition",
"onClick"
]);
}), 128))]),
createVNode("div", { class: "flex items-center justify-between border-t border-line p-8 text-sm" }, [createVNode("div", { class: "flex items-center gap-3 text-muted" }, [createVNode(VuesaxIcon_default, {
name: "call",
class: "size-4 text-accent"
}), createVNode("a", {
href: `tel:${unref(settings).phone}`,
class: "font-mono",
dir: "ltr"
}, toDisplayString(unref(settings).phoneDisplay), 9, ["href"])]), createVNode("div", { class: "text-xs text-muted" }, "تهران — شیفت " + toDisplayString(unref(shift)) + "، " + toDisplayString(unref(time)), 1)])
];
}),
_: 1
}, _parent, _scopeId));
else _push(`<!---->`);
} else return [unref(ui).menuOpen ? (openBlock(), createBlock(unref(motion).div, {
key: 0,
initial: { opacity: 0 },
animate: { opacity: 1 },
exit: { opacity: 0 },
transition: { duration: .35 },
class: "fixed inset-0 z-[110] flex flex-col bg-bg/95 backdrop-blur-2xl"
}, {
default: withCtx(() => [
createVNode("div", { class: "flex items-center justify-between border-b border-line px-5 py-4 md:px-8" }, [createVNode(Logo_default), createVNode("button", {
"aria-label": "بستن منو",
class: "flex size-11 items-center justify-center rounded-lg border border-line transition-colors hover:border-accent hover:text-accent",
onClick: unref(ui).closeMenu
}, [createVNode(VuesaxIcon_default, {
name: "close-circle",
class: "size-5"
})], 8, ["onClick"])]),
createVNode("nav", { class: "flex flex-1 flex-col justify-center gap-1 overflow-y-auto px-8" }, [(openBlock(true), createBlock(Fragment, null, renderList(unref(LINKS), (l, i) => {
return openBlock(), createBlock(unref(motion).a, {
key: l.href,
href: l.href,
initial: {
opacity: 0,
x: 44
},
animate: {
opacity: 1,
x: 0
},
transition: {
delay: .08 + i * .055,
duration: .55,
ease: "EASE" in _ctx ? _ctx.EASE : unref(EASE)
},
class: "group flex items-baseline gap-5 border-b border-line/60 py-4",
onClick: unref(ui).closeMenu
}, {
default: withCtx(() => [createVNode("span", { class: "font-mono text-xs text-accent" }, toDisplayString(("faNum" in _ctx ? _ctx.faNum : unref(faNum))(String(i + 1).padStart(2, "0"))), 1), createVNode("span", { class: "text-3xl font-black transition-colors group-hover:text-accent" }, toDisplayString(l.label), 1)]),
_: 2
}, 1032, [
"href",
"transition",
"onClick"
]);
}), 128))]),
createVNode("div", { class: "flex items-center justify-between border-t border-line p-8 text-sm" }, [createVNode("div", { class: "flex items-center gap-3 text-muted" }, [createVNode(VuesaxIcon_default, {
name: "call",
class: "size-4 text-accent"
}), createVNode("a", {
href: `tel:${unref(settings).phone}`,
class: "font-mono",
dir: "ltr"
}, toDisplayString(unref(settings).phoneDisplay), 9, ["href"])]), createVNode("div", { class: "text-xs text-muted" }, "تهران — شیفت " + toDisplayString(unref(shift)) + "، " + toDisplayString(unref(time)), 1)])
]),
_: 1
})) : createCommentVNode("", true)];
}),
_: 1
}, _parent));
_push(`<!--]-->`);
};
}
});
//#endregion
//#region app/components/layout/Header.vue
var _sfc_setup$2 = Header_vue_vue_type_script_setup_true_lang_default.setup;
Header_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/layout/Header.vue");
return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0;
};
var Header_default = Object.assign(Header_vue_vue_type_script_setup_true_lang_default, { __name: "LayoutHeader" });
//#endregion
//#region app/components/layout/Preloader.vue?vue&type=script&setup=true&lang.ts
var Preloader_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
__name: "Preloader",
__ssrInlineRender: true,
emits: ["complete"],
setup(__props, { emit: __emit }) {
const STEPS = [
"بررسی سیستم‌های ایمنی",
"تأیید استانداردهای بین‌المللی",
"بارگذاری تجهیزات حفاظت فردی",
"محیط کاری آماده است"
];
const progress = ref(0);
const step = computed(() => STEPS[Math.min(STEPS.length - 1, Math.floor(progress.value / 100 * STEPS.length))]);
return (_ctx, _push, _parent, _attrs) => {
_push(ssrRenderComponent(unref(motion).div, mergeProps({
exit: { y: "-100%" },
transition: {
duration: .85,
ease: [
.76,
0,
.24,
1
]
},
class: "fixed inset-0 z-[200] flex flex-col items-center justify-center bg-bg"
}, _attrs), {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) _push(`<div class="hazard absolute inset-x-0 top-0 h-3"${_scopeId}></div><div class="hazard absolute inset-x-0 bottom-0 h-3"${_scopeId}></div><div class="flex items-center gap-4"${_scopeId}><span class="flex size-12 items-center justify-center rounded-xl bg-white shadow-[0_0_28px_rgba(255,90,0,0.3)] ring-1 ring-white/10"${_scopeId}><img${ssrRenderAttr("src", _virtual_public__2Fimages_2Flogo_default)} alt="ایمن پیشگامان" width="32" height="32" class="size-8 object-contain"${_scopeId}></span><span class="font-mono text-xs tracking-[0.35em] text-muted"${_scopeId}> IMEN PISHGAMAN CO. </span></div><div class="mt-12 font-mono text-7xl font-semibold tabular-nums md:text-8xl"${_scopeId}>${ssrInterpolate(unref(progress).toLocaleString("fa-IR"))}<span class="text-accent"${_scopeId}>٪</span></div><div class="mt-8 h-[3px] w-64 overflow-hidden rounded-full bg-line md:w-80"${_scopeId}><div class="h-full bg-accent transition-all duration-200" style="${ssrRenderStyle({ width: `${unref(progress)}%` })}"${_scopeId}></div></div><div class="mt-6 flex items-center gap-3 text-xs text-muted"${_scopeId}><span class="size-1.5 animate-pulse rounded-full bg-accent"${_scopeId}></span> ${ssrInterpolate(unref(step))} <span class="animate-blink text-accent"${_scopeId}>▍</span></div>`);
else return [
createVNode("div", { class: "hazard absolute inset-x-0 top-0 h-3" }),
createVNode("div", { class: "hazard absolute inset-x-0 bottom-0 h-3" }),
createVNode("div", { class: "flex items-center gap-4" }, [createVNode("span", { class: "flex size-12 items-center justify-center rounded-xl bg-white shadow-[0_0_28px_rgba(255,90,0,0.3)] ring-1 ring-white/10" }, [createVNode("img", {
src: _virtual_public__2Fimages_2Flogo_default,
alt: "ایمن پیشگامان",
width: "32",
height: "32",
class: "size-8 object-contain"
})]), createVNode("span", { class: "font-mono text-xs tracking-[0.35em] text-muted" }, " IMEN PISHGAMAN CO. ")]),
createVNode("div", { class: "mt-12 font-mono text-7xl font-semibold tabular-nums md:text-8xl" }, [createTextVNode(toDisplayString(unref(progress).toLocaleString("fa-IR")), 1), createVNode("span", { class: "text-accent" }, "٪")]),
createVNode("div", { class: "mt-8 h-[3px] w-64 overflow-hidden rounded-full bg-line md:w-80" }, [createVNode("div", {
class: "h-full bg-accent transition-all duration-200",
style: { width: `${unref(progress)}%` }
}, null, 4)]),
createVNode("div", { class: "mt-6 flex items-center gap-3 text-xs text-muted" }, [
createVNode("span", { class: "size-1.5 animate-pulse rounded-full bg-accent" }),
createTextVNode(" " + toDisplayString(unref(step)) + " ", 1),
createVNode("span", { class: "animate-blink text-accent" }, "▍")
])
];
}),
_: 1
}, _parent));
};
}
});
//#endregion
//#region app/components/layout/Preloader.vue
var _sfc_setup$1 = Preloader_vue_vue_type_script_setup_true_lang_default.setup;
Preloader_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/layout/Preloader.vue");
return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
};
var Preloader_default = Object.assign(Preloader_vue_vue_type_script_setup_true_lang_default, { __name: "LayoutPreloader" });
//#endregion
//#region app/layouts/default.vue?vue&type=script&setup=true&lang.ts
var default_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
__name: "default",
__ssrInlineRender: true,
setup(__props) {
const ui = useUiStore();
const site = useSiteStore();
return (_ctx, _push, _parent, _attrs) => {
_push(`<div${ssrRenderAttrs(_attrs)}>`);
_push(ssrRenderComponent(unref(AnimatePresence), null, {
default: withCtx((_, _push, _parent, _scopeId) => {
if (_push) {
if (!unref(ui).ready) _push(ssrRenderComponent(Preloader_default, { onComplete: unref(ui).setReady }, null, _parent, _scopeId));
else _push(`<!---->`);
} else return [!unref(ui).ready ? (openBlock(), createBlock(Preloader_default, {
key: 0,
onComplete: unref(ui).setReady
}, null, 8, ["onComplete"])) : createCommentVNode("", true)];
}),
_: 1
}, _parent));
_push(ssrRenderComponent(Cursor_default, null, null, _parent));
_push(`<div class="noise" aria-hidden="true"></div>`);
_push(ssrRenderComponent(Header_default, null, null, _parent));
ssrRenderSlot(_ctx.$slots, "default", {}, null, _push, _parent);
if (unref(site).sections?.footer?.enabled !== false) _push(ssrRenderComponent(Footer_default, null, null, _parent));
else _push(`<!---->`);
_push(ssrRenderComponent(BackToTop_default, null, null, _parent));
_push(`</div>`);
};
}
});
//#endregion
//#region app/layouts/default.vue
var _sfc_setup = default_vue_vue_type_script_setup_true_lang_default.setup;
default_vue_vue_type_script_setup_true_lang_default.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("layouts/default.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
var default_default = default_vue_vue_type_script_setup_true_lang_default;
export { default_default as default };
//# sourceMappingURL=default-BNP_R9fa.mjs.map