Update carousels, card hover, and IranBay branding.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-10-04 13:21:27 +03:30
co-authored by Cursor
commit 1153e8e78f
178 changed files with 30517 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
"use client";
import { BusinessMeshkeeGate } from "@/components/business/BusinessPageChrome";
import AddBlogForm from "@/components/catalog/AddBlogForm";
import { en } from "@/lib/i18n/en";
export default function BusinessAddBlogPage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<AddBlogForm
meshkeeId={meshkeeId}
listHref="/blog"
title={en.blog.addTitle}
lead={en.blog.addLead}
/>
)}
</BusinessMeshkeeGate>
);
}
+35
View File
@@ -0,0 +1,35 @@
"use client";
import Link from "next/link";
import {
BusinessListHeader,
BusinessMeshkeeGate,
} from "@/components/business/BusinessPageChrome";
import BlogPanel from "@/components/catalog/BlogPanel";
import { en } from "@/lib/i18n/en";
import styles from "@/components/BusinessDetailsPage.module.css";
export default function BusinessBlogPage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<>
<BusinessListHeader
title={en.blog.title}
lead={en.blog.lead}
action={
<Link href="/blog/new" className={`outline-btn ${styles.actionBtn}`}>
{en.blog.add}
</Link>
}
/>
<BlogPanel
meshkeeId={meshkeeId}
emptyLabel={en.blog.empty}
addHref="/blog/new"
/>
</>
)}
</BusinessMeshkeeGate>
);
}
+27
View File
@@ -0,0 +1,27 @@
"use client";
import {
BusinessListHeader,
BusinessMeshkeeGate,
} from "@/components/business/BusinessPageChrome";
import GalleryPanel from "@/components/catalog/GalleryPanel";
import { en } from "@/lib/i18n/en";
export default function BusinessGalleryPage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<>
<BusinessListHeader
title={en.gallery.title}
lead={en.gallery.lead}
/>
<GalleryPanel
meshkeeId={meshkeeId}
emptyLabel={en.gallery.empty}
/>
</>
)}
</BusinessMeshkeeGate>
);
}
+14
View File
@@ -0,0 +1,14 @@
import { ProtectedRoute } from "@/components/AuthGuards";
import BusinessShell from "@/components/BusinessShell";
export default function BusinessLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<ProtectedRoute requiredApp="business">
<BusinessShell>{children}</BusinessShell>
</ProtectedRoute>
);
}
+5
View File
@@ -0,0 +1,5 @@
import { redirect } from "next/navigation";
export default function BusinessIndexPage() {
redirect("/profile");
}
+20
View File
@@ -0,0 +1,20 @@
"use client";
import { BusinessMeshkeeGate } from "@/components/business/BusinessPageChrome";
import AddPortfolioForm from "@/components/catalog/AddPortfolioForm";
import { en } from "@/lib/i18n/en";
export default function BusinessAddPortfolioPage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<AddPortfolioForm
meshkeeId={meshkeeId}
listHref="/portfolios"
title={en.portfolios.addTitle}
lead={en.portfolios.addLead}
/>
)}
</BusinessMeshkeeGate>
);
}
+38
View File
@@ -0,0 +1,38 @@
"use client";
import Link from "next/link";
import {
BusinessListHeader,
BusinessMeshkeeGate,
} from "@/components/business/BusinessPageChrome";
import PortfoliosPanel from "@/components/catalog/PortfoliosPanel";
import { en } from "@/lib/i18n/en";
import styles from "@/components/BusinessDetailsPage.module.css";
export default function BusinessPortfoliosPage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<>
<BusinessListHeader
title={en.portfolios.title}
lead={en.portfolios.lead}
action={
<Link
href="/portfolios/new"
className={`outline-btn ${styles.actionBtn}`}
>
{en.portfolios.add}
</Link>
}
/>
<PortfoliosPanel
meshkeeId={meshkeeId}
emptyLabel={en.portfolios.empty}
addHref="/portfolios/new"
/>
</>
)}
</BusinessMeshkeeGate>
);
}
+24
View File
@@ -0,0 +1,24 @@
"use client";
import {
BusinessMeshkeeGate,
} from "@/components/business/BusinessPageChrome";
import ManageCategoriesPage from "@/components/catalog/ManageCategoriesPage";
import { en } from "@/lib/i18n/en";
export default function BusinessProductCategoriesPage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<ManageCategoriesPage
meshkeeId={meshkeeId}
entityType="product"
title={en.products.categoriesTitle}
lead={en.products.categoriesLead}
listHref="/products"
listLabel={en.products.title}
/>
)}
</BusinessMeshkeeGate>
);
}
+22
View File
@@ -0,0 +1,22 @@
"use client";
import {
BusinessMeshkeeGate,
} from "@/components/business/BusinessPageChrome";
import AddProductForm from "@/components/catalog/AddProductForm";
import { en } from "@/lib/i18n/en";
export default function BusinessAddProductPage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<AddProductForm
meshkeeId={meshkeeId}
listHref="/products"
title={en.products.addTitle}
lead={en.products.addLead}
/>
)}
</BusinessMeshkeeGate>
);
}
+46
View File
@@ -0,0 +1,46 @@
"use client";
import Link from "next/link";
import {
BusinessListHeader,
BusinessMeshkeeGate,
} from "@/components/business/BusinessPageChrome";
import ProductsPanel from "@/components/catalog/ProductsPanel";
import { en } from "@/lib/i18n/en";
import styles from "@/components/BusinessDetailsPage.module.css";
export default function BusinessProductsPage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<>
<BusinessListHeader
title={en.products.title}
lead={en.products.lead}
action={
<>
<Link
href="/products/categories"
className={`outline-btn ${styles.actionBtn}`}
>
{en.products.manageCategories}
</Link>
<Link
href="/products/new"
className={`outline-btn ${styles.actionBtn}`}
>
{en.products.add}
</Link>
</>
}
/>
<ProductsPanel
meshkeeId={meshkeeId}
emptyLabel={en.products.empty}
addHref="/products/new"
/>
</>
)}
</BusinessMeshkeeGate>
);
}
+14
View File
@@ -0,0 +1,14 @@
"use client";
import { BusinessMeshkeeGate } from "@/components/business/BusinessPageChrome";
import EditBusinessPage from "@/components/EditBusinessPage";
export default function BusinessProfilePage() {
return (
<BusinessMeshkeeGate>
{(meshkeeId) => (
<EditBusinessPage meshkeeBusinessId={meshkeeId} variant="business" />
)}
</BusinessMeshkeeGate>
);
}