# 🚀 قالب آماده و مدرن داشبورد مدیریتی (Dashboard Starter Kit)
یک استارتر کیت پیشرفته، ماژولار و کاملاً راستچین (RTL) بر پایه **React 19**، **Tailwind CSS v4**، **Vite 8** و **Shadcn UI** طراحیشده برای ساخت سریع پنلهای ادمین و داشبوردهای سازمانی.
---
## ✨ ویژگیهای کلیدی
- **🎨 طراحی مدرن و کاملاً راستچین (RTL-First):** همراه با فونت وزیرمتن (Vazirmatn) و متغیرهای مدرن CSS.
- **🏛 شل سه ستونه هوشمند (Triple-Column Layout):**
- **سایدبار راست (Right Sidebar):** منوی جمعشونده (Collapsible Offcanvas) بر اساس کانفیگ متمرکز.
- **محتوای میانی (Main Content):** هدر ناوبری (Topbar) همراه با Breadcrumb پویا.
- **پنل کشویی چپ (Left Slide-over Panel):** باز شدن جزئیات هر رکورد از چپ بدون ترک یا فشرده شدن صفحه اصلی.
- **⚡ مدیریت پنلها و مودالها از طریق URL (`usePanelRouting`):**
- قابلیت اشتراکگذاری لینک مودال یا پنل باز (Deep Linking).
- هماهنگ با دکمه Back/Forward مرورگر و کلید Escape.
- **🔍 ابزار جستجوی سراسری هوشمند (Command Palette):** میانبر `Ctrl + K` یا `Cmd + K` برای دسترسی آنی به تمامی صفحات و اکشنهای سریع.
- **🔒 سیستم احراز هویت یکپارچه (Auth Flow):**
- صفحه لاگین با حالت آزمایشی (Demo Mode) برای تست سریع بدون نیاز به بکاند.
- کلاینت HTTP با هدرهای خودکار Bearer Token و مدیریت خطای ۴۰۱ (Auto-Logout).
- گارد امنیتی مسیرها (`RequireAuth`).
- **🧩 بیش از ۲۵ کامپوننت آماده Shadcn UI + Radix:**
- Dialog / Modal، Alert Dialog، Table، Tabs، Sheet، Select، MultiSelect، Switch، Dropdown، Accordion، Pagination و...
- **📁 معماری تمیز و فیچرمحور (Feature-Based Architecture):** سازماندهی بر اساس موجودیتها به همراه دو صفحه نمونه کامل CRUD (کاربران و آیتمها).
---
## 🛠 راهاندازی و اجرا
```bash
# ۱. نصب پکیجها
npm install
# ۲. اجرای سرور توسعه
npm run dev
# ۳. بررسی خطاهای تایپاسکریپت
npm run typecheck
# ۴. بیلد نهایی پروداکشن
npm run build
```
> **اطلاعات حساب دمو (پیشفرض):**
> - **ایمیل:** `admin@example.com`
> - **رمز عبور:** `admin`
---
## 📂 ساختار پوشهها
```text
dashboard-template/
├── src/
│ ├── app/ # روتینگ، گارد احراز هویت و شل اصلی
│ │ ├── App.tsx # بدنه اصلی (Sidebar + Topbar + PanelSlot)
│ │ ├── router.tsx # تعریف مسیرهای پروژه
│ │ └── providers.tsx # کانتکستهای عمومی (React Query و ...)
│ │
│ ├── config/ # تنظیمات متمرکز سیستم
│ │ ├── site.ts # نام پروژه، لوگو و اطلاعات برند
│ │ └── navigation.ts # لیست صفحات و منوهای سایدبار
│ │
│ ├── components/
│ │ ├── ui/ # کامپوننتهای پایه Shadcn (Button, Dialog, Table, ...)
│ │ ├── layout/ # اجزای قالب (AppSidebar, Topbar, PanelSlot)
│ │ └── shared/ # کامپوننتهای پرتکرار (TablePagination, DeleteConfirmDialog, ...)
│ │
│ ├── features/ # ماژولهای بیزینسی (Feature-based)
│ │ ├── auth/ # ورود، خروج و گارد دسترسی
│ │ ├── dashboard/ # صفحه داشبورد و آمار
│ │ ├── users/ # مدیریت کاربران (جدول، مودال ایجاد/ویرایش)
│ │ ├── items/ # مدیریت نمونه آیتمها (CRUD الگو)
│ │ ├── panels/ # پنلهای کشویی جزئیات رکوردها
│ │ ├── filters/ # دراور فیلترهای پیشرفته
│ │ └── settings/ # صفحه تنظیمات پنل
│ │
│ ├── services/ # ارتباط با سرور و API
│ │ ├── http.ts # کلاینت مرکزی Fetch با اینترسپتور توکن
│ │ ├── auth.ts # سرویس لاگین و پروفایل
│ │ ├── users-api.ts # سرویس کاربران (همراه با Mock fallback)
│ │ └── sample-api.ts # سرویس نمونه CRUD
│ │
│ ├── stores/ # استیتهای کلاینت با Zustand (Auth, Search, ...)
│ ├── hooks/ # هوکهای سفارشی (usePanelRouting, useMobile, ...)
│ ├── types.ts # تایپهای عمومی، Pagination و دامنهها
│ └── index.css # توکنهای طراحی، متغیرهای CSS و رنگهای قالب
```
---
## 📖 راهنمای استفاده در پروژههای جدید
### ۱. چگونه نام و برند داشبورد را تغییر دهم؟
فایل `src/config/site.ts` را باز کرده و عنوان و توضیحات را ویرایش کنید:
```ts
export const siteConfig = {
name: 'پنل مدیریت من',
shortName: 'داشبورد',
description: 'سیستم یکپارچه مدیریت سازمانی',
}
```
### ۲. چگونه منوی جدید به سایدبار اضافه کنم؟
فایل `src/config/navigation.ts` را ویرایش کنید. منو بهصورت خودکار در سایدبار و در پنجره `Ctrl+K` نمایش داده میشود:
```ts
{
title: 'محصولات و انبار',
items: [
{ title: 'لیست کالاها', to: '/products', icon: 'grid' },
{ title: 'سفارشها', to: '/orders', icon: 'folder', badge: '۳ جدید' },
],
}
```
### ۳. چگونه یک مودال (Modal) ایجاد و باز کنم؟
از هوک `usePanelRouting` استفاده کنید:
```tsx
import { usePanelRouting } from '@/hooks/use-panel-routing'
function MyComponent() {
const { openModal } = usePanelRouting()
return (
)
}
```
این کار پارامتر `?edit=user:new` را در URL ست میکند که باعث باز شدن مودال مربوطه میشود. برای ویرایش، شناسه رکورد را بفرستید: `openModal('user', '123')`.
### ۴. چگونه پنل کشویی جزئیات (Detail Drawer) را از سمت چپ باز کنم؟
به سادگی شناسه و نوع را با `openPanel` صدا بزنید:
```tsx
const { openPanel } = usePanelRouting()
// در رویداد کلیک روی سطر جدول:
openPanel('user', user.id)}>
```
سپس در `src/components/layout/PanelSlot.tsx` کامپوننت پنل جدیدتان را به `switch-case` اضافه نمایید.
### ۵. چگونه رنگ اصلی برند (Primary Color) را تغییر دهم؟
در فایل `src/index.css`، مقدار متغیر `--primary` را با کد رنگ دلخواهتان جایگزین کنید:
```css
:root {
--primary: #3b82f6; /* آبی کاربنی */
/* یا #10b981 (زمردی) یا #8b5cf6 (بنفش) */
}
```
---
## 💻 کپی برای پروژه جدید
برای ساخت یک پروژه جدید بر اساس این تمپلیت، کافیست محتویات این پوشه را کپی کرده و شروع به توسعه فیچرهای جدید کنید:
```bash
cp -r /path/to/dashboard-template /path/to/my-new-app
cd /path/to/my-new-app
npm install
npm run dev
```