-
-
-
-
- To get started, edit the page.tsx file.
-
-
- Looking for a starting point or more instructions? Head over to{" "}
-
- Templates
- {" "}
- or the{" "}
-
- Learning
- {" "}
- center.
-
-
-
-
+
+
);
}
diff --git a/app/theme/rtlCache.ts b/app/theme/rtlCache.ts
new file mode 100644
index 0000000..28bc9bc
--- /dev/null
+++ b/app/theme/rtlCache.ts
@@ -0,0 +1,10 @@
+import createCache from "@emotion/cache";
+import { prefixer } from "stylis";
+import rtlPlugin from "stylis-plugin-rtl";
+
+const rtlCache = createCache({
+ key: "muirtl",
+ stylisPlugins: [prefixer, rtlPlugin],
+});
+
+export default rtlCache;
diff --git a/app/theme/theme.ts b/app/theme/theme.ts
new file mode 100644
index 0000000..c1b5e77
--- /dev/null
+++ b/app/theme/theme.ts
@@ -0,0 +1,10 @@
+import { createTheme } from "@mui/material/styles";
+
+const theme = createTheme({
+ direction: "rtl",
+ typography: {
+ fontFamily: "var(--font-vazir)",
+ },
+});
+
+export default theme;
diff --git a/config/font.config.ts b/config/font.config.ts
new file mode 100644
index 0000000..6a1a29f
--- /dev/null
+++ b/config/font.config.ts
@@ -0,0 +1,48 @@
+import localFont from "next/font/local";
+
+export const FontVazir = localFont({
+ src: [
+ {
+ path: "../fonts/vazir/Vazirmatn-Thin.woff2",
+ weight: "100",
+ style: "normal",
+ },
+ {
+ path: "../fonts/vazir/Vazirmatn-ExtraLight.woff2",
+ weight: "200",
+ style: "normal",
+ },
+ {
+ path: "../fonts/vazir/Vazirmatn-Light.woff2",
+ weight: "300",
+ style: "normal",
+ },
+ {
+ path: "../fonts/vazir/Vazirmatn-Regular.woff2",
+ weight: "400",
+ style: "normal",
+ },
+ {
+ path: "../fonts/vazir/Vazirmatn-Medium.woff2",
+ weight: "500",
+ style: "normal",
+ },
+ {
+ path: "../fonts/vazir/Vazirmatn-SemiBold.woff2",
+ weight: "600",
+ style: "normal",
+ },
+ {
+ path: "../fonts/vazir/Vazirmatn-Bold.woff2",
+ weight: "700",
+ style: "normal",
+ },
+ {
+ path: "../fonts/vazir/Vazirmatn-ExtraBold.woff2",
+ weight: "800",
+ style: "normal",
+ },
+ ],
+ variable: "--font-vazir", // اگر خواستی متغیر CSS بسازی برای Tailwind یا CSS مدول
+ display: "swap", // بهترین گزینه برای نمایش فونت
+});
diff --git a/core/constant/index.ts b/core/constant/index.ts
new file mode 100644
index 0000000..b1219ce
--- /dev/null
+++ b/core/constant/index.ts
@@ -0,0 +1,109 @@
+export const API_URL = "http://localhost:8000/api/v1";
+export const requestType = [
+ {
+ id: "1",
+ name: "software",
+ displayName: "نرم افزار",
+ },
+ {
+ id: "2",
+ name: "hardware",
+ displayName: "سخت افزار",
+ },
+ {
+ id: "3",
+ name: "his",
+ displayName: "HIS",
+ },
+ {
+ id: "4",
+ name: "general",
+ displayName: "عمومي",
+ },
+];
+export const ticketStatuses = [
+ {
+ id: "open",
+ displayName: "باز",
+ bgClass: "bg-blue-50 text-blue-700 ring-blue-200",
+ dotClass: "bg-blue-600",
+ },
+ {
+ id: "in-progress",
+ displayName: "در حال بررسی",
+ bgClass: "bg-amber-50 text-amber-700 ring-amber-200",
+ dotClass: "bg-amber-600",
+ },
+ {
+ id: "resolved",
+ displayName: "حل شده",
+ bgClass: "bg-emerald-50 text-emerald-700 ring-emerald-200",
+ dotClass: "bg-emerald-600",
+ },
+ {
+ id: "closed",
+ displayName: "بسته شده",
+ bgClass: "bg-slate-100 text-slate-700 ring-slate-300",
+ dotClass: "bg-slate-500",
+ },
+];
+
+export const ticketPriorities = [
+ {
+ id: "low",
+ displayName: "پایین",
+ bgClass: "bg-slate-50 text-slate-700 ring-slate-200",
+ dotClass: "bg-slate-500",
+ },
+ {
+ id: "medium",
+ displayName: "متوسط",
+ bgClass: "bg-sky-50 text-sky-700 ring-sky-200",
+ dotClass: "bg-sky-600",
+ },
+ {
+ id: "high",
+ displayName: "بالا",
+ bgClass: "bg-orange-50 text-orange-700 ring-orange-200",
+ dotClass: "bg-orange-600",
+ },
+ {
+ id: "critical",
+ displayName: "بحرانی",
+ bgClass: "bg-rose-50 text-rose-700 ring-rose-200",
+ dotClass: "bg-rose-600",
+ },
+];
+
+export const hospitalSoftwares = [
+ {
+ id: "1",
+ name: "rahkaran",
+ displayName: "راهكاران",
+ },
+ {
+ id: "2",
+ name: "timex",
+ displayName: "تايمكس",
+ },
+ {
+ id: "3",
+ name: "automation",
+ displayName: "اتوماسيون",
+ },
+ {
+ id: "4",
+ name: "pacs",
+ displayName: "پكس",
+ },
+ {
+ id: "5",
+ name: "kasra",
+ displayName: "كسري",
+ },
+ {
+ id: "6",
+ name: "ican",
+ displayName: "ican",
+ },
+];
diff --git a/core/types/index.ts b/core/types/index.ts
new file mode 100644
index 0000000..4c3edd9
--- /dev/null
+++ b/core/types/index.ts
@@ -0,0 +1,37 @@
+// اینترفیس برای اطلاعات اساسی اشیاء وابسته
+interface Assignee {
+ fullname: string;
+}
+
+interface Department {
+ displayName: string;
+}
+
+// اینترفیس اصلی تیکت
+export interface TicketInterface {
+ id: string;
+ ticketNumber: string;
+ description: string;
+ priority: "low" | "medium" | "high" | "critical"; // اگر مقادیر مشخصی داری
+ status: "open" | "pending" | "resolved" | "closed";
+ requestType: string;
+ relatedSystem: string;
+ location: string;
+ internalPhone: string;
+ helpdeskAction: string;
+ finalNotes: string;
+
+ // فیلدهای کلیدی (FK)
+ departmentId: string;
+ assignedTo: string;
+ createdBy: string;
+
+ // فیلدهای شامل شده (Include)
+ assignee: Assignee;
+ department: Department;
+
+ // تاریخها
+ resolvedAt: Date | null;
+ createdAt: Date;
+ updatedAt: Date;
+}
diff --git a/core/utils/index.ts b/core/utils/index.ts
new file mode 100644
index 0000000..f21e079
--- /dev/null
+++ b/core/utils/index.ts
@@ -0,0 +1,91 @@
+import axios from "axios";
+import * as XLSX from "xlsx";
+import { saveAs } from "file-saver";
+export function handleAxiosError(error: unknown) {
+ if (axios.isAxiosError(error)) {
+ // اینجا میدونیم که خطا از axios است
+ return error.response?.data?.error?.message;
+ } else {
+ return "Unexpected error";
+ }
+}
+
+export const handleExport = (data: any, type: any) => {
+ // ۱. تبدیل دیتا به یک Worksheet
+ const worksheet = XLSX.utils.json_to_sheet(data);
+
+ // ۲. ایجاد یک Workbook جدید
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, "Data");
+
+ if (type === "excel") {
+ // خروجی اکسل
+ const excelBuffer = XLSX.write(workbook, {
+ bookType: "xlsx",
+ type: "array",
+ });
+ const blob = new Blob([excelBuffer], {
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ });
+ saveAs(blob, "data.xlsx");
+ } else if (type === "spss") {
+ // برای SPSS، بهترین فرمت CSV است که در SPSS به خوبی باز میشود
+ const csvData = XLSX.utils.sheet_to_csv(worksheet);
+ const blob = new Blob([csvData], { type: "text/csv;charset=utf-8;" });
+ saveAs(blob, "data.csv"); // فایل CSV در SPSS به راحتی Import میشود
+ }
+};
+
+export const exportToExcel = (
+ type: "spss" | "excel",
+ formattedData: any,
+ filename: string = "Report",
+) => {
+ // تبدیل دادهها به فرمت قابل فهم برای XLSX
+
+ let dataToProcess = Array.isArray(formattedData)
+ ? formattedData
+ : [formattedData];
+ const worksheet = XLSX.utils.json_to_sheet(formattedData);
+
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, filename);
+
+ if (type === "excel") {
+ // خروجی اکسل
+ const excelBuffer = XLSX.write(workbook, {
+ bookType: "xlsx",
+ type: "array",
+ });
+ const blob = new Blob([excelBuffer], {
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+ });
+ saveAs(blob, `${filename}.xlsx`);
+ } else if (type === "spss") {
+ // برای SPSS، بهترین فرمت CSV است که در SPSS به خوبی باز میشود
+ const csvData = XLSX.utils.sheet_to_csv(worksheet);
+ const blob = new Blob([csvData], { type: "text/csv;charset=utf-8;" });
+ saveAs(blob, `${filename}.csv`); // فایل CSV در SPSS به راحتی Import میشود
+ }
+};
+export function formatDurationPersian(seconds:string) {
+ const sec = Math.abs(parseFloat(seconds));
+
+ if (sec < 1) return "بلافاصله"; // برای مقادیر بسیار ناچیز
+ if (sec < 60) return `${Math.floor(sec)} ثانیه`;
+
+ const minutes = Math.floor(sec / 60);
+ const remainingSeconds = Math.floor(sec % 60);
+
+ if (minutes < 60) {
+ return `${minutes} دقیقه و ${remainingSeconds} ثانیه`;
+ }
+
+ const hours = Math.floor(minutes / 60);
+ const remainingMinutes = minutes % 60;
+ return `${hours} ساعت و ${remainingMinutes} دقیقه`;
+}
+
+// مثال برای مقدار شما:
+console.log(formatDurationPersian("-0.00100000000000000000"));
+// خروجی: "بلافاصله" (یا ۰ ثانیه)
diff --git a/fonts/sogand/SOGAND.ttf b/fonts/sogand/SOGAND.ttf
new file mode 100644
index 0000000..fdee227
Binary files /dev/null and b/fonts/sogand/SOGAND.ttf differ
diff --git a/fonts/vazir/Vazirmatn-Black.woff2 b/fonts/vazir/Vazirmatn-Black.woff2
new file mode 100644
index 0000000..f08cace
Binary files /dev/null and b/fonts/vazir/Vazirmatn-Black.woff2 differ
diff --git a/fonts/vazir/Vazirmatn-Bold.woff2 b/fonts/vazir/Vazirmatn-Bold.woff2
new file mode 100644
index 0000000..65b427f
Binary files /dev/null and b/fonts/vazir/Vazirmatn-Bold.woff2 differ
diff --git a/fonts/vazir/Vazirmatn-ExtraBold.woff2 b/fonts/vazir/Vazirmatn-ExtraBold.woff2
new file mode 100644
index 0000000..c074e70
Binary files /dev/null and b/fonts/vazir/Vazirmatn-ExtraBold.woff2 differ
diff --git a/fonts/vazir/Vazirmatn-ExtraLight.woff2 b/fonts/vazir/Vazirmatn-ExtraLight.woff2
new file mode 100644
index 0000000..997dea0
Binary files /dev/null and b/fonts/vazir/Vazirmatn-ExtraLight.woff2 differ
diff --git a/fonts/vazir/Vazirmatn-Light.woff2 b/fonts/vazir/Vazirmatn-Light.woff2
new file mode 100644
index 0000000..d154722
Binary files /dev/null and b/fonts/vazir/Vazirmatn-Light.woff2 differ
diff --git a/fonts/vazir/Vazirmatn-Medium.woff2 b/fonts/vazir/Vazirmatn-Medium.woff2
new file mode 100644
index 0000000..495af75
Binary files /dev/null and b/fonts/vazir/Vazirmatn-Medium.woff2 differ
diff --git a/fonts/vazir/Vazirmatn-Regular.woff2 b/fonts/vazir/Vazirmatn-Regular.woff2
new file mode 100644
index 0000000..c9824c8
Binary files /dev/null and b/fonts/vazir/Vazirmatn-Regular.woff2 differ
diff --git a/fonts/vazir/Vazirmatn-SemiBold.woff2 b/fonts/vazir/Vazirmatn-SemiBold.woff2
new file mode 100644
index 0000000..5301641
Binary files /dev/null and b/fonts/vazir/Vazirmatn-SemiBold.woff2 differ
diff --git a/fonts/vazir/Vazirmatn-Thin.woff2 b/fonts/vazir/Vazirmatn-Thin.woff2
new file mode 100644
index 0000000..b7df278
Binary files /dev/null and b/fonts/vazir/Vazirmatn-Thin.woff2 differ
diff --git a/middleware.ts b/middleware.ts
new file mode 100644
index 0000000..c48b5ac
--- /dev/null
+++ b/middleware.ts
@@ -0,0 +1,54 @@
+// middleware.ts
+import { NextResponse } from "next/server";
+import type { NextRequest } from "next/server";
+
+// کلید کوکی که توکن در آن ذخیره میشود
+const AUTH_COOKIE_KEY = "userToken"; // <<< این را با نام واقعی کوکی خودتان جایگزین کنید
+
+export function middleware(request: NextRequest) {
+ const token = request.cookies.get(AUTH_COOKIE_KEY)?.value;
+ const { pathname } = request.nextUrl;
+
+ // مسیرهای عمومی که نیاز به احراز هویت ندارند (مثلا برای لاگین و ثبت نام)
+ const publicPaths = ["/"];
+
+ // اگر کاربر توکن دارد
+ if (token) {
+ // اگر در مسیر لاگین است، به داشبورد هدایت کن
+ if (pathname === "/") {
+ const url = request.nextUrl.clone();
+ url.pathname = "/tickets/create";
+ return NextResponse.redirect(url);
+ }
+ // در غیر این صورت، اجازه دسترسی به مسیر فعلی را بده
+ return NextResponse.next();
+ } else {
+ // اگر کاربر توکن ندارد
+ // اگر در مسیرهای عمومی است، اجازه دسترسی بده
+ if (publicPaths.includes(pathname)) {
+ return NextResponse.next();
+ }
+ // اگر در مسیرهای خصوصی است (مثل داشبورد)، به صفحه لاگین هدایت کن
+ if (pathname.startsWith("/tickets/create")) {
+ const url = request.nextUrl.clone();
+ url.pathname = "/";
+ return NextResponse.redirect(url);
+ }
+ // برای سایر مسیرهای خصوصی ناشناس
+ return NextResponse.next(); // یا هدایت به صفحه لاگین
+ }
+}
+
+// تنظیمات middleware: کدام مسیرها را پوشش دهد
+export const config = {
+ matcher: [
+ /*
+ * Match all request paths except for the ones starting with:
+ * - api (API routes)
+ * - _next/static (static files)
+ * - _next/image (image optimization files)
+ * - favicon.ico (favicon file)
+ */
+ "/((?!api|_next/static|_next/image|favicon.ico).*)",
+ ],
+};
diff --git a/package-lock.json b/package-lock.json
index 4984db5..d1b07e9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,15 +8,33 @@
"name": "frontend",
"version": "0.1.0",
"dependencies": {
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.1",
+ "@mui/icons-material": "^9.0.1",
+ "@mui/material": "^9.0.1",
+ "@mui/material-nextjs": "^9.0.1",
+ "@mui/x-date-pickers": "^9.3.0",
+ "@tanstack/react-query": "^5.100.11",
+ "axios": "^1.16.1",
+ "date-fns": "^4.3.0",
+ "date-fns-jalali": "^4.0.0-0",
+ "file-saver": "^2.0.5",
"next": "16.2.6",
"react": "19.2.4",
- "react-dom": "19.2.4"
+ "react-dom": "19.2.4",
+ "react-paginate": "^8.3.0",
+ "react-toastify": "^11.1.0",
+ "stylis": "^4.4.0",
+ "stylis-plugin-rtl": "^2.1.1",
+ "xlsx": "^0.18.5"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
+ "@types/file-saver": "^2.0.7",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
+ "@types/stylis": "^4.2.7",
"eslint": "^9",
"eslint-config-next": "16.2.6",
"tailwindcss": "^4",
@@ -40,7 +58,6 @@
"version": "7.29.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/code-frame/-/code-frame-7.29.0.tgz",
"integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.28.5",
@@ -96,7 +113,6 @@
"version": "7.29.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/generator/-/generator-7.29.1.tgz",
"integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.29.0",
@@ -130,7 +146,6 @@
"version": "7.28.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
"integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -140,7 +155,6 @@
"version": "7.28.6",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
"integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.28.6",
@@ -172,7 +186,6 @@
"version": "7.27.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -182,7 +195,6 @@
"version": "7.28.5",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
"integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -216,7 +228,6 @@
"version": "7.29.3",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/parser/-/parser-7.29.3.tgz",
"integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.29.0"
@@ -228,11 +239,19 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/runtime": {
+ "version": "7.29.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@babel/runtime/-/runtime-7.29.2.tgz",
+ "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/template": {
"version": "7.28.6",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/template/-/template-7.28.6.tgz",
"integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.28.6",
@@ -247,7 +266,6 @@
"version": "7.29.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/traverse/-/traverse-7.29.0.tgz",
"integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.29.0",
@@ -266,7 +284,6 @@
"version": "7.29.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/@babel/types/-/types-7.29.0.tgz",
"integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
@@ -309,6 +326,170 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@emotion/babel-plugin": {
+ "version": "11.13.5",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
+ "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/serialize": "^1.3.3",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/babel-plugin/node_modules/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/cache": {
+ "version": "11.14.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/cache/-/cache-11.14.0.tgz",
+ "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/sheet": "^1.4.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/cache/node_modules/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/hash/-/hash-0.9.2.tgz",
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.4.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz",
+ "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.9.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/memoize/-/memoize-0.9.0.tgz",
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.14.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/react/-/react-11.14.0.tgz",
+ "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/cache": "^11.14.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.3.3",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/serialize/-/serialize-1.3.3.tgz",
+ "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/unitless": "^0.10.0",
+ "@emotion/utils": "^1.4.2",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.4.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/sheet/-/sheet-1.4.0.tgz",
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/styled": {
+ "version": "11.14.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/styled/-/styled-11.14.1.tgz",
+ "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/is-prop-valid": "^1.3.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.0.0-rc.0",
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.10.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/unitless/-/unitless-0.10.0.tgz",
+ "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.2.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
+ "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.4.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/utils/-/utils-1.4.2.tgz",
+ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.4.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
+ "license": "MIT"
+ },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.9.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
@@ -989,7 +1170,6 @@
"version": "0.3.13",
"resolved": "https://package-mirror.liara.ir/repository/npm/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0",
@@ -1011,7 +1191,6 @@
"version": "3.1.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
@@ -1021,20 +1200,422 @@
"version": "1.5.5",
"resolved": "https://package-mirror.liara.ir/repository/npm/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.31",
"resolved": "https://package-mirror.liara.ir/repository/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@mui/core-downloads-tracker": {
+ "version": "9.0.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/core-downloads-tracker/-/core-downloads-tracker-9.0.1.tgz",
+ "integrity": "sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ }
+ },
+ "node_modules/@mui/icons-material": {
+ "version": "9.0.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/icons-material/-/icons-material-9.0.1.tgz",
+ "integrity": "sha512-5PRpQjVLTNLyV/2J9J53Yz4R0tVbodG0BQDN2zQI1QBG1OPYM25ar+4N20eyFOfJT6zKglLzsnU70+zdVLaTkw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@mui/material": "^9.0.1",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/material": {
+ "version": "9.0.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/material/-/material-9.0.1.tgz",
+ "integrity": "sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@mui/core-downloads-tracker": "^9.0.1",
+ "@mui/system": "^9.0.1",
+ "@mui/types": "^9.0.0",
+ "@mui/utils": "^9.0.1",
+ "@popperjs/core": "^2.11.8",
+ "@types/react-transition-group": "^4.4.12",
+ "clsx": "^2.1.1",
+ "csstype": "^3.2.3",
+ "prop-types": "^15.8.1",
+ "react-is": "^19.2.4",
+ "react-transition-group": "^4.4.5"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.5.0",
+ "@emotion/styled": "^11.3.0",
+ "@mui/material-pigment-css": "^9.0.1",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@mui/material-pigment-css": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/material-nextjs": {
+ "version": "9.0.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/material-nextjs/-/material-nextjs-9.0.1.tgz",
+ "integrity": "sha512-kUPGNMOam7bZs4wgjfAEJb/hpNlWTiHcS9+1XVRsEF7I0ImvmVxvb1DMDj3hG3cfq0PggXBSwihzVJe5iFFzwg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/cache": "^11.11.0",
+ "@emotion/react": "^11.11.4",
+ "@emotion/server": "^11.11.0",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "next": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/cache": {
+ "optional": true
+ },
+ "@emotion/server": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/material/node_modules/react-is": {
+ "version": "19.2.6",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/react-is/-/react-is-19.2.6.tgz",
+ "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==",
+ "license": "MIT"
+ },
+ "node_modules/@mui/private-theming": {
+ "version": "9.0.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/private-theming/-/private-theming-9.0.1.tgz",
+ "integrity": "sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@mui/utils": "^9.0.1",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/styled-engine": {
+ "version": "9.0.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/styled-engine/-/styled-engine-9.0.0.tgz",
+ "integrity": "sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@emotion/cache": "^11.14.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/sheet": "^1.4.0",
+ "csstype": "^3.2.3",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.4.1",
+ "@emotion/styled": "^11.3.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/system": {
+ "version": "9.0.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/system/-/system-9.0.1.tgz",
+ "integrity": "sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@mui/private-theming": "^9.0.1",
+ "@mui/styled-engine": "^9.0.0",
+ "@mui/types": "^9.0.0",
+ "@mui/utils": "^9.0.1",
+ "clsx": "^2.1.1",
+ "csstype": "^3.2.3",
+ "prop-types": "^15.8.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.5.0",
+ "@emotion/styled": "^11.3.0",
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/types": {
+ "version": "9.0.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/types/-/types-9.0.0.tgz",
+ "integrity": "sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/utils": {
+ "version": "9.0.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/utils/-/utils-9.0.1.tgz",
+ "integrity": "sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@mui/types": "^9.0.0",
+ "@types/prop-types": "^15.7.15",
+ "clsx": "^2.1.1",
+ "prop-types": "^15.8.1",
+ "react-is": "^19.2.4"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/utils/node_modules/react-is": {
+ "version": "19.2.6",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/react-is/-/react-is-19.2.6.tgz",
+ "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==",
+ "license": "MIT"
+ },
+ "node_modules/@mui/x-date-pickers": {
+ "version": "9.3.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/x-date-pickers/-/x-date-pickers-9.3.0.tgz",
+ "integrity": "sha512-Kg9mEZA+nHKi55DsbzVVMUhURQU6MQXtAEKjgyMqyaq1PMZ8Nr72KszqGhZZNmVkyM91wcq/icYgRVzYa65Gow==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@mui/utils": "9.0.1",
+ "@mui/x-internals": "^9.1.0",
+ "@types/react-transition-group": "^4.4.12",
+ "clsx": "^2.1.1",
+ "prop-types": "^15.8.1",
+ "react-transition-group": "^4.4.5"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@emotion/react": "^11.9.0",
+ "@emotion/styled": "^11.8.1",
+ "@mui/material": "^7.3.0 || ^9.0.0",
+ "@mui/system": "^7.3.0 || ^9.0.0",
+ "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0",
+ "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0",
+ "dayjs": "^1.10.7",
+ "luxon": "^3.0.2",
+ "moment": "^2.29.4",
+ "moment-hijri": "^2.1.2 || ^3.0.0",
+ "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/react": {
+ "optional": true
+ },
+ "@emotion/styled": {
+ "optional": true
+ },
+ "date-fns": {
+ "optional": true
+ },
+ "date-fns-jalali": {
+ "optional": true
+ },
+ "dayjs": {
+ "optional": true
+ },
+ "luxon": {
+ "optional": true
+ },
+ "moment": {
+ "optional": true
+ },
+ "moment-hijri": {
+ "optional": true
+ },
+ "moment-jalaali": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/x-internals": {
+ "version": "9.1.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/x-internals/-/x-internals-9.1.0.tgz",
+ "integrity": "sha512-fVezTa1lU+Hb3y9UMI8D/iWXADhs0I8PaZqoh2LOUXjGEUJmKqwsRD19ZXInZsH2yu+YS0dqYMPDvzjYTTyo+Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@mui/utils": "9.0.0",
+ "reselect": "^5.1.1",
+ "use-sync-external-store": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@mui/x-internals/node_modules/@mui/utils": {
+ "version": "9.0.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@mui/utils/-/utils-9.0.0.tgz",
+ "integrity": "sha512-bQcqyg/gjULUqTuyUjSAFr6LQGLvtkNtDbJerAtoUn9kGZ0hg5QJiN1PLHMLbeFpe3te1831uq7GFl2ITokGdg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.29.2",
+ "@mui/types": "^9.0.0",
+ "@types/prop-types": "^15.7.15",
+ "clsx": "^2.1.1",
+ "prop-types": "^15.8.1",
+ "react-is": "^19.2.4"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mui/x-internals/node_modules/react-is": {
+ "version": "19.2.6",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/react-is/-/react-is-19.2.6.tgz",
+ "integrity": "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw==",
+ "license": "MIT"
+ },
"node_modules/@napi-rs/wasm-runtime": {
"version": "0.2.12",
"resolved": "https://package-mirror.liara.ir/repository/npm/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
@@ -1240,6 +1821,16 @@
"node": ">=12.4.0"
}
},
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -1527,6 +2118,32 @@
"tailwindcss": "4.3.0"
}
},
+ "node_modules/@tanstack/query-core": {
+ "version": "5.100.11",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@tanstack/query-core/-/query-core-5.100.11.tgz",
+ "integrity": "sha512-lmE0994apShXPj8CUxgx4ch5yUJhE9k/+tVwihBvPOyerACWdBocfFg24t8+0RhtlTd7tEgchDkhlCxNssvDxw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-query": {
+ "version": "5.100.11",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@tanstack/react-query/-/react-query-5.100.11.tgz",
+ "integrity": "sha512-J0f9s5x3LE1450nNNfYx+e/n0DMa0uOBdFJUy5r0RvmsXd4nB/n0rbHtHI1vYXhikNFan+wf51p6Tmp4c8ucrg==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/query-core": "5.100.11"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19"
+ }
+ },
"node_modules/@tybys/wasm-util": {
"version": "0.10.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/@tybys/wasm-util/-/wasm-util-0.10.2.tgz",
@@ -1545,6 +2162,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/file-saver": {
+ "version": "2.0.7",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@types/file-saver/-/file-saver-2.0.7.tgz",
+ "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://package-mirror.liara.ir/repository/npm/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -1569,11 +2193,22 @@
"undici-types": "~6.21.0"
}
},
+ "node_modules/@types/parse-json": {
+ "version": "4.0.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.15",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@types/prop-types/-/prop-types-15.7.15.tgz",
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
+ "license": "MIT"
+ },
"node_modules/@types/react": {
"version": "19.2.14",
"resolved": "https://package-mirror.liara.ir/repository/npm/@types/react/-/react-19.2.14.tgz",
"integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==",
- "dev": true,
"license": "MIT",
"dependencies": {
"csstype": "^3.2.2"
@@ -1589,6 +2224,22 @@
"@types/react": "^19.2.0"
}
},
+ "node_modules/@types/react-transition-group": {
+ "version": "4.4.12",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
+ "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/stylis": {
+ "version": "4.2.7",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/@types/stylis/-/stylis-4.2.7.tgz",
+ "integrity": "sha512-VgDNokpBoKF+wrdvhAAfS55OMQpL6QRglwTwNC3kIgBrzZxA4WsFj+2eLfEA/uMUDzBcEhYmjSbwQakn/i3ajA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.59.3",
"resolved": "https://package-mirror.liara.ir/repository/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.3.tgz",
@@ -2176,6 +2827,27 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/adler-32": {
+ "version": "1.3.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/adler-32/-/adler-32-1.3.1.tgz",
+ "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
"node_modules/ajv": {
"version": "6.15.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/ajv/-/ajv-6.15.0.tgz",
@@ -2403,6 +3075,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://package-mirror.liara.ir/repository/npm/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -2429,6 +3107,18 @@
"node": ">=4"
}
},
+ "node_modules/axios": {
+ "version": "1.16.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/axios/-/axios-1.16.1.tgz",
+ "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==",
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.16.0",
+ "form-data": "^4.0.5",
+ "https-proxy-agent": "^5.0.1",
+ "proxy-from-env": "^2.1.0"
+ }
+ },
"node_modules/axobject-query": {
"version": "4.1.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/axobject-query/-/axobject-query-4.1.0.tgz",
@@ -2439,6 +3129,42 @@
"node": ">= 0.4"
}
},
+ "node_modules/babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/babel-plugin-macros/node_modules/resolve": {
+ "version": "1.22.12",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/resolve/-/resolve-1.22.12.tgz",
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -2539,7 +3265,6 @@
"version": "1.0.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -2570,7 +3295,6 @@
"version": "3.1.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -2596,6 +3320,19 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/cfb": {
+ "version": "1.2.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/cfb/-/cfb-1.2.2.tgz",
+ "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "adler-32": "~1.3.0",
+ "crc-32": "~1.2.0"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/chalk/-/chalk-4.1.2.tgz",
@@ -2619,6 +3356,24 @@
"integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
"license": "MIT"
},
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/codepage": {
+ "version": "1.15.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/codepage/-/codepage-1.15.0.tgz",
+ "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/color-convert/-/color-convert-2.0.1.tgz",
@@ -2639,6 +3394,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/concat-map/-/concat-map-0.0.1.tgz",
@@ -2653,6 +3420,34 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/cosmiconfig": {
+ "version": "7.1.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://package-mirror.liara.ir/repository/npm/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -2668,11 +3463,19 @@
"node": ">= 8"
}
},
+ "node_modules/cssjanus": {
+ "version": "2.3.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/cssjanus/-/cssjanus-2.3.0.tgz",
+ "integrity": "sha512-ZZXXn51SnxRxAZ6fdY7mBDPmA4OZd83q/J9Gdqz3YmE9TUq+9tZl+tdOnCi7PpNygI6PEkehj9rgifv5+W8a5A==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
"node_modules/csstype": {
"version": "3.2.3",
"resolved": "https://package-mirror.liara.ir/repository/npm/csstype/-/csstype-3.2.3.tgz",
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/damerau-levenshtein": {
@@ -2736,11 +3539,26 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/date-fns": {
+ "version": "4.3.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/date-fns/-/date-fns-4.3.0.tgz",
+ "integrity": "sha512-OYcL+3N/jyWbYdFGqoMAhytDgxP9pbYPUUiRCOgn4Fewaadk9l/Wam4Avciiyp2BgkpfQyBV9B+ehnVJych+eQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
+ "node_modules/date-fns-jalali": {
+ "version": "4.0.0-0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/date-fns-jalali/-/date-fns-jalali-4.0.0-0.tgz",
+ "integrity": "sha512-EczB+gWceuWCRlacE4T+WmdP+BV/IUQpjQW9aBa9DNcXkKuZFv3WBDqeP2Ew+6YFBtPRRcH5U22+C6gcpwgG8A==",
+ "license": "MIT"
+ },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://package-mirror.liara.ir/repository/npm/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -2797,6 +3615,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
"node_modules/detect-libc": {
"version": "2.1.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/detect-libc/-/detect-libc-2.1.2.tgz",
@@ -2820,11 +3647,20 @@
"node": ">=0.10.0"
}
},
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
@@ -2863,6 +3699,15 @@
"node": ">=10.13.0"
}
},
+ "node_modules/error-ex": {
+ "version": "1.3.4",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/error-ex/-/error-ex-1.3.4.tgz",
+ "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
"node_modules/es-abstract": {
"version": "1.24.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/es-abstract/-/es-abstract-1.24.2.tgz",
@@ -2936,7 +3781,6 @@
"version": "1.0.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -2946,7 +3790,6 @@
"version": "1.3.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -2984,7 +3827,6 @@
"version": "1.1.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
@@ -2997,7 +3839,6 @@
"version": "2.1.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -3054,7 +3895,6 @@
"version": "4.0.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -3543,6 +4383,12 @@
"node": ">=16.0.0"
}
},
+ "node_modules/file-saver": {
+ "version": "2.0.5",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/file-saver/-/file-saver-2.0.5.tgz",
+ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==",
+ "license": "MIT"
+ },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/fill-range/-/fill-range-7.1.1.tgz",
@@ -3556,6 +4402,12 @@
"node": ">=8"
}
},
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "license": "MIT"
+ },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/find-up/-/find-up-5.0.0.tgz",
@@ -3594,6 +4446,26 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/follow-redirects": {
+ "version": "1.16.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
"node_modules/for-each": {
"version": "0.3.5",
"resolved": "https://package-mirror.liara.ir/repository/npm/for-each/-/for-each-0.3.5.tgz",
@@ -3610,11 +4482,35 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/form-data": {
+ "version": "4.0.5",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.2",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/frac": {
+ "version": "1.1.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/frac/-/frac-1.1.2.tgz",
+ "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3675,7 +4571,6 @@
"version": "1.3.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
@@ -3700,7 +4595,6 @@
"version": "1.0.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
@@ -3788,7 +4682,6 @@
"version": "1.2.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -3860,7 +4753,6 @@
"version": "1.1.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -3873,7 +4765,6 @@
"version": "1.0.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
@@ -3889,7 +4780,6 @@
"version": "2.0.3",
"resolved": "https://package-mirror.liara.ir/repository/npm/hasown/-/hasown-2.0.3.tgz",
"integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -3915,6 +4805,28 @@
"hermes-estree": "0.25.1"
}
},
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/ignore/-/ignore-5.3.2.tgz",
@@ -3929,7 +4841,6 @@
"version": "3.3.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/import-fresh/-/import-fresh-3.3.1.tgz",
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
- "dev": true,
"license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
@@ -3985,6 +4896,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "license": "MIT"
+ },
"node_modules/is-async-function": {
"version": "2.1.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/is-async-function/-/is-async-function-2.1.1.tgz",
@@ -4078,7 +4995,6 @@
"version": "2.16.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/is-core-module/-/is-core-module-2.16.2.tgz",
"integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
- "dev": true,
"license": "MIT",
"dependencies": {
"hasown": "^2.0.3"
@@ -4428,7 +5344,6 @@
"version": "4.0.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true,
"license": "MIT"
},
"node_modules/js-yaml": {
@@ -4448,7 +5363,6 @@
"version": "3.1.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/jsesc/-/jsesc-3.1.0.tgz",
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
@@ -4464,6 +5378,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "license": "MIT"
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -4812,6 +5732,12 @@
"url": "https://opencollective.com/parcel"
}
},
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "license": "MIT"
+ },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/locate-path/-/locate-path-6.0.0.tgz",
@@ -4839,7 +5765,6 @@
"version": "1.4.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dev": true,
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
@@ -4872,7 +5797,6 @@
"version": "1.1.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -4902,6 +5826,27 @@
"node": ">=8.6"
}
},
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/minimatch": {
"version": "3.1.5",
"resolved": "https://package-mirror.liara.ir/repository/npm/minimatch/-/minimatch-3.1.5.tgz",
@@ -4929,7 +5874,6 @@
"version": "2.1.3",
"resolved": "https://package-mirror.liara.ir/repository/npm/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
"license": "MIT"
},
"node_modules/nanoid": {
@@ -5084,7 +6028,6 @@
"version": "4.1.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -5275,7 +6218,6 @@
"version": "1.0.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
"license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
@@ -5284,6 +6226,24 @@
"node": ">=6"
}
},
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/path-exists/-/path-exists-4.0.0.tgz",
@@ -5308,9 +6268,17 @@
"version": "1.0.7",
"resolved": "https://package-mirror.liara.ir/repository/npm/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
"license": "MIT"
},
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/picocolors/-/picocolors-1.1.1.tgz",
@@ -5383,7 +6351,6 @@
"version": "15.8.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"loose-envify": "^1.4.0",
@@ -5391,6 +6358,15 @@
"react-is": "^16.13.1"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "2.1.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/punycode/-/punycode-2.3.1.tgz",
@@ -5447,9 +6423,49 @@
"version": "16.13.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true,
"license": "MIT"
},
+ "node_modules/react-paginate": {
+ "version": "8.3.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/react-paginate/-/react-paginate-8.3.0.tgz",
+ "integrity": "sha512-TptZE37HPkT3R+7AszWA++LOTIsIHXcCSWMP9WW/abeF8sLpJzExFB/dVs7xbtqteJ5njF6kk+udTDC0AR3y5w==",
+ "license": "MIT",
+ "dependencies": {
+ "prop-types": "^15"
+ },
+ "peerDependencies": {
+ "react": "^16 || ^17 || ^18 || ^19"
+ }
+ },
+ "node_modules/react-toastify": {
+ "version": "11.1.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/react-toastify/-/react-toastify-11.1.0.tgz",
+ "integrity": "sha512-e9h23x3phN0wbFeB6yovmWp7lobzV4CaCH0LO8nVP6H7Y+3GbcLpIzMm9dJhcp1RXbpyfvjgpfXqO80QAmn7sg==",
+ "license": "MIT",
+ "dependencies": {
+ "clsx": "^2.1.1"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19",
+ "react-dom": "^18 || ^19"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.5",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/react-transition-group/-/react-transition-group-4.4.5.tgz",
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
"node_modules/reflect.getprototypeof": {
"version": "1.0.10",
"resolved": "https://package-mirror.liara.ir/repository/npm/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -5494,6 +6510,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/reselect": {
+ "version": "5.2.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/reselect/-/reselect-5.2.0.tgz",
+ "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==",
+ "license": "MIT"
+ },
"node_modules/resolve": {
"version": "2.0.0-next.7",
"resolved": "https://package-mirror.liara.ir/repository/npm/resolve/-/resolve-2.0.0-next.7.tgz",
@@ -5522,7 +6544,6 @@
"version": "4.0.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
@@ -5850,6 +6871,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -5859,6 +6889,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ssf": {
+ "version": "0.11.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/ssf/-/ssf-0.11.2.tgz",
+ "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "frac": "~1.1.2"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/stable-hash": {
"version": "0.0.5",
"resolved": "https://package-mirror.liara.ir/repository/npm/stable-hash/-/stable-hash-0.0.5.tgz",
@@ -6039,6 +7081,24 @@
}
}
},
+ "node_modules/stylis": {
+ "version": "4.4.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/stylis/-/stylis-4.4.0.tgz",
+ "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==",
+ "license": "MIT"
+ },
+ "node_modules/stylis-plugin-rtl": {
+ "version": "2.1.1",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/stylis-plugin-rtl/-/stylis-plugin-rtl-2.1.1.tgz",
+ "integrity": "sha512-q6xIkri6fBufIO/sV55md2CbgS5c6gg9EhSVATtHHCdOnbN/jcI0u3lYhNVeuI65c4lQPo67g8xmq5jrREvzlg==",
+ "license": "MIT",
+ "dependencies": {
+ "cssjanus": "^2.0.1"
+ },
+ "peerDependencies": {
+ "stylis": "4.x"
+ }
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/supports-color/-/supports-color-7.2.0.tgz",
@@ -6056,7 +7116,6 @@
"version": "1.0.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -6423,6 +7482,15 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://package-mirror.liara.ir/repository/npm/which/-/which-2.0.2.tgz",
@@ -6528,6 +7596,24 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/wmf": {
+ "version": "1.0.2",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/wmf/-/wmf-1.0.2.tgz",
+ "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/word": {
+ "version": "0.3.0",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/word/-/word-0.3.0.tgz",
+ "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/word-wrap": {
"version": "1.2.5",
"resolved": "https://package-mirror.liara.ir/repository/npm/word-wrap/-/word-wrap-1.2.5.tgz",
@@ -6538,6 +7624,27 @@
"node": ">=0.10.0"
}
},
+ "node_modules/xlsx": {
+ "version": "0.18.5",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/xlsx/-/xlsx-0.18.5.tgz",
+ "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "adler-32": "~1.3.0",
+ "cfb": "~1.2.1",
+ "codepage": "~1.15.0",
+ "crc-32": "~1.2.1",
+ "ssf": "~0.11.2",
+ "wmf": "~1.0.1",
+ "word": "~0.3.0"
+ },
+ "bin": {
+ "xlsx": "bin/xlsx.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://package-mirror.liara.ir/repository/npm/yallist/-/yallist-3.1.1.tgz",
@@ -6545,6 +7652,15 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/yaml": {
+ "version": "1.10.3",
+ "resolved": "https://package-mirror.liara.ir/repository/npm/yaml/-/yaml-1.10.3.tgz",
+ "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://package-mirror.liara.ir/repository/npm/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index ce3cfc0..c24be44 100644
--- a/package.json
+++ b/package.json
@@ -9,15 +9,33 @@
"lint": "eslint"
},
"dependencies": {
+ "@emotion/react": "^11.14.0",
+ "@emotion/styled": "^11.14.1",
+ "@mui/icons-material": "^9.0.1",
+ "@mui/material": "^9.0.1",
+ "@mui/material-nextjs": "^9.0.1",
+ "@mui/x-date-pickers": "^9.3.0",
+ "@tanstack/react-query": "^5.100.11",
+ "axios": "^1.16.1",
+ "date-fns": "^4.3.0",
+ "date-fns-jalali": "^4.0.0-0",
+ "file-saver": "^2.0.5",
"next": "16.2.6",
"react": "19.2.4",
- "react-dom": "19.2.4"
+ "react-dom": "19.2.4",
+ "react-paginate": "^8.3.0",
+ "react-toastify": "^11.1.0",
+ "stylis": "^4.4.0",
+ "stylis-plugin-rtl": "^2.1.1",
+ "xlsx": "^0.18.5"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
+ "@types/file-saver": "^2.0.7",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
+ "@types/stylis": "^4.2.7",
"eslint": "^9",
"eslint-config-next": "16.2.6",
"tailwindcss": "^4",
diff --git a/services/api/auth.api.ts b/services/api/auth.api.ts
new file mode 100644
index 0000000..6fe4431
--- /dev/null
+++ b/services/api/auth.api.ts
@@ -0,0 +1,6 @@
+import callAPI from "../caller/config";
+
+export async function loginUser(data: any) {
+ return await callAPI.post("/auth/login", data).then((res) => res.data);
+}
+
diff --git a/services/api/department.api.ts b/services/api/department.api.ts
new file mode 100644
index 0000000..8ca13aa
--- /dev/null
+++ b/services/api/department.api.ts
@@ -0,0 +1,5 @@
+import callAPI from "../caller/config";
+
+export async function getDepartments() {
+ return await callAPI.get("/department/all").then((res) => res.data);
+}
\ No newline at end of file
diff --git a/services/api/report.api.ts b/services/api/report.api.ts
new file mode 100644
index 0000000..1fdbd4f
--- /dev/null
+++ b/services/api/report.api.ts
@@ -0,0 +1,53 @@
+import callAPI from "../caller/config";
+
+export async function getStatsReport() {
+ return await callAPI.get("/report/stats").then((res) => res.data);
+}
+
+export async function getDepartmentReport() {
+ return await callAPI.get("/report/departments").then((res) => res.data);
+}
+
+export async function getAgentPerformance() {
+ return await callAPI.get("/report/agents").then((res) => res.data);
+}
+
+export async function getAvgResolutionTime() {
+ return await callAPI.get("/report/avg-resolution").then((res) => res.data);
+}
+
+export async function getCriticalTickets() {
+ return await callAPI.get("/report/critical").then((res) => res.data);
+}
+
+export async function getTicketsTrend(params: any) {
+ return await callAPI.get("/report/trend", { params }).then((res) => res.data);
+}
+
+export async function getClosureRate() {
+ return await callAPI.get("/report/closure-rate").then((res) => res.data);
+}
+
+export async function getSlaBreach() {
+ return await callAPI.get("/report/sla").then((res) => res.data);
+}
+
+export async function getAgingReport() {
+ return await callAPI.get("/report/aging").then((res) => res.data);
+}
+
+export async function getAgentEfficiency() {
+ return await callAPI.get("/report/agent-efficiency").then((res) => res.data);
+}
+
+export async function getDepartmentLoad() {
+ return await callAPI.get("/report/department-load").then((res) => res.data);
+}
+
+export async function getKpiReport() {
+ return await callAPI.get("/report/kpi").then((res) => res.data);
+}
+
+export async function getPredictionReport() {
+ return await callAPI.get("/report/prediction").then((res) => res.data);
+}
diff --git a/services/api/ticket.api.ts b/services/api/ticket.api.ts
new file mode 100644
index 0000000..8453396
--- /dev/null
+++ b/services/api/ticket.api.ts
@@ -0,0 +1,17 @@
+import callAPI from "../caller/config";
+
+export async function createTicket(data: any) {
+ return await callAPI.post("/ticket/create", data).then((res) => res.data);
+}
+
+export async function getAllTickets(params: any) {
+ return await callAPI.get("/ticket/all", { params }).then((res) => res.data);
+}
+
+export async function removeTicket(id: string) {
+ return await callAPI.delete(`/ticket/remove/${id}`).then((res) => res.data);
+}
+
+export async function getAllTicketsExport(params: any) {
+ return await callAPI.get("/ticket/all/export", { params }).then((res) => res.data);
+}
\ No newline at end of file
diff --git a/services/api/users.api.ts b/services/api/users.api.ts
new file mode 100644
index 0000000..b63cc68
--- /dev/null
+++ b/services/api/users.api.ts
@@ -0,0 +1,5 @@
+import callAPI from "../caller/config";
+
+export async function getUsers() {
+ return await callAPI.get("/user/all").then((res) => res.data);
+}
diff --git a/services/caller/config.ts b/services/caller/config.ts
new file mode 100644
index 0000000..09469fb
--- /dev/null
+++ b/services/caller/config.ts
@@ -0,0 +1,25 @@
+import axios from "axios";
+
+const callAPISetting = axios.create({
+ baseURL: "http://localhost:8000/api/v1",
+ withCredentials: true,
+});
+
+callAPISetting.interceptors.request.use(
+ (res) => res,
+ (err) => Promise.reject(err),
+);
+
+callAPISetting.interceptors.response.use(
+ (res) => res,
+ async (err) => Promise.reject(err),
+);
+
+const callAPI = {
+ post: callAPISetting.post,
+ get: callAPISetting.get,
+ put: callAPISetting.put,
+ delete: callAPISetting.delete,
+};
+
+export default callAPI;
diff --git a/services/hooks/department.hook.ts b/services/hooks/department.hook.ts
new file mode 100644
index 0000000..85f7f8f
--- /dev/null
+++ b/services/hooks/department.hook.ts
@@ -0,0 +1,12 @@
+import { useQuery } from "@tanstack/react-query";
+import { getDepartments } from "../api/department.api";
+
+export const useGetAllDepartments = () => {
+ return useQuery({
+ // قرار دادن پارامترها در queryKey باعث میشود با تغییر هر کدام، کش باطل و درخواست جدید ارسال شود
+ queryKey: ['get-all-tickets'],
+ queryFn: () => getDepartments(),
+ retry: false,
+ refetchOnWindowFocus: false,
+ });
+};
diff --git a/services/hooks/report.hook.ts b/services/hooks/report.hook.ts
new file mode 100644
index 0000000..0bd1d85
--- /dev/null
+++ b/services/hooks/report.hook.ts
@@ -0,0 +1,30 @@
+import { useMutation } from "@tanstack/react-query";
+import * as api from "../api/report.api";
+
+// هوکهای Mutation برای دریافت گزارشها به صورت دستی (On-Demand)
+
+export const useMutateStatsReport = () => useMutation({ mutationFn: api.getStatsReport });
+
+export const useMutateDepartmentReport = () => useMutation({ mutationFn: api.getDepartmentReport });
+
+export const useMutateAgentPerformance = () => useMutation({ mutationFn: api.getAgentPerformance });
+
+export const useMutateAvgResolutionTime = () => useMutation({ mutationFn: api.getAvgResolutionTime });
+
+export const useMutateCriticalTickets = () => useMutation({ mutationFn: api.getCriticalTickets });
+
+export const useMutateTicketsTrend = () => useMutation({ mutationFn: (params: any) => api.getTicketsTrend(params) });
+
+export const useMutateClosureRate = () => useMutation({ mutationFn: api.getClosureRate });
+
+export const useMutateSlaBreach = () => useMutation({ mutationFn: api.getSlaBreach });
+
+export const useMutateAgingReport = () => useMutation({ mutationFn: api.getAgingReport });
+
+export const useMutateAgentEfficiency = () => useMutation({ mutationFn: api.getAgentEfficiency });
+
+export const useMutateDepartmentLoad = () => useMutation({ mutationFn: api.getDepartmentLoad });
+
+export const useMutateKpiReport = () => useMutation({ mutationFn: api.getKpiReport });
+
+export const useMutatePredictionReport = () => useMutation({ mutationFn: api.getPredictionReport });
diff --git a/services/hooks/ticket.hook.ts b/services/hooks/ticket.hook.ts
new file mode 100644
index 0000000..b708bd6
--- /dev/null
+++ b/services/hooks/ticket.hook.ts
@@ -0,0 +1,20 @@
+import { useMutation, useQuery } from "@tanstack/react-query";
+import { getAllTickets, getAllTicketsExport, removeTicket } from "../api/ticket.api";
+
+export const useGetAllTickets = (params: {
+ page: number;
+ departmentId?: string;
+ priority?: string;
+ status?: string;
+}) => {
+ return useQuery({
+ // قرار دادن پارامترها در queryKey باعث میشود با تغییر هر کدام، کش باطل و درخواست جدید ارسال شود
+ queryKey: ["get-all-tickets", params],
+ queryFn: () => getAllTickets(params),
+ retry: false,
+ refetchOnWindowFocus: false,
+ });
+};
+
+export const useRemoveTicket = () => useMutation({mutationFn:removeTicket})
+export const useGetAllTicketsExport = () => useMutation({mutationFn:getAllTicketsExport})
\ No newline at end of file
diff --git a/services/hooks/users.hook.ts b/services/hooks/users.hook.ts
new file mode 100644
index 0000000..6ea918b
--- /dev/null
+++ b/services/hooks/users.hook.ts
@@ -0,0 +1,8 @@
+import { useQuery } from "@tanstack/react-query";
+import { getUsers } from "../api/users.api";
+
+export const useGetAllUsers = () =>
+ useQuery({
+ queryKey: ["get-all-users"],
+ queryFn: getUsers,
+ });
diff --git a/tailwind.config.ts b/tailwind.config.ts
new file mode 100644
index 0000000..df7e43b
--- /dev/null
+++ b/tailwind.config.ts
@@ -0,0 +1,16 @@
+// tailwind.config.ts
+export default {
+ theme: {
+ extend: {
+ animation: {
+ blink: 'blink 1.5s infinite',
+ },
+ keyframes: {
+ blink: {
+ '0%, 100%': { opacity: '1' },
+ '50%': { opacity: '0.4' },
+ },
+ },
+ },
+ },
+}
diff --git a/ui/DateFilter.tsx b/ui/DateFilter.tsx
new file mode 100644
index 0000000..deb9d8c
--- /dev/null
+++ b/ui/DateFilter.tsx
@@ -0,0 +1,32 @@
+import { DatePicker } from "@mui/x-date-pickers/DatePicker";
+import { TextField, Box } from "@mui/material";
+
+const DateFilters = ({
+ startDate,
+ setStartDate,
+ endDate,
+ setEndDate,
+}: {
+ startDate: any;
+ setStartDate: any;
+ endDate: any;
+ setEndDate: any;
+}) => {
+ return (
+
+ setStartDate(newValue)}
+ slotProps={{ textField: { fullWidth: true } }}
+ />
+ setEndDate(newValue)}
+ slotProps={{ textField: { fullWidth: true } }}
+ />
+
+ );
+};
+export default DateFilters;
diff --git a/ui/DeleteConfirmModal.tsx b/ui/DeleteConfirmModal.tsx
new file mode 100644
index 0000000..0ee6df7
--- /dev/null
+++ b/ui/DeleteConfirmModal.tsx
@@ -0,0 +1,80 @@
+"use client";
+
+import {
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ DialogActions,
+ Button,
+ Typography,
+ IconButton,
+} from "@mui/material";
+import WarningAmberIcon from "@mui/icons-material/WarningAmber";
+import CloseIcon from "@mui/icons-material/Close";
+
+export default function DeleteConfirmModal({
+ open,
+ onClose,
+ onConfirm,
+ title = "آیا از حذف این مورد مطمئن هستید؟",
+ description = "بعد از حذف، امکان بازگردانی وجود ندارد.",
+}: {
+ open: boolean;
+ onClose: () => void;
+ onConfirm: () => void;
+ title?: string;
+ description?: string;
+}) {
+ return (
+
+ );
+}
diff --git a/ui/ReactQueryProvider.tsx b/ui/ReactQueryProvider.tsx
new file mode 100644
index 0000000..8bfc38d
--- /dev/null
+++ b/ui/ReactQueryProvider.tsx
@@ -0,0 +1,30 @@
+"use client";
+
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+import { useState } from "react";
+
+export default function ReactQueryProvider({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const [queryClient] = useState(
+ () =>
+ new QueryClient({
+ defaultOptions: {
+ queries: {
+ staleTime: 1000 * 60,
+ retry: 1,
+ refetchOnWindowFocus: false,
+ },
+ mutations: {
+ retry: 1,
+ },
+ },
+ }),
+ );
+
+ return (
+
{children}
+ );
+}
diff --git a/ui/SearchBox.tsx b/ui/SearchBox.tsx
new file mode 100644
index 0000000..d5b0a24
--- /dev/null
+++ b/ui/SearchBox.tsx
@@ -0,0 +1,31 @@
+import { ChangeEventHandler } from 'react';
+import { TextField } from '@mui/material';
+
+const SearchBox = ({ placeholder, onChange }:{placeholder:string,onChange:ChangeEventHandler
}) => {
+ return (
+
+ );
+};
+
+export default SearchBox;
diff --git a/ui/Test.tsx b/ui/Test.tsx
new file mode 100644
index 0000000..981e6f8
--- /dev/null
+++ b/ui/Test.tsx
@@ -0,0 +1,83 @@
+import {
+ Box,
+ Card,
+ CardContent,
+ Typography,
+ Button,
+ Stack,
+} from "@mui/material";
+import VisibilityIcon from "@mui/icons-material/Visibility";
+import FileDownloadIcon from "@mui/icons-material/FileDownload";
+
+const DataCategories = () => {
+ // لیست کارتها (میتوانید این را از دیتابیس بگیرید)
+ const categories = [
+ { id: 1, title: "آماركلي" },
+ { id: 2, title: "تیکتهای در انتظار" },
+ { id: 3, title: "تيكت هاي بحراني" },
+ { id: 4, title: "گزارشهای ماهانه" },
+ { id: 5, title: "گزارشهای ماهانه" },
+ { id: 6, title: "گزارشهای ماهانه" },
+ { id: 7, title: "گزارشهای ماهانه" },
+ { id: 8, title: "گزارشهای ماهانه" },
+ { id: 9, title: "گزارشهای ماهانه" },
+ { id: 10, title: "گزارشهای ماهانه" },
+ { id: 11, title: "گزارشهای ماهانه" },
+ { id: 12, title: "گزارشهای ماهانه" },
+ { id: 13, title: "گزارشهای ماهانه" },
+ ];
+
+ return (
+
+ {categories.map((item) => (
+
+
+
+ {item.title}
+
+
+
+
+ {/* }
+ fullWidth
+ >
+ مشاهده
+ */}
+ }
+ fullWidth
+ >
+ اکسل
+
+
+
+ ))}
+
+ );
+};
+
+export default DataCategories;
diff --git a/ui/TicketDetailModel.tsx b/ui/TicketDetailModel.tsx
new file mode 100644
index 0000000..cf32660
--- /dev/null
+++ b/ui/TicketDetailModel.tsx
@@ -0,0 +1,115 @@
+"use client";
+
+import {
+ Dialog,
+ DialogTitle,
+ DialogContent,
+ IconButton,
+ Typography,
+ Chip,
+ Divider,
+} from "@mui/material";
+import CloseIcon from "@mui/icons-material/Close";
+import { ticketPriorities, ticketStatuses } from "@/core/constant";
+import { TicketInterface } from "@/core/types";
+
+export default function TicketDetailModal({
+ open,
+ onClose,
+ ticket,
+}: {
+ open: boolean;
+ onClose: () => void;
+ ticket: TicketInterface | null;
+}) {
+ if (!ticket) return null;
+ const status = ticketStatuses.find((p) => p.id === ticket?.status);
+ const priority = ticketPriorities.find((p) => p.id === ticket?.priority);
+ return (
+
+ );
+}
diff --git a/ui/form/LoginForm.tsx b/ui/form/LoginForm.tsx
new file mode 100644
index 0000000..0a20879
--- /dev/null
+++ b/ui/form/LoginForm.tsx
@@ -0,0 +1,158 @@
+"use client";
+
+import { useState } from "react";
+import { Box, Button, TextField, Paper } from "@mui/material";
+import { handleAxiosError } from "@/core/utils";
+import { toast } from "react-toastify";
+import { useRouter } from "next/navigation";
+import { loginUser } from "@/services/api/auth.api";
+
+export default function LoginForm() {
+ const [showPassword, setShowPassword] = useState(false);
+ const router = useRouter();
+ const [form, setForm] = useState({
+ username: "",
+ password: "",
+ });
+
+ const handleChange = (e: React.ChangeEvent) => {
+ setForm({
+ ...form,
+ [e.target.name]: e.target.value,
+ });
+ };
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+ try {
+ const { message } = await loginUser(form);
+ toast.success(message);
+ router.push("/");
+ } catch (error) {
+ toast.error(handleAxiosError(error));
+ }
+ };
+
+ return (
+
+
+
+ ورود به سيستم ثبت تيكت ها
+
+
+
+
+
+ );
+}
diff --git a/ui/form/TicketForm.tsx b/ui/form/TicketForm.tsx
new file mode 100644
index 0000000..a484aad
--- /dev/null
+++ b/ui/form/TicketForm.tsx
@@ -0,0 +1,268 @@
+"use client";
+
+import { useEffect, useState } from "react";
+import {
+ Box,
+ Paper,
+ Typography,
+ TextField,
+ MenuItem,
+ Button,
+ Grid,
+} from "@mui/material";
+import {
+ hospitalSoftwares,
+ requestType,
+ ticketPriorities,
+ ticketStatuses,
+} from "@/core/constant";
+import { toast } from "react-toastify";
+import { handleAxiosError } from "@/core/utils";
+import { createTicket } from "@/services/api/ticket.api";
+interface DepartmentType {
+ id: string;
+ slug: string;
+ displayName: string;
+}
+export interface IUserListItem {
+ id: string;
+ fullname: string;
+ nationalCode: string;
+ mobile: string;
+ roleId: string;
+ createdAt: Date;
+ updatedAt: Date;
+}
+
+export default function TicketForm({
+ departments,
+ users,
+}: {
+ departments: DepartmentType[];
+ users: IUserListItem[];
+}) {
+ const [showFieldRelatedSystem, setShowFieldRelatedSystem] = useState(false);
+ const [form, setForm] = useState({
+ createdBy: "",
+ departmentId: "",
+ internalPhone: "",
+ requestType: "",
+ priority: "medium",
+ description: "",
+ relatedSystem: "",
+ location: "",
+ helpdeskAction: "",
+ assignedTo: "",
+ status: "open",
+ finalNotes: "",
+ });
+
+ const handleChange = (e: any) => {
+ setForm({
+ ...form,
+ [e.target.name]: e.target.value,
+ });
+ };
+
+ const handleSubmit = async (e: any) => {
+ e.preventDefault();
+
+ try {
+ const { message } = await createTicket(form);
+ toast.success(message);
+ } catch (error) {
+ toast.error(handleAxiosError(error));
+ }
+ };
+
+ useEffect(() => {
+ if (form.requestType === "1") {
+ form.relatedSystem = "";
+ setShowFieldRelatedSystem(true);
+ } else {
+ form.relatedSystem = "";
+ setShowFieldRelatedSystem(false);
+ }
+ }, [form.requestType]);
+ return (
+
+ );
+}
diff --git a/ui/layout/Sidebar.tsx b/ui/layout/Sidebar.tsx
new file mode 100644
index 0000000..6b2e046
--- /dev/null
+++ b/ui/layout/Sidebar.tsx
@@ -0,0 +1,82 @@
+import { Apartment, Dashboard, Logout, Notes, Person, PictureInPicture, ShowChart } from "@mui/icons-material";
+import { Button } from "@mui/material";
+import Link from "next/link";
+import React from "react";
+
+export default function Sidebar() {
+ return (
+ <>
+
+ {/*
+
+
+
+
داشبورد
+ */}
+
+
+
+
+
ثبت تيكت
+
+
+
+
+
+
مشاهده تيكت ها
+
+ {/*
+
+
+
+
مديريت واحد ها
+
+
+
+
+
+
مديريت كاربران
+ */}
+
+
+
+
+
گزارش گيري
+
+
+
+ >
+ );
+}