Create gitignore

This commit is contained in:
marzban-dev
2025-03-10 00:39:10 +03:30
parent 1832ec131a
commit 0f29b34a6e
20 changed files with 198 additions and 214 deletions
+5 -5
View File
@@ -19,11 +19,11 @@ const closeModal = () => {
<NuxtPwaManifest />
<UpdatePwaModal
:isShow="updateAvailable"
@update="handleUpdate"
@close="closeModal"
/>
<!-- <UpdatePwaModal-->
<!-- :isShow="updateAvailable"-->
<!-- @update="handleUpdate"-->
<!-- @close="closeModal"-->
<!-- />-->
<NuxtLayout>
<ToastProvider>
@@ -11,10 +11,14 @@ type Props = {
const props = defineProps<Props>();
const { articles } = toRefs(props);
// state
const isMobile = useMediaQuery('(max-width: 1024px)');
</script>
<template>
<div class="columns-2 gap-8 w-full space-y-8">
<div class="columns-1 xs:columns-2 xl:columns-3 gap-6 sm:gap-8 w-full space-y-8">
<BlogPost
v-for="article in articles"
:key="article.id"
@@ -24,6 +28,7 @@ const { articles } = toRefs(props);
:comments="2"
:id="article.id"
:date="article.created_at"
:variant="isMobile ? 'sm' : 'lg'"
tag="تگ ندارد"
/>
</div>
+22 -28
View File
@@ -14,33 +14,33 @@ type Props = {
// props
const props = withDefaults(defineProps<Props>(), {
withDefaults(defineProps<Props>(), {
variant: "lg"
});
const {} = toRefs(props);
</script>
<template>
<NuxtLink :to="`/article/${id}`" class="block">
<div
<div>
<NuxtLink
:to="`/article/${id}`"
:class="variant === 'lg' ? 'aspect-square rounded-150 overflow-hidden' : 'h-fit'"
class="group w-full relative"
class="group w-full relative block"
>
<Tag
v-if="variant === 'lg'"
class="bg-success-500 absolute left-6 lg:left-10 top-6 lg:top-10 z-20"
class="bg-success-500 absolute left-6 top-6 z-20"
>
اسپیکر
</Tag>
<div
v-if="variant === 'sm'"
class="h-[350px] rounded-150 overflow-hidden relative"
class="aspect-square w-full rounded-150 overflow-hidden relative"
>
<Tag
class="bg-success-500 absolute z-20 left-6 top-6"
class="bg-success-500 absolute z-20 left-4 sm:left-6 top-4 sm:top-6 max-sm:text-xs"
>
اسپیکر
</Tag>
@@ -53,28 +53,26 @@ const {} = toRefs(props);
</div>
<div
:class="variant === 'lg' ? 'absolute px-6 lg:px-10' : 'invert mt-8'"
class="bottom-6 lg:bottom-10 flex flex-col gap-4 lg:gap-6 z-20"
:class="variant === 'lg' ? 'absolute px-6' : 'invert mt-6'"
class="bottom-6 lg:bottom-8 flex flex-col gap-4 z-20"
>
<div class="flex items-center gap-4 lg:gap-6">
<div class="flex items-center gap-2">
<Icon
name="ci:comment"
size="18"
class="**:stroke-white"
class="**:stroke-white size-3 md:size-3.5"
/>
<span class="typo-p-sm text-white">
<span class="typo-p-xs md:typo-p-sm text-white">
۰ نظر
</span>
</div>
<div class="flex items-center gap-2">
<Icon
name="ci:calendar"
size="18"
class="**:stroke-white"
class="**:stroke-white size-3 md:size-3.5"
/>
<span class="typo-p-sm text-white">
<span class="typo-p-xs md:typo-p-sm text-white">
۳۱ مهر ۱۴۰۳
</span>
</div>
@@ -83,21 +81,17 @@ const {} = toRefs(props);
<div class="flex gap-4 flex-col">
<span
:class="variant === 'lg' ? 'line-clamp-2' : ''"
class="text-lg font-medium lg:typo-h-6 text-white"
class="text-base md:text-lg font-medium lg:typo-h-6 text-white"
>
{{ title }}
</span>
<!-- <p-->
<!-- :class="variant === 'lg' ? 'typo-h-4' : 'typo-h-6 text-slate-500'"-->
<!-- class="text-white text-justify"-->
<!-- v-html="description"-->
<!-- />-->
<p
v-if="variant === 'sm'"
class="text-white typo-p-xs max-sm:!leading-[175%] sm:typo-p-sm md:typo-p-md line-clamp-3"
>
تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها
</p>
</div>
<NuxtLink :to="`/article/${id}`" class="underline text-white typo-p-md">
بیشتر بخوانید...
</NuxtLink>
</div>
<img
@@ -111,6 +105,6 @@ const {} = toRefs(props);
v-if="variant === 'lg'"
class="w-full h-full bg-linear-to-t from-black to-transparent absolute inset-0 z-15"
/>
</div>
</NuxtLink>
</div>
</template>
+5 -5
View File
@@ -12,20 +12,20 @@ const {} = toRefs(props);
</script>
<template>
<div class="relative w-full flex flex-col justify-center min-h-[700px] h-[80svh]">
<div class="relative w-full flex flex-col justify-center min-h-[450px] md:h-[80svh]">
<div class="-rotate-z-2 z-20">
<div
class="bg-warning-500 flex pr-20 gap-12 sm:gap-20 py-2 w-max animate-marquee-reverse"
>
<span
v-for="i in 10"
class="text-[20px] sm:text-[30px] lg:text-[50px] text-white whitespace-nowrap font-semibold"
class="text-[40px] lg:text-[50px] text-white whitespace-nowrap font-semibold"
>
TEST {{ i }}
</span>
<span
v-for="i in 10"
class="text-[20px] sm:text-[30px] lg:text-[50px] text-white whitespace-nowrap font-semibold"
class="text-[40px] lg:text-[50px] text-white whitespace-nowrap font-semibold"
>
TEST {{ i }}
</span>
@@ -38,13 +38,13 @@ const {} = toRefs(props);
>
<span
v-for="i in 10"
class="text-[20px] sm:text-[30px] lg:text-[50px] text-slate-300 whitespace-nowrap font-semibold"
class="text-[40px] lg:text-[50px] text-slate-300 whitespace-nowrap font-semibold"
>
TEST {{ i }}
</span>
<span
v-for="i in 10"
class="text-[20px] sm:text-[30px] lg:text-[50px] text-slate-300 whitespace-nowrap font-semibold"
class="text-[40px] lg:text-[50px] text-slate-300 whitespace-nowrap font-semibold"
>
TEST {{ i }}
</span>
+65 -90
View File
@@ -1,99 +1,34 @@
<script setup lang="ts">
// imports
import { NAV_LINKS } from "~/constants";
</script>
<template>
<footer class="w-full bg-black flex-center">
<div class="size-full grid grid-cols-2 items-stretch container">
<div
class="h-full flex flex-col items-start justify-between pe-[5rem] py-[5rem]"
>
<div class="flex flex-col items-start gap-[1.5rem] w-full">
<span class="text-white typo-sub-h-xl font-light"
>از آخرین اخبار، نوشتهها، مقالات و تخفیفها با خبر شوید
😎
</span>
<div class="flex flex-col items-start gap-[.75rem] w-full">
<div
class="flex items-center justify-start gap-[.5rem] w-full"
>
<Input
placeholder="آدرس الکترونیکی شما"
class="bg-slate-950 border-slate-800 hover:border-slate-800 w-8/12"
<div class="bg-black relative overflow-hidden">
<img src="/img/footer-bg.jpg" alt="" class="absolute z-10 object-cover opacity-45" />
<div class="flex flex-col gap-4 items-center justify-center relative z-20">
<div class="flex items-center flex-col pb-[10px] pt-[80px] lg:py-[150px] justify-center">
<video
src="/video/loading.mp4"
autoplay
muted
loop
class="size-[150px] lg:size-[220px] rounded-full"
/>
<Button
class="invert rounded-100 size-[3rem] !**:stroke-black"
end-icon="ci:arrow-left"
/>
</div>
<span class="text-slate-400 typo-p-sm">
با عضویت, شما با
<NuxtLink to="#" class="text-cyan-500 underline"
>قوانین و مقررات</NuxtLink
>
سایت موافقت می کنید.
</span>
</div>
</div>
<span class="text-white typo-label-sm font-light">
© ۲۰۲۵ - ملز; هوشمند ترین وبسایت ایران
<span class="font-bold text-2xl lg:text-5xl text-gradient bg-gradient-to-l from-blue-500 to-blue-700">
فروشگاه هیملز
</span>
</div>
<div
class="flex flex-col items-start ps-[5rem] py-[5rem] gap-[6.875rem]"
>
<div class="w-full flex items-start gap-[3rem]">
<div class="flex flex-col gap-[1.5rem] w-full">
<NuxtLink
v-for="(link, index) in NAV_LINKS"
:key="index"
:to="link.path"
class="typo-h-5 font-light text-white hover:text-white/70 transition-all"
>
{{ link.title }}
</NuxtLink>
</div>
<div class="flex flex-col gap-[.75rem] w-full">
<NuxtLink
to="#"
class="typo-label-md font-light text-slate-400 hover:text-slate-500 transition-all"
>
سوالات متدوال
</NuxtLink>
<NuxtLink
to="#"
class="typo-label-md font-light text-slate-400 hover:text-slate-500 transition-all"
>
قوانین و مقررات
</NuxtLink>
<NuxtLink
to="#"
class="typo-label-md font-light text-slate-400 hover:text-slate-500 transition-all"
>
گزارش خطا و باگ
</NuxtLink>
<NuxtLink
to="#"
class="typo-label-md font-light text-slate-400 hover:text-slate-500 transition-all"
>
حریم خصوصی
</NuxtLink>
<NuxtLink
to="#"
class="typo-label-md font-light text-slate-400 hover:text-slate-500 transition-all"
>
تماس با ما
</NuxtLink>
</div>
</div>
<footer class="w-full flex max-lg:flex-col justify-between py-[100px] max-lg:gap-16 container items-center lg:items-start relative z-20">
<div class="flex flex-col gap-4 text-white max-w-[300px]">
<div class="flex items-center justify-end text-white w-full">
<div class="flex items-center gap-[1rem]">
<h3 class="font-bold text-xl xl:text-3xl max-lg:text-center">
با ما در ارتباط باشید...
</h3>
<p class="text-md font-thin leading-[175%] mt-4 max-lg:text-center">
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها
</p>
<div class="flex items-center gap-4 mt-6 max-lg:justify-center">
<NuxtLink to="#" class="flex-center size-[1.5rem]">
<Icon
name="ci:instagram"
@@ -124,7 +59,47 @@ import { NAV_LINKS } from "~/constants";
</NuxtLink>
</div>
</div>
<div class="flex justify-center lg:justify-end flex-1">
<div class="flex flex-col gap-6 text-white max-lg:text-center">
<h3 class="font-bold">
لینک های مفید
</h3>
<ul class="flex flex-col gap-4 font-thin">
<li>از طراحان گرافیک است</li>
<li>تولید نامفهوم</li>
<li>ستون و سطرآنچنان که لازم</li>
<li>روزنامه و مجله در ستون</li>
</ul>
</div>
</div>
<div class="flex justify-end flex-1">
<div class="flex flex-col gap-6 text-white max-lg:text-center">
<h3 class="font-bold">
لینک های مفید
</h3>
<ul class="flex flex-col gap-4 font-thin">
<li>از طراحان گرافیک است</li>
<li>تولید نامفهوم</li>
<li>ستون و سطرآنچنان که لازم</li>
<li>روزنامه و مجله در ستون</li>
</ul>
</div>
</div>
<div class="flex justify-end flex-1">
<div class="flex flex-col gap-6 text-white max-lg:text-center">
<h3 class="font-bold w-full">
لینک های مفید
</h3>
<ul class="flex flex-col gap-4 font-thin">
<li>از طراحان گرافیک است</li>
<li>تولید نامفهوم</li>
<li>ستون و سطرآنچنان که لازم</li>
<li>روزنامه و مجله در ستون</li>
</ul>
</div>
</div>
</footer>
</div>
</div>
</template>
@@ -33,7 +33,7 @@ const formattedDate = useDateFormat(date.value, "YYYY/MM/DD");
{{ formattedDate }}
</span>
</div>
<Rating />
<Rating :rate="2"/>
</div>
<div class="typo-p-md">
{{ content }}
+1 -1
View File
@@ -22,7 +22,7 @@ const onSwiper = (swiper: SwiperClass) => {
<template>
<section
ref="sectionTarget"
class="flex flex-col justify-center gap-4 bg-black h-[150svh] mt-40 relative overflow-hidden"
class="flex flex-col justify-center gap-4 bg-black h-[150svh] relative overflow-hidden"
>
<div class="w-full flex justify-center items-center relative z-10">
+1 -1
View File
@@ -159,7 +159,7 @@ onUnmounted(() => {
<template>
<div
id="header-slider-container"
class="w-full mb-20 z-50 max-md:mt-[80px]"
class="w-full z-50"
>
<div id="header-slider-wrapper" class="relative">
<Swiper
+4 -3
View File
@@ -15,16 +15,17 @@ await suspense();
<template>
<section class="mt-20 container">
<div class="flex items-center justify-between mb-20">
<div class="flex items-center justify-between mb-12 md:mb-20">
<span class="typo-h-6 max-sm:text-xl md:typo-h-5 lg:typo-h-4 text-black">
مقالات اخیر سایت
</span>
<NuxtLink to="/articles">
<Button variant="outlined" class="rounded-full max-sm:typo-label-sm max-sm:py-2" end-icon="ci:arrow-left">
<Button variant="outlined" class="rounded-full max-sm:typo-label-sm max-sm:py-2"
end-icon="ci:arrow-left">
نمایش همه
</Button>
</NuxtLink>
</div>
<ArticlesList :articles="articles!.results" />
<ArticlesList :articles="[...articles!.results,...articles!.results,...articles!.results,...articles!.results,...articles!.results,...articles!.results]" />
</section>
</template>
@@ -51,7 +51,7 @@ const onSwiper = (swiper: SwiperClass) => {
<div class="flex justify-center items-center">
<div class="max-w-[900px] px-4 text-white flex flex-col items-center gap-4">
<Icon name="ci:instagram" size="28" class="**:stroke-white" />
<p class="text-base xs:text-lg sm:typo-h-6 lg:typo-h-5 !font-medium leading-[150%] lg:leading-[175%] max-sm:px-4 sm:max-w-[600px] lg:max-w-[800px] text-center">
<p class="text-base xs:text-lg sm:typo-h-6 lg:typo-h-5 !font-normal !leading-[150%] lg:leading-[175%] max-sm:px-4 sm:max-w-[600px] lg:max-w-[800px] text-center">
لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با
استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله
در ستون و سطرآنچنان که لازم.
+5
View File
@@ -47,6 +47,7 @@ watch(
<template>
<div class="container">
<div>
<div class="flex flex-col items-center gap-3 mb-10 lg:mb-16">
<span class="typo-p-sm md:typo-p-md text-slate-500">مقایسه محصولات</span>
<span class="typo-h-6 md:typo-h-5 lg:typo-h-3 text-black">
@@ -136,6 +137,10 @@ watch(
</div>
</div>
</div>
<div class="h-80"></div>
</div>
</template>
<style>
@@ -94,7 +94,7 @@ onUnmounted(() => {
<template>
<div
id="products-showcase-container"
class="mb-40 perspective-midrange w-full h-[125svh] bg-black flex items-center justify-center"
class="perspective-midrange w-full h-[125svh] bg-black flex items-center justify-center"
>
<NuxtLink
v-for="slide in homeData!.show_case_slider"
@@ -42,7 +42,7 @@ const submitComment = async () => {
>
<h3 class="typo-h-3">نظرات کاربران</h3>
<div class="flex flex-col gap-2">
<Rating />
<Rating :rate="2" />
<span class="typo-p-sm">
بر اساس {{ comments?.count }} نظر
</span>
+1 -1
View File
@@ -84,7 +84,7 @@ watch(() => selectedVariant.value, (newValue) => {
درصد تخفیف
</div>
</div>
<Rating />
<Rating :rate="3" />
</div>
<div
+10 -6
View File
@@ -25,14 +25,18 @@ if (response.isError) {
<template>
<div class="w-full">
<LoadingOverlay />
<Hero />
<Hero class="mb-20 max-md:mt-[80px]" />
<Preview />
<ProductsShowcase />
<!-- <ProductsSlider title="محصولات پرفروش" />-->
<ProductsGrid title="محصولات پرفروش" :products="[...homeData!.products,...homeData!.products]"/>
<Categories />
<ProductsShowcase class="mb-40" />
<ProductsGrid
title="محصولات پرفروش"
:products="[...homeData!.products,...homeData!.products]"
/>
<Categories class="mt-40" />
<Brands />
<MostRecentComments />
<LatestStories />
<ClientOnly>
<LatestStories class="mb-20" />
</ClientOnly>
</div>
</template>
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 MiB

Binary file not shown.
+1 -1
View File
@@ -106,7 +106,7 @@ declare global {
full_name: string;
profile_photo: string;
};
category: number;
category: SubCategory;
};
type UserComment = {