تنظیمات

همه تنظیمات محصول در یک فایل است: src/config/config.js. این فایل هیچ importی ندارد تا هم در مرورگر و هم در ابزارهای Node قابل استفاده باشد.

برند و نسخه

export const config = {
  appName: 'NOVAADMIN',
  appShortName: 'NOVA',
  tagline: 'Modern. Persian-First. Enterprise Ready.',
  version: '1.0.0',
  releaseDate: '2026-09-22',

  logo: 'assets/logo.svg',
  logoMark: 'assets/logo-mark.svg',
  logoDark: 'assets/logo-dark.svg',
  favicon: 'assets/favicon.svg',
  …
};

با تغییر appName، همه‌جا (عنوان صفحه، سایدبار، فوتر، متا، نام بسته) به‌روز می‌شود؛ مقادیر از طریق توکن‌های NOVAADMIN، Modern. Persian-First. Enterprise Ready. و 1.1.0 در زمان ساخت جای‌گذاری می‌شوند.

پیش‌فرض‌های ظاهری

کلیدمقدارهای مجازتوضیح
defaultLanguagefa, en, arزبان اولیه رابط
defaultDirectionrtl, ltrجهت اولیه
defaultThemelight, dark, systemحالت رنگ
defaultPrimaryindigo, blue, emerald, violet, orange, roseرنگ اصلی
defaultLayoutsidebar, mini, collapse, horizontal, twocol, boxedچیدمان
defaultDensitycomfortable, compactتراکم
defaultFontSizesm, md, lgاندازه پایه متن
defaultSidebarStylefixed, floating, compactسبک سایدبار
defaultCalendarjalali, gregorianتقویم پیش‌فرض

منطقه، ارز و تاریخ

currency: 'IRR',                        // IRR | USD | EUR | AED
currencyList: ['IRR', 'USD', 'EUR', 'AED'],
timezone: 'Asia/Tehran',
dateFormat: 'YYYY/MM/DD',

فرمت ارز و اعداد در src/js/core/numbers.js تعریف شده و همه‌جا از همان تابع استفاده می‌شود؛ برای افزودن ارز جدید کافی است یک سطر اضافه کنید:

export const CURRENCIES = {
  IRR: { label: 'ریال', symbol: 'ریال', digits: 0, fa: 'fa-IR' },
  USD: { label: 'دلار', symbol: '$', digits: 2, fa: 'en-US' },
  AED: { label: 'درهم', symbol: 'د.إ', digits: 2, fa: 'ar-AE' },
  EUR: { label: 'یورو', symbol: '€', digits: 2, fa: 'de-DE' },
};

رفتار و داده

storagePrefix: 'nova',          // پیشوند کلیدهای localStorage
mockLatency: [180, 420],        // تأخیر شبیه‌سازی‌شده پاسخ سرویس‌ها
mockErrors: false,              // true ⇒ گاهی پاسخ خطا برگردانده می‌شود
defaultPageSize: 10,            // تعداد سطر پیش‌فرض جدول‌ها

قابلیت‌ها

features: {
  commandPalette: true,
  globalSearch: true,
  themeCustomizer: true,
  demoSwitcher: true,
  notifications: true,
  shortcutsHelp: true,
  dashboardCustomizer: true,
  chat: true,
  aiWorkspace: true,
},

اگر قابلیتی را false کنید، دکمه و پنل مربوطه در پوسته حذف می‌شود؛ منطق آن هم اجرا نمی‌شود.

اتصال به بک‌اند

api: {
  baseUrl: '/api',
  timeout: 8000,
  useMocks: true,   // false ⇒ درخواست واقعی HTTP
},

با useMocks: false لایه سرویس‌ها به‌جای داده نمونه، درخواست واقعی می‌فرستد. جزئیات قرارداد در اتصال به API.

تغییر داده‌های نمونه

فایلمحتوا
src/data/analytics.jsسری‌های زمانی، KPI، منابع ترافیک
src/data/commerce.jsمحصولات، سفارش‌ها، موجودی، کوپن‌ها
src/data/crm.jsمخاطبین، شرکت‌ها، معاملات، کمپین‌ها
src/data/finance.jsتراکنش‌ها، فاکتورها، اشتراک‌ها
src/data/people.jsکاربران، نقش‌ها، تیم
src/data/projects.jsپروژه‌ها، تسک‌ها، کانبان
src/data/support.jsتیکت‌ها، کارشناسان، پایگاه دانش
src/data/hr.jsکارکنان، حضور، مرخصی، حقوق
src/data/logistics.jsمحموله‌ها، راننده‌ها، انبارها
src/data/ai.jsمدل‌ها، پرامپت‌ها، گفتگوها، مصرف
src/data/system.jsلندینگ، پلن‌ها، پرسش‌ها، مستندات، میان‌برها
src/data/rng.jsمولد شبه‌تصادفی با بذر ثابت (خروجی تکرارپذیر)
نکته: همه داده‌ها با rng.js و بذر ثابت ساخته می‌شوند؛ در هر بار ساخت، جدول‌ها و نمودارها یکسان‌اند

اگر داده تصادفی می‌خواهید، بذر را در rng.js تغییر دهید.

هشدار: هیچ‌وقت در فایل‌های src/data/** از import دوگانه یا وابستگی متقابل استفاده نکنید؛ این فایل‌ها باید درخت بدون دور بمانند

Configuration

All product settings live in one file: src/config/config.js. It has no imports so it can be used both in the browser and in Node tools.

Brand and version

export const config = {
  appName: 'NOVAADMIN',
  appShortName: 'NOVA',
  tagline: 'Modern. Persian-First. Enterprise Ready.',
  version: '1.0.0',
  releaseDate: '2026-09-22',

  logo: 'assets/logo.svg',
  logoMark: 'assets/logo-mark.svg',
  logoDark: 'assets/logo-dark.svg',
  favicon: 'assets/favicon.svg',
  …
};

Changing appName updates it everywhere (page title, sidebar, footer, meta, package name); values are substituted at build time through the NOVAADMIN, Modern. Persian-First. Enterprise Ready. and 1.1.0 tokens.

Appearance defaults

KeyAllowed valuesNotes
defaultLanguagefa, en, arInitial interface language
defaultDirectionrtl, ltrInitial direction
defaultThemelight, dark, systemColour mode
defaultPrimaryindigo, blue, emerald, violet, orange, rosePrimary colour
defaultLayoutsidebar, mini, collapse, horizontal, twocol, boxedLayout
defaultDensitycomfortable, compactDensity
defaultFontSizesm, md, lgBase text size
defaultSidebarStylefixed, floating, compactSidebar style
defaultCalendarjalali, gregorianDefault calendar

Region, currency and date

currency: 'IRR',                        // IRR | USD | EUR | AED
currencyList: ['IRR', 'USD', 'EUR', 'AED'],
timezone: 'Asia/Tehran',
dateFormat: 'YYYY/MM/DD',

Currency and number formatting is defined in src/js/core/numbers.js and the same function is used everywhere; adding a new currency takes a single line:

export const CURRENCIES = {
  IRR: { label: 'ریال', symbol: 'ریال', digits: 0, fa: 'fa-IR' },
  USD: { label: 'دلار', symbol: '$', digits: 2, fa: 'en-US' },
  AED: { label: 'درهم', symbol: 'د.إ', digits: 2, fa: 'ar-AE' },
  EUR: { label: 'یورو', symbol: '€', digits: 2, fa: 'de-DE' },
};

Behaviour and data

storagePrefix: 'nova',          // prefix for localStorage keys
mockLatency: [180, 420],        // simulated service response latency
mockErrors: false,              // true ⇒ occasionally returns an error response
defaultPageSize: 10,            // default number of table rows

Features

features: {
  commandPalette: true,
  globalSearch: true,
  themeCustomizer: true,
  demoSwitcher: true,
  notifications: true,
  shortcutsHelp: true,
  dashboardCustomizer: true,
  chat: true,
  aiWorkspace: true,
},

If you set a feature to false, its button and panel are removed from the shell and its logic does not run.

Connecting to a backend

api: {
  baseUrl: '/api',
  timeout: 8000,
  useMocks: true,   // false ⇒ real HTTP requests
},

With useMocks: false the service layer sends real requests instead of returning sample data. Contract details are in API integration.

Changing the sample data

FileContents
src/data/analytics.jsTime series, KPIs, traffic sources
src/data/commerce.jsProducts, orders, inventory, coupons
src/data/crm.jsContacts, companies, deals, campaigns
src/data/finance.jsTransactions, invoices, subscriptions
src/data/people.jsUsers, roles, team
src/data/projects.jsProjects, tasks, kanban
src/data/support.jsTickets, agents, knowledge base
src/data/hr.jsEmployees, attendance, leave, payroll
src/data/logistics.jsShipments, drivers, warehouses
src/data/ai.jsModels, prompts, conversations, usage
src/data/system.jsLanding, plans, FAQ, documentation, shortcuts
src/data/rng.jsPseudo-random generator with a fixed seed (reproducible output)
Tip: all data is built with rng.js and a fixed seed, so tables and charts are identical on every build

If you want random data, change the seed in rng.js.

Warning: never use duplicate imports or mutual dependencies in src/data/** files; they must remain an acyclic tree

الإعدادات

جميع إعدادات المنتج في ملف واحد: src/config/config.js. لا يحتوي هذا الملف على أي استيراد ليكون قابلاً للاستخدام في المتصفح وفي أدوات Node معاً.

العلامة والإصدار

export const config = {
  appName: 'NOVAADMIN',
  appShortName: 'NOVA',
  tagline: 'Modern. Persian-First. Enterprise Ready.',
  version: '1.0.0',
  releaseDate: '2026-09-22',

  logo: 'assets/logo.svg',
  logoMark: 'assets/logo-mark.svg',
  logoDark: 'assets/logo-dark.svg',
  favicon: 'assets/favicon.svg',
  …
};

بتغيير appName يتحدّث الاسم في كل مكان (عنوان الصفحة، الشريط الجانبي، التذييل، الوسوم الوصفية، اسم الحزمة)؛ إذ تُستبدل القيم وقت البناء عبر الرموز NOVAADMIN وModern. Persian-First. Enterprise Ready. و1.1.0.

القيم الافتراضية للمظهر

المفتاحالقيم المسموح بهاملاحظات
defaultLanguagefa, en, arلغة الواجهة الأولية
defaultDirectionrtl, ltrالاتجاه الأولي
defaultThemelight, dark, systemوضع الألوان
defaultPrimaryindigo, blue, emerald, violet, orange, roseاللون الأساسي
defaultLayoutsidebar, mini, collapse, horizontal, twocol, boxedالتخطيط
defaultDensitycomfortable, compactالكثافة
defaultFontSizesm, md, lgحجم النص الأساسي
defaultSidebarStylefixed, floating, compactنمط الشريط الجانبي
defaultCalendarjalali, gregorianالتقويم الافتراضي

المنطقة والعملة والتاريخ

currency: 'IRR',                        // IRR | USD | EUR | AED
currencyList: ['IRR', 'USD', 'EUR', 'AED'],
timezone: 'Asia/Tehran',
dateFormat: 'YYYY/MM/DD',

صيغة العملة والأرقام معرّفة في src/js/core/numbers.js وتُستخدم الدالة نفسها في كل مكان؛ ولإضافة عملة جديدة يكفي سطر واحد:

export const CURRENCIES = {
  IRR: { label: 'ریال', symbol: 'ریال', digits: 0, fa: 'fa-IR' },
  USD: { label: 'دلار', symbol: '$', digits: 2, fa: 'en-US' },
  AED: { label: 'درهم', symbol: 'د.إ', digits: 2, fa: 'ar-AE' },
  EUR: { label: 'یورو', symbol: '€', digits: 2, fa: 'de-DE' },
};

السلوك والبيانات

storagePrefix: 'nova',          // بادئة مفاتيح localStorage
mockLatency: [180, 420],        // تأخير محاكى لاستجابة الخدمات
mockErrors: false,              // true ⇒ تُعاد أحياناً استجابة خطأ
defaultPageSize: 10,            // العدد الافتراضي لصفوف الجداول

الميزات

features: {
  commandPalette: true,
  globalSearch: true,
  themeCustomizer: true,
  demoSwitcher: true,
  notifications: true,
  shortcutsHelp: true,
  dashboardCustomizer: true,
  chat: true,
  aiWorkspace: true,
},

إذا جعلت ميزة ما false، يُزال زرها ولوحتها من الهيكل ولا يُنفّذ منطقها.

الربط بالواجهة الخلفية

api: {
  baseUrl: '/api',
  timeout: 8000,
  useMocks: true,   // false ⇒ طلبات HTTP حقيقية
},

مع useMocks: false ترسل طبقة الخدمات طلبات حقيقية بدلاً من البيانات النموذجية. تفاصيل العقد في الربط بـ API.

تغيير البيانات النموذجية

الملفالمحتوى
src/data/analytics.jsالسلاسل الزمنية، مؤشرات KPI، مصادر الزيارات
src/data/commerce.jsالمنتجات، الطلبات، المخزون، القسائم
src/data/crm.jsجهات الاتصال، الشركات، الصفقات، الحملات
src/data/finance.jsالمعاملات، الفواتير، الاشتراكات
src/data/people.jsالمستخدمون، الأدوار، الفريق
src/data/projects.jsالمشاريع، المهام، كانبان
src/data/support.jsالتذاكر، الخبراء، قاعدة المعرفة
src/data/hr.jsالموظفون، الحضور، الإجازات، الرواتب
src/data/logistics.jsالشحنات، السائقون، المستودعات
src/data/ai.jsالنماذج، الموجّهات، المحادثات، الاستهلاك
src/data/system.jsالهبوط، الخطط، الأسئلة، الوثائق، الاختصارات
src/data/rng.jsمولّد شبه عشوائي ببذرة ثابتة (مخرجات قابلة للتكرار)
ملاحظة: تُبنى جميع البيانات بـ rng.js وبذرة ثابتة؛ لذا تكون الجداول والمخططات متطابقة في كل بناء

إذا أردت بيانات عشوائية، فغيّر البذرة في rng.js.

تحذير: لا تستخدم أبداً استيراداً مزدوجاً أو اعتماداً متبادلاً في ملفات src/data/**؛ يجب أن تبقى شجرة بلا حلقات