feat(ui): modernize button design system and update Dashboard and Inventory pages

Frontend-only cherry-pick of prod_v2 3bdb05f; the dev compose
api port change (8000 -> 8001) is intentionally excluded.
This commit is contained in:
MMD
2026-09-13 00:13:57 +03:30
parent 3b032d0460
commit 50f8d8e64e
4 changed files with 175 additions and 120 deletions
@@ -1,13 +1,7 @@
import { Link } from "react-router-dom";
import { cn } from "../../lib/utils";
import { Button } from "../../components/ui/button";
// ناوبری بالای صفحه در پنل انبار — فقط روی «داشبورد انبار» (هاب) دیده می‌شود؛
// خودِ «داشبورد انبار» دکمه ندارد (ریشه/هاب است) و زیرصفحه‌ها تب ندارند و
// فقط با «بازگشت به داشبورد» به هاب برمی‌گردند.
//
// - variant="pm" (مدیر پروژه): کنترل روزانه، انبارها، کالاهای در راه —
// ورود به «تغییر موجودی» از دکمه‌ی بالای هاب است.
// - variant="admin" (مدیر تدارکات/ادمین): کنترل روزانه، کالاهای در راه، سازمان‌دهی.
// ناوبری بالای صفحه در پنل انبار — هماهنگ با دیزاین‌سیستم دکمه‌ها
export function InventoryTopNav({
pathname,
variant = "pm",
@@ -27,20 +21,20 @@ export function InventoryTopNav({
{ label: "انبارها", to: "/inventory/warehouses", active: pathname.startsWith("/inventory/warehouses") },
{ label: "کالاهای در راه", to: "/inventory/arrivals", active: pathname.startsWith("/inventory/arrivals") },
];
return (
<>
{items.map((it) => (
<Link
<Button
key={it.to}
to={it.to}
className={cn(
"btn-line-file no-underline",
it.active && "border-accent bg-accent text-white hover:bg-accent-dark",
)}
asChild
variant={it.active ? "primary" : "slate"}
>
{it.label}
</Link>
<Link to={it.to} className="no-underline">
{it.label}
</Link>
</Button>
))}
</>
);
}
}