825 lines
37 KiB
JavaScript
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
|