Update dependencies, refactor footer and header components, and enhance podcast page layout

This commit is contained in:
Mobin 2025-03-17 12:19:17 +03:30
parent 57ddd04cf7
commit 73112f6680
9 changed files with 145 additions and 154 deletions

View file

@ -1,5 +1,5 @@
import FooterSection from "@/components/footer-section";
import Header from "@/components/header"; import Header from "@/components/header";
import FooterSection from "@/components/sections/footer/default";
import type { Metadata } from "next"; import type { Metadata } from "next";
import localFont from "next/font/local"; import localFont from "next/font/local";
import "./globals.css"; import "./globals.css";

View file

@ -7,7 +7,7 @@ export default function Home() {
return ( return (
<main className="min-h-screen"> <main className="min-h-screen">
<PodcastHero /> <PodcastHero />
<EpisodeCards /> <EpisodeCards section="main" />
<AboutPodcast /> <AboutPodcast />
<SubscribeSection /> <SubscribeSection />
</main> </main>

View file

@ -1,3 +1,4 @@
import { EpisodeCards } from "@/components/episode-cards";
import { PodcastPlayer } from "@/components/podcast-player"; import { PodcastPlayer } from "@/components/podcast-player";
import { import {
Breadcrumb, Breadcrumb,
@ -8,8 +9,9 @@ import {
BreadcrumbSeparator, BreadcrumbSeparator,
} from "@/components/ui/breadcrumb"; } from "@/components/ui/breadcrumb";
import { Separator } from "@/components/ui/separator"; import { Separator } from "@/components/ui/separator";
import { Calendar, Clock, User } from "lucide-react"; import { Calendar, CircleDot, Clock, User } from "lucide-react";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link";
export default function Podcast() { export default function Podcast() {
return ( return (
@ -44,8 +46,8 @@ export default function Podcast() {
قسمت اول: داستان پارچ قسمت اول: داستان پارچ
</h1>{" "} </h1>{" "}
<div className="flex gap-5"> <div className="flex gap-5">
<div className="rounded-xl p-6 bg-muted/100"> <div className="rounded-xl p-5 bg-muted/100">
<p className="text-muted-foreground md:text-lg"> <p className="text-muted-foreground md:text-lg text-justify">
پادکست پارچ کست یک برنامه صوتی جذاب و متنوع است که به پادکست پارچ کست یک برنامه صوتی جذاب و متنوع است که به
بررسی موضوعات مختلف فرهنگی، اجتماعی و علمی میپردازد. بررسی موضوعات مختلف فرهنگی، اجتماعی و علمی میپردازد.
این پادکست با میزبانی متخصصان و مهمانان مختلف، تلاش این پادکست با میزبانی متخصصان و مهمانان مختلف، تلاش
@ -57,15 +59,15 @@ export default function Podcast() {
</p> </p>
</div> </div>
<div className="flex flex-col w-full gap-3"> <div className="flex flex-col w-full gap-3">
<div className="flex items-center gap-1 text-sm"> <div className="flex items-center gap-1 text-sm text-slate-300">
<Calendar size={18} className="text-gray-400" /> تاریخ <Calendar size={18} className="text-gray-400" /> تاریخ
انتشار: 11 اسفند 1403 انتشار: 11 اسفند 1403
</div> </div>
<div className="flex items-center gap-1 text-sm"> <div className="flex items-center gap-1 text-sm text-slate-300">
<Clock size={18} className="text-gray-400" /> مدت زمان: <Clock size={18} className="text-gray-400" /> مدت زمان:
64 دقیقه 64 دقیقه
</div> </div>
<div className="flex items-center gap-1 text-sm"> <div className="flex items-center gap-1 text-sm text-slate-300">
<User size={18} className="text-gray-400" /> گویندگان: <User size={18} className="text-gray-400" /> گویندگان:
Erfoux Erfoux
</div> </div>
@ -81,7 +83,7 @@ export default function Podcast() {
<svg <svg
stroke="currentColor" stroke="currentColor"
fill="currentColor" fill="currentColor"
stroke-width="0" strokeWidth="0"
viewBox="0 0 496 512" viewBox="0 0 496 512"
height="20px" height="20px"
width="20px" width="20px"
@ -94,7 +96,7 @@ export default function Podcast() {
<svg <svg
stroke="currentColor" stroke="currentColor"
fill="currentColor" fill="currentColor"
stroke-width="0" strokeWidth="0"
viewBox="0 0 448 512" viewBox="0 0 448 512"
height="20px" height="20px"
width="20px" width="20px"
@ -109,23 +111,72 @@ export default function Podcast() {
</div> </div>
<div className="grid gap-6 grid-cols-12"> <div className="grid gap-6 grid-cols-12">
<div className="col-span-9"> <div className="col-span-9">
<div className=" flex gap-4 flex-col"> <div className="flex flex-col gap-10">
<h3 className="text-2xl font-bold">متن کامل اپیزود</h3> <div className="flex gap-4 flex-col">
<div className="rounded-xl p-6 bg-muted/100"> <h2 className="text-2xl font-bold">متن کامل اپیزود</h2>
<p className="text-muted-foreground md:text-lg"> <div className="rounded-xl p-5 bg-muted/100">
پادکست پارچ کست یک برنامه صوتی جذاب و متنوع است که به <p className="text-muted-foreground md:text-lg text-justify">
بررسی موضوعات مختلف فرهنگی، اجتماعی و علمی میپردازد. این پادکست پارچ کست یک برنامه صوتی جذاب و متنوع است که به
پادکست با میزبانی متخصصان و مهمانان مختلف، تلاش میکند تا با بررسی موضوعات مختلف فرهنگی، اجتماعی و علمی میپردازد. این
ارائه بحثها و نظرات عمیق، شنوندگان را به تفکر وادارد و پادکست با میزبانی متخصصان و مهمانان مختلف، تلاش میکند تا
آگاهی آنها را در زمینههای مختلف افزایش دهد. هر قسمت از با ارائه بحثها و نظرات عمیق، شنوندگان را به تفکر وادارد و
پارچ کست با رویکردی خلاقانه و engaging تولید میشود و هدف آگاهی آنها را در زمینههای مختلف افزایش دهد. هر قسمت از
آن ایجاد فضایی است که در آن گوش دادن به اطلاعات جدید همزمان پارچ کست با رویکردی خلاقانه و engaging تولید میشود و
با لذت و سرگرمی همراه باشد. هدف آن ایجاد فضایی است که در آن گوش دادن به اطلاعات جدید
</p> همزمان با لذت و سرگرمی همراه باشد.
</p>
</div>
</div>
<EpisodeCards section={"podcast"} />
</div>
</div>
<div className="col-span-3">
<div className="flex flex-col gap-3">
<div className="flex flex-col gap-3">
<h4 className="text-lg font-bold mt-1">
پرطرفدارترین اپیزودها
</h4>
<ul className="flex flex-col gap-1">
<li>
<Link
href={"#"}
className="flex items-center gap-1 text-sm text-slate-300"
>
<CircleDot size={10} />
<span>داستان پارچ </span>
</Link>
</li>
<li>
<Link
href={"#"}
className="flex items-center gap-1 text-sm text-slate-300"
>
<CircleDot size={10} />
<span>داستان پارچ </span>
</Link>
</li>
<li>
<Link
href={"#"}
className="flex items-center gap-1 text-sm text-slate-300"
>
<CircleDot size={10} />
<span>داستان پارچ </span>
</Link>
</li>
<li>
<Link
href={"#"}
className="flex items-center gap-1 text-sm text-slate-300"
>
<CircleDot size={10} />
<span>داستان پارچ پارچ کست </span>
</Link>
</li>
</ul>
</div> </div>
</div> </div>
</div> </div>
<div className="col-span-3 border">sss</div>
</div> </div>
</div> </div>
</section> </section>

BIN
bun.lockb

Binary file not shown.

View file

@ -10,7 +10,7 @@ import { Button } from "@/components/ui/button";
import { Clock, Play } from "lucide-react"; import { Clock, Play } from "lucide-react";
import Image from "next/image"; import Image from "next/image";
export function EpisodeCards() { export function EpisodeCards({ section }: { section: "podcast" | "main" }) {
// Sample episode data // Sample episode data
const episodes = [ const episodes = [
{ {
@ -22,15 +22,6 @@ export function EpisodeCards() {
date: "18 آذر, 1403", date: "18 آذر, 1403",
image: "https://picsum.photos/200", image: "https://picsum.photos/200",
}, },
{
id: 2,
title: "قسمت دوم",
description:
"هر قسمت از “پارچ کست” با رویکردی خلاقانه و engaging تولید می‌شود و هدف آن ایجاد فضایی است که در آن گوش دادن به اطلاعات جدید همزمان با لذت و سرگرمی همراه باشد.",
duration: "43 دقیقه",
date: "18 آذر, 1403",
image: "https://picsum.photos/200",
},
{ {
id: 3, id: 3,
title: "قسمت اول", title: "قسمت اول",
@ -52,22 +43,36 @@ export function EpisodeCards() {
]; ];
return ( return (
<section className="container py-12 md:py-16 lg:py-20"> <section
<div className="container px-4 md:px-6"> className={`${
section === "main" ? "container py-12 md:py-16 lg:py-20" : ""
}`}
>
<div className={`${section === "main" ? "container px-4 md:px-6" : ""}`}>
<div className="flex flex-col items-start justify-between gap-4 md:flex-row md:items-center"> <div className="flex flex-col items-start justify-between gap-4 md:flex-row md:items-center">
<div> <div>
<h2 className="text-4xl font-bold tracking-tight text-parch leading-normal"> <h2
className={`${
section === "main"
? "text-4xl font-bold tracking-tight text-parch leading-normal"
: "text-2xl font-bold"
}`}
>
آخرین قسمت ها آخرین قسمت ها
</h2> </h2>
<p className="text-muted-foreground"> <p className="text-muted-foreground">
از جدیدترین مکالمات ما مطلع شوید از جدیدترین مکالمات ما مطلع شوید
</p> </p>
</div> </div>
<Button variant="link" className="gap-1"> <Button variant="link" className="gap-1 pe-0">
مشاهده همه قسمت ها مشاهده همه قسمت ها
</Button> </Button>
</div> </div>
<div className="mt-8 grid gap-6 sm:grid-cols-2 lg:grid-cols-4"> <div
className={`mt-8 grid gap-6 sm:grid-cols-2 ${
section === "main" ? "lg:grid-cols-4" : "lg:grid-cols-3"
}`}
>
{episodes.map((episode) => ( {episodes.map((episode) => (
<Card <Card
key={episode.id} key={episode.id}

View file

@ -1,57 +1,76 @@
import { Github, Instagram, Twitter, Youtube } from "lucide-react";
import Image from "next/image"; import Image from "next/image";
import { Footer, FooterBottom, FooterColumn, FooterContent } from "./ui/footer"; import { Footer, FooterBottom, FooterColumn, FooterContent } from "./ui/footer";
export default function FooterSection() { export default function FooterSection() {
return ( return (
<footer className="w-full bg-background px-4"> <footer className="w-full bg-background px-4">
<div className="mx-auto max-w-container"> <div className="mx-auto">
<Footer> <Footer>
<FooterContent> <FooterContent className="container">
<FooterColumn className="col-span-2 sm:col-span-3 md:col-span-1"> <FooterColumn className="col-span-2 sm:col-span-3 md:col-span-1">
<div className="flex items-center"> <div className="flex items-center">
<Image src={"/logo.png"} width={30} height={30} alt="logo" /> <Image src={"/logo.png"} width={30} height={30} alt="logo" />
<h3 className="text-xl font-bold">پارچ کست</h3> <h3 className="text-xl font-bold text-parch">پارچ کست</h3>
</div> </div>
</FooterColumn> </FooterColumn>
<FooterColumn> <FooterColumn>
<h3 className="text-md pt-1 font-semibold">Product</h3> <h3 className="text-md pt-1 font-semibold">همراه با ما</h3>
<a href="/" className="text-sm text-muted-foreground"> <a href="/" className="text-sm text-muted-foreground">
Changelog تماس با ما
</a> </a>
<a href="/" className="text-sm text-muted-foreground"> <a href="/" className="text-sm text-muted-foreground">
Documentation درباره ما
</a>
<a href="/" className="text-sm text-muted-foreground">
حمایت از پادکست{" "}
</a>
<a href="/" className="text-sm text-muted-foreground">
همکاری اسپانسر{" "}
</a> </a>
</FooterColumn> </FooterColumn>
<FooterColumn> <FooterColumn>
<h3 className="text-md pt-1 font-semibold">Company</h3> <h3 className="text-md pt-1 font-semibold">پربازدیدترینها</h3>
<a href="/" className="text-sm text-muted-foreground"> <a href="/" className="text-sm text-muted-foreground">
About داستان پارچ
</a> </a>
<a href="/" className="text-sm text-muted-foreground"> <a href="/" className="text-sm text-muted-foreground">
Careers داستان پارچ کست
</a> </a>
<a href="/" className="text-sm text-muted-foreground"> <a href="/" className="text-sm text-muted-foreground">
Blog پارچ گیمینگ
</a> </a>
</FooterColumn> </FooterColumn>
<FooterColumn> <FooterColumn>
<h3 className="text-md pt-1 font-semibold">شبکه های اجتماعی</h3> <h3 className="text-md pt-1 font-semibold">ما را دنبال کنید</h3>
<a href="/" className="text-sm text-muted-foreground"> <span className="text-sm text-muted-foreground text-justify">
Discord مطالب بیشتر و اطلاعات گوناگونی در شبکههای اجتماعی رخ منتشر
</a> میشود که شما را به دنبال کردن آنها دعوت میکنیم.
<a href="/" className="text-sm text-muted-foreground"> </span>
Twitter <div className="flex gap-4">
</a> <div className="flex justify-center items-center w-8 h-8 rounded-full bg-gray-700">
<a href="/" className="text-sm text-muted-foreground"> <Github size={16} />
Github </div>
</a> <div className="flex justify-center items-center w-8 h-8 rounded-full bg-gray-700">
<Twitter size={16} />
</div>
<div className="flex justify-center items-center w-8 h-8 rounded-full bg-gray-700">
<Instagram size={16} />
</div>
<div className="flex justify-center items-center w-8 h-8 rounded-full bg-gray-700">
<Youtube size={16} />
</div>
</div>
</FooterColumn> </FooterColumn>
</FooterContent> </FooterContent>
<FooterBottom> <FooterBottom>
<div>© 2025 پارچ کست. تمامی حقوق محفوظ است</div> <div className="container flex justify-between">
<div className="flex items-center gap-4"> <div>© 2025 پارچ کست. تمامی حقوق محفوظ است</div>
<a href="/">سیاست حفظ حریم خصوصی</a>
<a href="/">شرایط خدمات</a> <div className="flex items-center gap-4">
<a href="/">سیاست حفظ حریم خصوصی</a>
<a href="/">شرایط خدمات</a>
</div>
</div> </div>
</FooterBottom> </FooterBottom>
</Footer> </Footer>

View file

@ -3,6 +3,7 @@
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Menu, Search } from "lucide-react"; import { Menu, Search } from "lucide-react";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link";
export default function Header() { export default function Header() {
return ( return (
@ -18,12 +19,12 @@ export default function Header() {
جستجو جستجو
</Button> </Button>
</div> </div>
<div className="hidden sm:flex items-center"> <Link href={"/"} className="hidden sm:flex items-center">
<Image src={"/logo.png"} width={30} height={30} alt="logo" /> <Image src={"/logo.png"} width={30} height={30} alt="logo" />
<h1 className="font-bold tracking-tighter leading-normal pe-2 text-xl text-parch"> <h1 className="font-bold tracking-tighter leading-normal pe-2 text-xl text-parch">
پارچ کست پارچ کست
</h1> </h1>
</div> </Link>
<div className="flex gap-2"> <div className="flex gap-2">
<Button variant="outline" className="px-2 py-1"> <Button variant="outline" className="px-2 py-1">
ورود ورود

View file

@ -1,85 +0,0 @@
import { Github, Instagram, Twitter, Youtube } from "lucide-react";
import Image from "next/image";
import {
Footer,
FooterBottom,
FooterColumn,
FooterContent,
} from "../../ui/footer";
export default function FooterSection() {
return (
<footer className="w-full bg-background px-4">
<div className="mx-auto">
<Footer>
<FooterContent className="container">
<FooterColumn className="col-span-2 sm:col-span-3 md:col-span-1">
<div className="flex items-center">
<Image src={"/logo.png"} width={30} height={30} alt="logo" />
<h3 className="text-xl font-bold text-parch">پارچ کست</h3>
</div>
</FooterColumn>
<FooterColumn>
<h3 className="text-md pt-1 font-semibold">همراه با ما</h3>
<a href="/" className="text-sm text-muted-foreground">
تماس با ما
</a>
<a href="/" className="text-sm text-muted-foreground">
درباره ما
</a>
<a href="/" className="text-sm text-muted-foreground">
حمایت از پادکست{" "}
</a>
<a href="/" className="text-sm text-muted-foreground">
همکاری اسپانسر{" "}
</a>
</FooterColumn>
<FooterColumn>
<h3 className="text-md pt-1 font-semibold">پربازدیدترینها</h3>
<a href="/" className="text-sm text-muted-foreground">
داستان پارچ
</a>
<a href="/" className="text-sm text-muted-foreground">
داستان پارچ کست
</a>
<a href="/" className="text-sm text-muted-foreground">
پارچ گیمینگ
</a>
</FooterColumn>
<FooterColumn>
<h3 className="text-md pt-1 font-semibold">ما را دنبال کنید</h3>
<span className="text-sm text-muted-foreground text-justify">
مطالب بیشتر و اطلاعات گوناگونی در شبکههای اجتماعی رخ منتشر
میشود که شما را به دنبال کردن آنها دعوت میکنیم.
</span>
<div className="flex gap-4">
<div className="flex justify-center items-center w-8 h-8 rounded-full bg-gray-700">
<Github size={16} />
</div>
<div className="flex justify-center items-center w-8 h-8 rounded-full bg-gray-700">
<Twitter size={16} />
</div>
<div className="flex justify-center items-center w-8 h-8 rounded-full bg-gray-700">
<Instagram size={16} />
</div>
<div className="flex justify-center items-center w-8 h-8 rounded-full bg-gray-700">
<Youtube size={16} />
</div>
</div>
</FooterColumn>
</FooterContent>
<FooterBottom>
<div className="container flex justify-between">
<div>© 2025 پارچ کست. تمامی حقوق محفوظ است</div>
<div className="flex items-center gap-4">
<a href="/">سیاست حفظ حریم خصوصی</a>
<a href="/">شرایط خدمات</a>
</div>
</div>
</FooterBottom>
</Footer>
</div>
</footer>
);
}

View file

@ -17,8 +17,8 @@
"@radix-ui/react-slot": "^1.1.2", "@radix-ui/react-slot": "^1.1.2",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"lucide-react": "^0.476.0", "lucide-react": "^0.482.0",
"next": "15.2.0", "next": "15.2.2",
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
"tailwind-merge": "^3.0.2", "tailwind-merge": "^3.0.2",
@ -26,13 +26,13 @@
}, },
"devDependencies": { "devDependencies": {
"typescript": "^5", "typescript": "^5",
"@types/node": "^20", "@types/node": "^22",
"@types/react": "^19", "@types/react": "^19",
"@types/react-dom": "^19", "@types/react-dom": "^19",
"@tailwindcss/postcss": "^4", "@tailwindcss/postcss": "^4",
"tailwindcss": "^4", "tailwindcss": "^4",
"eslint": "^9", "eslint": "^9",
"eslint-config-next": "15.2.0", "eslint-config-next": "15.2.2",
"@eslint/eslintrc": "^3" "@eslint/eslintrc": "^3"
} }
} }