const dateFmt = new Intl.DateTimeFormat("fa-IR-u-ca-persian", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", }); /** ISO date → Jalali date and time, e.g. «۱۴۰۴/۰۷/۲۹، ۱۶:۳۰» */ export const jalali = (iso: string | null | undefined) => (iso ? dateFmt.format(new Date(iso)) : "—"); export const fileSize = (bytes: number) => bytes < 1024 * 1024 ? `${(bytes / 1024).toLocaleString("fa-IR", { maximumFractionDigits: 0 })} کیلوبایت` : `${(bytes / 1024 / 1024).toLocaleString("fa-IR", { maximumFractionDigits: 1 })} مگابایت`; export const faNumber = (n: number) => n.toLocaleString("fa-IR"); /** Website base URL for "view on site" links */ export const SITE_URL = (import.meta.env.VITE_SITE_URL as string | undefined) ?? "http://localhost:3000"; const ACTION_LABELS: Record = { create: "ایجاد", update: "ویرایش", delete: "حذف", upload: "آپلود", login: "ورود", publish: "انتشار", unpublish: "عدم انتشار", duplicate: "کپی", reorder: "مرتب‌سازی", "change-password": "تغییر رمز", }; const ENTITY_LABELS: Record = { product: "محصول", category: "دسته", section: "بخش سایت", media: "رسانه", user: "کاربر", message: "پیام", }; export const activityLabel = (action: string, entity: string) => `${ACTION_LABELS[action] ?? action} ${ENTITY_LABELS[entity] ?? entity}`;