@mamrp/components 1.3.2 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/date-pickers/index.d.mts +391 -0
- package/dist/date-pickers/index.d.ts +391 -0
- package/dist/date-pickers/index.js +752 -0
- package/dist/date-pickers/index.js.map +1 -0
- package/dist/date-pickers/index.mjs +737 -0
- package/dist/date-pickers/index.mjs.map +1 -0
- package/dist/index.d.mts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/index.js +31 -59
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +31 -59
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../react-shim.js","../../src/date-pickers/date-range-picker/index.tsx"],"sourcesContent":["import * as React from \"react\";\nexport { React };\n","/**\n * DateRangePicker - کامپوننت پیشرفته انتخاب بازه تاریخ شمسی\n *\n * یک کامپوننت کامل و حرفهای برای انتخاب بازه تاریخ با پشتیبانی از تقویم فارسی/شمسی\n * این کامپوننت از کتابخانههای MUI، moment-jalaali و react-icons استفاده میکند\n *\n * @version 3.0.0\n * @author Frontend Team\n * @since 2024\n * @updated October 2025\n *\n * ویژگیهای کلیدی:\n * ✅ پشتیبانی کامل از تقویم شمسی (فارسی)\n * ✅ انتخاب بازه تاریخ با نمایش visual و range highlighting\n * ✅ Responsive design - سازگار با موبایل و دسکتاپ (breakpoint: 700px)\n * ✅ سه حالت نمایش: تقویم popup، DatePicker جداگانه، یا تک/دوتایی\n * ✅ تبهای هوشمند: حالت خودکار و دستی برای انتخاب تاریخ\n * ✅ آیکونهای حرفهای React Icons در تمام بخشها\n * ✅ آیکون پاک کردن در input با UX بهبود یافته\n * ✅ سفارشیسازی کامل استایل و رنگبندی\n * ✅ پشتیبانی از validation با React Hook Form\n * ✅ قابلیت تنظیم محدوده تاریخ (min/max)\n * ✅ حالت loading و disabled\n * ✅ چندین حالت text alignment (left, center, right)\n * ✅ لیست ماهها به صورت 3 ستونی با CSS Grid\n * ✅ هایلایت روزهای جمعه، امروز و بازه انتخاب شده\n * ✅ انیمیشن و hover effects\n * ✅ تغییر خودکار تب در حالت دستی\n * ✅ عدم بسته شدن پنجره بعد از پاک کردن\n * ✅ راهنمای هوشمند برای کاربر\n *\n * نحوه استفاده:\n * ```tsx\n * import DateRangePicker from './components/date-range-picker';\n * import { useForm } from 'react-hook-form';\n *\n * const MyComponent = () => {\n * const { control } = useForm();\n *\n * return (\n * <DateRangePicker\n * fromDate=\"startDate\"\n * toDate=\"endDate\"\n * control={control}\n * label=\"انتخاب بازه تاریخ\"\n * persian={true}\n * align=\"center\"\n * clear={true}\n * dualCalendar={false} // جدید: کنترل تقویم دوم\n * singleCalendar={false}\n * useMobilePickers={false}\n * />\n * );\n * };\n * ```\n *\n * مثالهای مختلف:\n *\n * 1. حالت پایه (پیشفرض - تک تقویم با تبهای هوشمند):\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * />\n * ```\n *\n * 2. فعال کردن تقویم دوم:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * dualCalendar={true} // تقویم دوم فعال میشود\n * />\n * ```\n *\n * 3. تک تقویم بدون تبهای هوشمند:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * singleCalendar={true}\n * />\n * ```\n *\n * 4. حالت DatePicker جداگانه:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * useMobilePickers={true}\n * />\n * ```\n *\n * 5. با محدودیت تاریخ و سفارشیسازی:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * minDate={moment().subtract(1, 'year')}\n * maxDate={moment()}\n * label=\"بازه زمانی گزارش\"\n * size=\"small\"\n * align=\"center\"\n * dualCalendar={true}\n * />\n * ```\n *\n * ویژگیهای تبهای هوشمند (جدید در v3.0):\n *\n * ```tsx\n * // حالت هوشمند (پیشفرض): 🤖\n * // - خودکار تشخیص میدهد کاربر کدام تاریخ را میخواهد\n * // - اولین کلیک: تاریخ شروع ← تب \"تا تاریخ\" فعال\n * // - دومین کلیک: تاریخ پایان (با تشخیص ترتیب)\n * // - کلیک سوم: شروع مجدد\n *\n * // حالت دستی: 👤\n * // - کاربر خودش تب را انتخاب میکند\n * // - بعد از انتخاب \"از تاریخ\" ← خودکار به \"تا تاریخ\" میرود\n * // - بعد از انتخاب \"تا تاریخ\" ← خودکار به \"از تاریخ\" برمیگردد\n * ```\n *\n * آیکونهای استفاده شده (React Icons):\n *\n * ```tsx\n * // Input Icons:\n * MdCalendarToday // آیکون تقویم\n * MdClear // آیکون پاک کردن\n *\n * // Tab Icons:\n * MdSmartToy // حالت هوشمند\n * MdPerson // حالت دستی\n * MdDateRange // از تاریخ\n * MdEvent // تا تاریخ\n *\n * // Guide Icons:\n * MdGpsFixed // راهنمای انتخاب\n * MdCheckCircle // تأیید انتخاب\n * ```\n *\n * @interface DateRangePickerProps\n * @property {string} fromDate - نام فیلد تاریخ شروع در form\n * @property {string} toDate - نام فیلد تاریخ پایان در form\n * @property {Control<any>} control - React Hook Form control object\n * @property {DateView[]} [fromViews] - نماهای قابل نمایش برای تاریخ شروع (پیشفرض: [\"year\", \"month\", \"day\"])\n * @property {DateView} [fromOpenTo] - نمای ابتدایی برای تاریخ شروع (پیشفرض: \"day\")\n * @property {DateView[]} [toViews] - نماهای قابل نمایش برای تاریخ پایان (پیشفرض: [\"year\", \"month\", \"day\"])\n * @property {DateView} [toOpenTo] - نمای ابتدایی برای تاریخ پایان (پیشفرض: \"day\")\n * @property {string} [label] - برچسب فیلد (پیشفرض: \"انتخاب بازه\")\n * @property {\"small\" | \"medium\"} [size] - اندازه فیلد (پیشفرض: \"medium\")\n * @property {boolean} [disabled] - غیرفعال کردن کامپوننت (پیشفرض: false)\n * @property {boolean} [persian] - استفاده از تاریخ فارسی (پیشفرض: true)\n * @property {\"right\" | \"center\" | \"left\"} [align] - تراز متن (پیشفرض: \"left\")\n * @property {boolean} [isLoading] - نمایش حالت loading (پیشفرض: false)\n * @property {Moment} [minDate] - حداقل تاریخ قابل انتخاب\n * @property {Moment} [maxDate] - حداکثر تاریخ قابل انتخاب\n * @property {boolean} [clear] - نمایش دکمه پاک کردن (پیشفرض: true)\n * @property {boolean} [singleCalendar] - نمایش تک تقویم بدون تبها (پیشفرض: false)\n * @property {boolean} [useMobilePickers] - استفاده از DatePicker جداگانه (پیشفرض: false)\n * @property {boolean} [dualCalendar] - فعالسازی تقویم دوم (پیشفرض: false)\n *\n * منطق نمایش تقویمها:\n * - اگر dualCalendar = true ← دو تقویم کنار هم\n * - اگر singleCalendar = true ← تک تقویم بدون تب\n * - اگر useMobilePickers = true ← دو DatePicker جداگانه\n * - پیشفرض ← تک تقویم با تبهای هوشمند\n *\n * نکات مهم:\n * - کامپوننت خودکار mobile detection دارد (breakpoint: 700px)\n * - در حالت موبایل، تقویمها responsive میشوند\n * - فرمت خروجی همیشه \"YYYY-MM-DD\" است\n * - روزهای جمعه با رنگ قرمز نمایش داده میشوند\n * - امکان انتخاب بازه با کلیک و visual feedback وجود دارد\n * - validation errors از React Hook Form پشتیبانی میشود\n * - آیکون پاک کردن فقط در صورت وجود تاریخ نمایش داده میشود\n * - پاک کردن از داخل popup، پنجره را نمیبندد\n * - پاک کردن از input icon، پنجره را باز نمیکند\n *\n * Dependencies:\n * - @mui/material\n * - @mui/x-date-pickers\n * - @mui/x-date-pickers/AdapterMomentJalaali\n * - moment-jalaali\n * - react-hook-form\n * - react-icons/md\n *\n * @example\n * // استفاده در فرم با تمام قابلیتها\n * const form = useForm({\n * defaultValues: {\n * startDate: '',\n * endDate: ''\n * }\n * });\n *\n * // حالت پیشفرض با تبهای هوشمند\n * <DateRangePicker\n * fromDate=\"startDate\"\n * toDate=\"endDate\"\n * control={form.control}\n * label=\"انتخاب دوره زمانی\"\n * />\n *\n * // حالت dual calendar\n * <DateRangePicker\n * fromDate=\"startDate\"\n * toDate=\"endDate\"\n * control={form.control}\n * dualCalendar={true}\n * label=\"انتخاب بازه با دو تقویم\"\n * />\n */\n\n\"use client\";\nimport React, { useState, useEffect } from \"react\";\nimport {\n Box,\n Typography,\n CircularProgress,\n Popover,\n TextField,\n Button,\n useMediaQuery,\n IconButton,\n} from \"@mui/material\";\nimport {\n MdClear,\n MdCalendarToday,\n MdDateRange,\n MdEvent,\n MdSmartToy,\n MdPerson,\n MdGpsFixed,\n MdCheckCircle,\n MdTipsAndUpdates,\n} from \"react-icons/md\";\nimport { Control, useController } from \"react-hook-form\";\nimport {\n StaticDatePicker,\n MobileDatePicker,\n DatePicker,\n PickersDay,\n PickersDayProps,\n LocalizationProvider,\n DateView,\n} from \"@mui/x-date-pickers\";\nimport { AdapterMomentJalaali } from \"@mui/x-date-pickers/AdapterMomentJalaali\";\nimport moment, { Moment } from \"moment-jalaali\";\nimport { string } from \"yup\";\n\nmoment.locale(\"fa\");\nmoment.loadPersian({ dialect: \"persian-modern\", usePersianDigits: true });\n\ninterface DateRangePickerProps {\n fromDate: string;\n toDate: string;\n fromViews?: DateView[] | undefined;\n fromOpenTo?: DateView | undefined;\n toViews?: DateView[] | undefined;\n toOpenTo?: DateView | undefined;\n control: Control<any>;\n label?: string;\n size?: \"small\" | \"medium\";\n disabled?: boolean;\n persian?: boolean;\n align?: \"right\" | \"center\" | \"left\";\n isLoading?: boolean;\n minDate?: Moment;\n maxDate?: Moment;\n clear?: boolean;\n singleCalendar?: boolean; // Controls single calendar display on desktop (mobile always shows single calendar)\n useMobilePickers?: boolean; // Use mobile-style DatePicker inputs instead of calendar popup\n dualCalendar?: boolean; // Enable dual calendar mode (default: false)\n}\n\n/**\n * DateRangePicker - کامپوننت انتخاب بازه تاریخ شمسی\n *\n * یک کامپوننت پیشرفته و کامل برای انتخاب بازه تاریخ با پشتیبانی از تقویم فارسی/شمسی\n * این کامپوننت از کتابخانههای MUI و moment-jalaali استفاده میکند\n *\n * @version 2.0.0\n * @author Frontend MAMRP Team\n * @since 2024\n *\n *\n * نحوه استفاده:\n * ```tsx\n * import DateRangePicker from './components/date-range-picker';\n * import { useForm } from 'react-hook-form';\n *\n * const MyComponent = () => {\n * const { control } = useForm();\n *\n * return (\n * <DateRangePicker\n * fromDate=\"startDate\"\n * toDate=\"endDate\"\n * control={control}\n * label=\"انتخاب بازه تاریخ\"\n * persian={true}\n * align=\"center\"\n * clear={true}\n * singleCalendar={false}\n * useMobilePickers={false}\n * />\n * );\n * };\n * ```\n *\n * مثالهای مختلف:\n *\n * 1. حالت پایه:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * />\n * ```\n *\n * 2. با تک تقویم:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * singleCalendar={true}\n * />\n * ```\n *\n * 3. با DatePicker جداگانه:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * useMobilePickers={true}\n * />\n * ```\n *\n * 4. با محدودیت تاریخ:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"from\"\n * toDate=\"to\"\n * control={control}\n * minDate={moment().subtract(1, 'year')}\n * maxDate={moment()}\n * />\n * ```\n *\n * 5. سفارشیسازی کامل:\n * ```tsx\n * <DateRangePicker\n * fromDate=\"startDate\"\n * toDate=\"endDate\"\n * control={control}\n * label=\"بازه زمانی گزارش\"\n * size=\"small\"\n * align=\"center\"\n * persian={true}\n * clear={true}\n * disabled={false}\n * isLoading={false}\n * singleCalendar={false}\n * useMobilePickers={false}\n * fromViews={[\"year\", \"month\", \"day\"]}\n * fromOpenTo=\"day\"\n * toViews={[\"year\", \"month\", \"day\"]}\n * toOpenTo=\"day\"\n * />\n * ```\n *\n * @interface DateRangePickerProps\n * @property {string} fromDate - نام فیلد تاریخ شروع در form\n * @property {string} toDate - نام فیلد تاریخ پایان در form\n * @property {Control<any>} control - React Hook Form control object\n * @property {DateView[]} [fromViews] - نماهای قابل نمایش برای تاریخ شروع (پیشفرض: [\"year\", \"month\", \"day\"])\n * @property {DateView} [fromOpenTo] - نمای ابتدایی برای تاریخ شروع (پیشفرض: \"day\")\n * @property {DateView[]} [toViews] - نماهای قابل نمایش برای تاریخ پایان (پیشفرض: [\"year\", \"month\", \"day\"])\n * @property {DateView} [toOpenTo] - نمای ابتدایی برای تاریخ پایان (پیشفرض: \"day\")\n * @property {string} [label] - برچسب فیلد (پیشفرض: \"انتخاب بازه\")\n * @property {\"small\" | \"medium\"} [size] - اندازه فیلد (پیشفرض: \"medium\")\n * @property {boolean} [disabled] - غیرفعال کردن کامپوننت (پیشفرض: false)\n * @property {boolean} [persian] - استفاده از تاریخ فارسی (پیشفرض: true)\n * @property {\"right\" | \"center\" | \"left\"} [align] - تراز متن (پیشفرض: \"left\")\n * @property {boolean} [isLoading] - نمایش حالت loading (پیشفرض: false)\n * @property {Moment} [minDate] - حداقل تاریخ قابل انتخاب\n * @property {Moment} [maxDate] - حداکثر تاریخ قابل انتخاب\n * @property {boolean} [clear] - نمایش دکمه پاک کردن (پیشفرض: true)\n * @property {boolean} [singleCalendar] - نمایش تک تقویم به جای دوتایی (پیشفرض: false)\n * @property {boolean} [useMobilePickers] - استفاده از DatePicker جداگانه به جای popup (پیشفرض: false)\n *\n * نکات مهم:\n * - کامپوننت خودکار mobile detection دارد (breakpoint: 700px)\n * - در حالت موبایل، تقویمها responsive میشوند\n * - فرمت خروجی همیشه \"YYYY-MM-DD\" است\n * - روزهای جمعه با رنگ قرمز نمایش داده میشوند\n * - امکان انتخاب بازه با کلیک و drag وجود دارد\n * - validation errors از React Hook Form پشتیبانی میشود\n *\n *\n * @example\n * // استفاده در فرم ساده\n * const form = useForm({\n * defaultValues: {\n * startDate: '',\n * endDate: ''\n * }\n * });\n *\n * <DateRangePicker\n * fromDate=\"startDate\"\n * toDate=\"endDate\"\n * control={form.control}\n * label=\"انتخاب دوره زمانی\"\n * />\n */\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n fromDate,\n toDate,\n fromViews = [\"year\", \"month\", \"day\"],\n fromOpenTo = \"day\",\n toViews = [\"year\", \"month\", \"day\"],\n toOpenTo = \"day\",\n control,\n label = \"انتخاب بازه\",\n size = \"medium\",\n disabled = false,\n persian = true,\n align = \"left\",\n isLoading = false,\n minDate,\n maxDate,\n clear = true,\n singleCalendar = false, // Default to dual calendars on desktop\n useMobilePickers = false, // Default to calendar popup style\n dualCalendar = false, // Default to single calendar with smart tabs\n}) => {\n const [open, setOpen] = useState(false);\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const [tempStartDate, setTempStartDate] = useState<Moment | null>(null);\n const [tempEndDate, setTempEndDate] = useState<Moment | null>(null);\n const [secondCalendarMonth, setSecondCalendarMonth] =\n useState<Moment>(moment());\n\n // Smart tabs state for single calendar mode\n const [activeTab, setActiveTab] = useState<\"from\" | \"to\">(\"from\");\n const [autoSelectMode, setAutoSelectMode] = useState(true); // Auto detect which date to select\n\n // Mobile detection hook\n const isMobile = useMediaQuery(\"(max-width:700px)\");\n\n // Determine if we should show single calendar (mobile or prop-controlled)\n const showSingleCalendar = isMobile || singleCalendar || !dualCalendar;\n\n // استفاده از useController برای هر دو فیلد\n const {\n field: fieldFrom,\n fieldState: { error: errorFrom },\n } = useController({ name: fromDate, control });\n\n const {\n field: fieldTo,\n fieldState: { error: errorTo },\n } = useController({ name: toDate, control });\n\n const handleOpen = (event: React.MouseEvent<HTMLElement>) => {\n if (!disabled && !isLoading) {\n setAnchorEl(event.currentTarget);\n setOpen(true);\n }\n };\n\n const handleClose = () => {\n setOpen(false);\n setTempStartDate(null);\n setTempEndDate(null);\n };\n\n // بارگذاری مقادیر موجود هنگام باز شدن\n useEffect(() => {\n if (open) {\n if (fieldFrom.value) {\n setTempStartDate(moment(fieldFrom.value));\n setSecondCalendarMonth(moment(fieldFrom.value));\n } else {\n setSecondCalendarMonth(moment());\n }\n if (fieldTo.value) {\n setTempEndDate(moment(fieldTo.value));\n }\n }\n }, [open, fieldFrom.value, fieldTo.value]);\n\n const handleDaySelect = (day: Moment, calendarSide: \"right\" | \"left\") => {\n // Smart tab mode for single calendar\n if (!dualCalendar && showSingleCalendar) {\n if (autoSelectMode) {\n // Auto mode: smart detection\n if (!tempStartDate && !tempEndDate) {\n setTempStartDate(day);\n setActiveTab(\"to\");\n } else if (tempStartDate && !tempEndDate) {\n if (day.isBefore(tempStartDate)) {\n setTempEndDate(tempStartDate);\n setTempStartDate(day);\n } else {\n setTempEndDate(day);\n }\n } else if (!tempStartDate && tempEndDate) {\n if (day.isAfter(tempEndDate)) {\n setTempStartDate(tempEndDate);\n setTempEndDate(day);\n } else {\n setTempStartDate(day);\n }\n } else {\n // Both dates exist, restart\n setTempStartDate(day);\n setTempEndDate(null);\n setActiveTab(\"to\");\n }\n } else {\n // Manual tab mode with auto switch\n if (activeTab === \"from\") {\n setTempStartDate(day);\n setActiveTab(\"to\"); // Auto switch to 'to' tab\n } else {\n setTempEndDate(day);\n setActiveTab(\"from\"); // Auto switch to 'from' tab\n }\n }\n } else {\n // Original dual calendar logic\n if (!tempStartDate && !tempEndDate) {\n if (calendarSide === \"right\") {\n setTempStartDate(day);\n } else {\n setTempEndDate(day);\n }\n } else if (tempStartDate && tempEndDate) {\n setTempStartDate(day);\n setTempEndDate(null);\n } else if (tempStartDate && !tempEndDate) {\n if (day.isBefore(tempStartDate)) {\n setTempEndDate(tempStartDate);\n setTempStartDate(day);\n } else {\n setTempEndDate(day);\n }\n } else if (!tempStartDate && tempEndDate) {\n if (day.isAfter(tempEndDate)) {\n setTempStartDate(tempEndDate);\n setTempEndDate(day);\n } else {\n setTempStartDate(day);\n }\n }\n }\n };\n\n const handleConfirm = () => {\n if (tempStartDate) {\n fieldFrom.onChange(tempStartDate.locale(\"en\").format(\"YYYY-MM-DD\"));\n }\n if (tempEndDate) {\n fieldTo.onChange(tempEndDate.locale(\"en\").format(\"YYYY-MM-DD\"));\n }\n setOpen(false);\n setTempStartDate(null);\n setTempEndDate(null);\n };\n\n const handleClear = () => {\n fieldFrom.onChange(null);\n fieldTo.onChange(null);\n setTempStartDate(null);\n setTempEndDate(null);\n setActiveTab(\"from\"); // Reset to start tab\n // Keep popover open - don't call setOpen(false)\n };\n\n // Separate function for clearing from input icon\n const handleInputClear = (event: React.MouseEvent) => {\n event.stopPropagation(); // Prevent opening popover\n fieldFrom.onChange(null);\n fieldTo.onChange(null);\n setTempStartDate(null);\n setTempEndDate(null);\n setActiveTab(\"from\");\n };\n\n const displayValue = () => {\n const start = fieldFrom.value ? moment(fieldFrom.value) : null;\n const end = fieldTo.value ? moment(fieldTo.value) : null;\n\n if (start && end) {\n return persian\n ? `${end.format(\"jYYYY/jMM/jDD\")} - ${start.format(\"jYYYY/jMM/jDD\")}`\n : `${end.format(\"YYYY/MM/DD\")} - ${start.format(\"YYYY/MM/DD\")}`;\n } else if (start) {\n return persian\n ? \"از تاریخ\" + \" \" + start.format(\"jYYYY/jMM/jDD\")\n : start.format(\"YYYY/MM/DD\");\n } else if (end) {\n return persian\n ? \"تا تاریخ\" + \" \" + end.format(\"jYYYY/jMM/jDD\")\n : end.format(\"YYYY/MM/DD\");\n }\n return \"\";\n };\n\n const error = errorFrom || errorTo;\n\n const customLocaleText = {\n cancelButtonLabel: \"لغو\",\n okButtonLabel: \"تأیید\",\n todayButtonLabel: \"امروز\",\n clearButtonLabel: \"پاک کردن\",\n };\n\n return (\n <LocalizationProvider\n dateAdapter={AdapterMomentJalaali}\n localeText={customLocaleText}\n >\n <Box sx={{ width: \"100%\" }}>\n <TextField\n label={label}\n size={size}\n fullWidth\n value={displayValue()}\n onClick={handleOpen}\n disabled={disabled || isLoading}\n placeholder=\"انتخاب بازه تاریخ\"\n error={!!error}\n InputLabelProps={{\n shrink: true,\n }}\n InputProps={{\n readOnly: true,\n sx: {\n textAlign: align,\n direction: \"ltr\",\n cursor: disabled ? \"default\" : \"pointer\",\n \"& input\": {\n textAlign: align,\n },\n },\n endAdornment: (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\n {/* Clear Icon */}\n {(fieldFrom.value || fieldTo.value) &&\n !disabled &&\n !isLoading && (\n <IconButton\n size=\"small\"\n onClick={handleInputClear}\n sx={{\n padding: \"4px\",\n color: \"text.secondary\",\n \"&:hover\": {\n color: \"error.main\",\n backgroundColor: \"rgba(244, 67, 54, 0.08)\",\n },\n }}\n >\n <MdClear size={16} />\n </IconButton>\n )}\n\n {/* Loading Indicator */}\n {isLoading && <CircularProgress size={20} color=\"secondary\" />}\n </Box>\n ),\n }}\n sx={{\n \"& .MuiOutlinedInput-root\": {\n height: size === \"small\" ? 40 : 56,\n },\n }}\n />\n\n {error && (\n <Typography fontSize={13} color=\"error\" sx={{ mt: 0.6, ml: 1 }}>\n {error.message}\n </Typography>\n )}\n\n <Popover\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"left\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"left\",\n }}\n slotProps={{\n paper: {\n sx: {\n mt: 1,\n maxWidth: isMobile ? \"95vw\" : \"auto\",\n width: isMobile ? \"auto\" : \"auto\",\n maxHeight: isMobile ? \"90vh\" : \"auto\",\n overflow: isMobile ? \"auto\" : \"visible\",\n },\n },\n }}\n >\n <Box sx={{ p: isMobile ? 1 : 2 }}>\n {/* Toolbar */}\n <Box sx={{ mb: 2 }}>\n <Typography variant=\"overline\" color=\"primary\">\n انتخاب بازه تاریخ\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {tempStartDate && tempEndDate\n ? `${tempStartDate.format(\"jDD jMMMM\")} تا ${tempEndDate.format(\"jDD jMMMM\")}`\n : tempStartDate\n ? `از ${tempStartDate.format(\"jDD jMMMM\")}`\n : \"تاریخ شروع و پایان را انتخاب کنید\"}\n </Typography>\n </Box>\n\n {/* Calendars - responsive layout */}\n {useMobilePickers ? (\n // Mobile-style: Use DatePicker inputs\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 2,\n alignItems: \"center\",\n width: \"100%\",\n }}\n >\n <Box sx={{ width: \"100%\" }}>\n <Typography variant=\"body2\" sx={{ mb: 1, fontWeight: 500 }}>\n تاریخ شروع (از):\n </Typography>\n <DatePicker\n value={tempStartDate}\n onChange={(day: Moment | null) => {\n setTempStartDate(day);\n }}\n openTo={fromOpenTo}\n views={fromViews}\n minDate={minDate}\n maxDate={maxDate || moment()}\n slotProps={{\n textField: {\n fullWidth: true,\n size: \"small\",\n placeholder: \"انتخاب تاریخ شروع\",\n },\n }}\n />\n </Box>\n\n <Box sx={{ width: \"100%\" }}>\n <Typography variant=\"body2\" sx={{ mb: 1, fontWeight: 500 }}>\n تاریخ پایان (تا):\n </Typography>\n <DatePicker\n value={tempEndDate}\n onChange={(day: Moment | null) => {\n setTempEndDate(day);\n }}\n openTo={toOpenTo}\n views={toViews}\n minDate={tempStartDate || minDate}\n maxDate={maxDate || moment()}\n slotProps={{\n textField: {\n fullWidth: true,\n size: \"small\",\n placeholder: \"انتخاب تاریخ پایان\",\n },\n }}\n />\n </Box>\n </Box>\n ) : (\n // Calendar popup style: Use StaticDatePicker(s)\n <Box\n sx={{\n display: \"flex\",\n gap: showSingleCalendar ? 0 : 2,\n flexDirection: showSingleCalendar ? \"column\" : \"row\",\n alignItems: \"center\",\n }}\n >\n {/* Smart Tabs for Single Calendar */}\n {!dualCalendar && showSingleCalendar && (\n <Box sx={{ width: \"100%\", mb: 2 }}>\n {/* Auto/Manual Toggle */}\n <Box\n sx={{ display: \"flex\", justifyContent: \"center\", mb: 1 }}\n >\n <Button\n size=\"small\"\n variant={autoSelectMode ? \"contained\" : \"outlined\"}\n onClick={() => setAutoSelectMode(!autoSelectMode)}\n sx={{ fontSize: \"12px\", minWidth: \"120px\" }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n }}\n >\n {autoSelectMode ? (\n <MdTipsAndUpdates size={16} />\n ) : (\n <MdPerson size={16} />\n )}\n {autoSelectMode ? \"هوشمند\" : \"دستی\"}\n </Box>\n </Button>\n </Box>\n\n {/* Date Selection Tabs */}\n {!autoSelectMode && (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n gap: 1,\n mb: 2,\n borderBottom: 1,\n borderColor: \"divider\",\n pb: 1,\n }}\n >\n <Button\n size=\"small\"\n variant={\n activeTab === \"from\" ? \"contained\" : \"outlined\"\n }\n onClick={() => setActiveTab(\"from\")}\n sx={{\n minWidth: \"140px\",\n fontSize: \"13px\",\n backgroundColor:\n activeTab === \"from\"\n ? \"primary.main\"\n : \"transparent\",\n color:\n activeTab === \"from\" ? \"white\" : \"primary.main\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n flexDirection: \"column\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n }}\n >\n <MdDateRange size={16} />\n از تاریخ\n </Box>\n {tempStartDate && (\n <Typography\n variant=\"caption\"\n sx={{ fontSize: \"10px\" }}\n >\n {tempStartDate.format(\"jYYYY/jMM/jDD\")}\n </Typography>\n )}\n </Box>\n </Button>\n\n <Button\n size=\"small\"\n variant={\n activeTab === \"to\" ? \"contained\" : \"outlined\"\n }\n onClick={() => setActiveTab(\"to\")}\n sx={{\n minWidth: \"140px\",\n fontSize: \"13px\",\n backgroundColor:\n activeTab === \"to\"\n ? \"primary.main\"\n : \"transparent\",\n color:\n activeTab === \"to\" ? \"white\" : \"primary.main\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n flexDirection: \"column\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.5,\n }}\n >\n <MdEvent size={16} />\n تا تاریخ\n </Box>\n {tempEndDate && (\n <Typography\n variant=\"caption\"\n sx={{ fontSize: \"10px\" }}\n >\n {tempEndDate.format(\"jYYYY/jMM/jDD\")}\n </Typography>\n )}\n </Box>\n </Button>\n </Box>\n )}\n\n {/* Auto Mode Status */}\n {autoSelectMode && (\n <Box sx={{ textAlign: \"center\", mb: 2 }}>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 0.5,\n }}\n >\n {!tempStartDate && !tempEndDate ? (\n <>\n <MdGpsFixed size={14} />\n اولین تاریخ را انتخاب کنید\n </>\n ) : tempStartDate && !tempEndDate ? (\n <>\n <MdGpsFixed size={14} />\n تاریخ پایان را انتخاب کنید\n </>\n ) : tempStartDate && tempEndDate ? (\n <>\n <MdCheckCircle size={14} />\n بازه انتخاب شده - تاریخ جدید برای شروع مجدد\n </>\n ) : (\n <>\n <MdGpsFixed size={14} />\n تاریخ شروع را انتخاب کنید\n </>\n )}\n </Typography>\n </Box>\n )}\n </Box>\n )}\n\n {/* تقویم اول */}\n <StaticDatePicker\n value={\n tempStartDate ||\n (fieldFrom.value ? moment(fieldFrom.value) : null)\n }\n onChange={(day: Moment | null) => {\n if (day) handleDaySelect(day, \"right\");\n }}\n openTo={fromOpenTo}\n views={fromViews}\n slots={{\n day: (props) =>\n CustomDay({\n ...props,\n startDate: tempStartDate,\n endDate: tempEndDate,\n }),\n actionBar: () => null,\n monthButton: (props) => {\n return (\n <button\n className={`${props.className}`}\n style={{\n width: \"100%\",\n padding: \"15px 8px\",\n border: \"1px solid #ccc\",\n borderRadius: \"8px\",\n backgroundColor: props.disabled\n ? \"#f0f0f0\"\n : \"#ffffff\",\n fontSize: \"17px\",\n cursor: props.disabled ? \"default\" : \"pointer\",\n textAlign: \"center\",\n boxSizing: \"border-box\",\n }}\n disabled={props.disabled}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n onClick={props.onClick}\n ref={props.ref}\n >\n {props[\"aria-label\"]}\n </button>\n );\n },\n }}\n minDate={minDate}\n maxDate={maxDate || moment()}\n slotProps={{\n toolbar: { hidden: true },\n layout: {\n sx: {\n \"& .MuiPickersCalendarHeader-root\": {\n minHeight: \"40px\",\n maxHeight: \"40px\",\n },\n \"& .MuiDayCalendar-header\": {\n justifyContent: \"space-around\",\n },\n \"& .MuiDayCalendar-weekContainer\": {\n justifyContent: \"space-around\",\n },\n \"& .MuiPickersDay-root\": {\n fontSize: \"0.875rem\",\n },\n \"& .MuiMonthCalendar-root\": {\n display: \"grid\",\n gridTemplateColumns: \"repeat(3, 1fr)\",\n gap: \"8px\",\n width: \"100%\",\n },\n },\n },\n }}\n sx={{\n \"& .MuiPickersLayout-contentWrapper\": {\n minWidth: showSingleCalendar ? \"300px\" : \"280px\",\n maxWidth: showSingleCalendar ? \"350px\" : \"320px\",\n },\n }}\n />\n\n {/* تقویم دوم - فقط در صورت فعال بودن dualCalendar */}\n {dualCalendar && !showSingleCalendar && (\n <StaticDatePicker\n value={secondCalendarMonth}\n onChange={(day: Moment | null) => {\n if (day) handleDaySelect(day, \"left\");\n }}\n openTo={toOpenTo}\n views={toViews}\n slots={{\n day: (props) =>\n CustomDay({\n ...props,\n startDate: tempStartDate,\n endDate: tempEndDate,\n }),\n actionBar: () => null,\n monthButton: (props) => {\n return (\n <button\n className={`${props.className}`}\n style={{\n width: \"100%\",\n padding: \"15px 8px\",\n border: \"1px solid #ccc\",\n borderRadius: \"8px\",\n backgroundColor: props.disabled\n ? \"#f0f0f0\"\n : \"#ffffff\",\n fontSize: \"17px\",\n cursor: props.disabled ? \"default\" : \"pointer\",\n textAlign: \"center\",\n boxSizing: \"border-box\",\n }}\n disabled={props.disabled}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n onClick={props.onClick}\n ref={props.ref}\n >\n {props[\"aria-label\"]}\n </button>\n );\n },\n }}\n minDate={minDate}\n maxDate={maxDate || moment()}\n slotProps={{\n toolbar: { hidden: true },\n layout: {\n sx: {\n \"& .MuiPickersCalendarHeader-root\": {\n minHeight: \"40px\",\n maxHeight: \"40px\",\n },\n \"& .MuiDayCalendar-header\": {\n justifyContent: \"space-around\",\n },\n \"& .MuiDayCalendar-weekContainer\": {\n justifyContent: \"space-around\",\n },\n \"& .MuiPickersDay-root\": {\n fontSize: \"0.875rem\",\n },\n \"& .MuiMonthCalendar-root\": {\n display: \"grid\",\n gridTemplateColumns: \"repeat(3, 1fr)\",\n gap: \"8px\",\n width: \"100%\",\n },\n },\n },\n }}\n sx={{\n \"& .MuiPickersLayout-contentWrapper\": {\n minWidth: \"280px\",\n maxWidth: \"320px\",\n },\n }}\n onMonthChange={(newMonth: Moment) => {\n setSecondCalendarMonth(newMonth);\n }}\n />\n )}\n </Box>\n )}\n\n {/* Action Buttons */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n gap: 1,\n mt: 2,\n pt: 2,\n borderTop: 1,\n borderColor: \"divider\",\n }}\n >\n <Box>\n {clear && (\n <Button\n size=\"small\"\n onClick={handleClear}\n disabled={!fieldFrom.value && !fieldTo.value}\n >\n پاک کردن\n </Button>\n )}\n </Box>\n <Box sx={{ display: \"flex\", gap: 1 }}>\n <Button size=\"small\" onClick={handleClose}>\n لغو\n </Button>\n <Button\n variant=\"contained\"\n size=\"small\"\n onClick={handleConfirm}\n disabled={!tempStartDate && !tempEndDate}\n >\n تأیید\n </Button>\n </Box>\n </Box>\n </Box>\n </Popover>\n </Box>\n </LocalizationProvider>\n );\n};\n\n/* کامپوننت سفارشی روزها با هایلایت بین start و end */\nfunction CustomDay(\n props: PickersDayProps<Moment> & {\n startDate?: Moment | null;\n endDate?: Moment | null;\n }\n) {\n const { day, outsideCurrentMonth, startDate, endDate, ...other } = props;\n\n const isToday = moment(day).isSame(moment(), \"day\");\n const isFriday = moment(day).day() === 5;\n\n let inRange = false;\n if (startDate && endDate) {\n inRange = day.isAfter(startDate, \"day\") && day.isBefore(endDate, \"day\");\n }\n\n const isStart = startDate && day.isSame(startDate, \"day\");\n const isEnd = endDate && day.isSame(endDate, \"day\");\n const isSelected = isStart || isEnd;\n\n return (\n <PickersDay\n {...other}\n day={day}\n outsideCurrentMonth={outsideCurrentMonth}\n selected={false}\n sx={{\n borderRadius: isSelected ? \"50%\" : inRange ? \"100%\" : \"50%\",\n fontSize: \"0.9rem\",\n width: 34,\n height: 34,\n my: 0.2,\n bgcolor: isSelected\n ? \"primary.main\"\n : inRange\n ? \"rgba(25,118,210,0.12)\"\n : isToday\n ? \"rgba(25,118,210,0.08)\"\n : \"transparent\",\n color: isSelected\n ? \"#fff\"\n : isFriday\n ? \"error.main\"\n : isToday\n ? \"primary.main\"\n : outsideCurrentMonth\n ? \"text.disabled\"\n : \"text.primary\",\n fontWeight: isSelected ? 600 : isToday ? 500 : 400,\n \"&:hover\": {\n bgcolor: isSelected\n ? \"primary.dark\"\n : inRange\n ? \"rgba(25,118,210,0.2)\"\n : \"rgba(0,0,0,0.04)\",\n },\n ...(isStart &&\n endDate && {\n borderTopRightRadius: \"50%\",\n borderBottomRightRadius: \"50%\",\n }),\n ...(isEnd &&\n startDate && {\n borderTopLeftRadius: \"50%\",\n borderBottomLeftRadius: \"50%\",\n }),\n }}\n />\n );\n}\n\nexport default DateRangePicker;\n"],"mappings":"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","names":["React"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -16,9 +16,10 @@ interface MultipleSelectChipProps {
|
|
|
16
16
|
disabled?: boolean;
|
|
17
17
|
size?: "small" | "medium";
|
|
18
18
|
clear?: boolean;
|
|
19
|
+
variant?: "outlined" | "filled" | "standard";
|
|
20
|
+
placeholder?: string;
|
|
19
21
|
}
|
|
20
|
-
declare function MultipleSelectChip({ name, control, label, data, multipleitems,
|
|
21
|
-
isLoading, disabled, size, clear, }: MultipleSelectChipProps): React.JSX.Element;
|
|
22
|
+
declare function MultipleSelectChip({ name, control, label, data, multipleitems, isLoading, disabled, size, clear, variant, placeholder, }: MultipleSelectChipProps): React.JSX.Element;
|
|
22
23
|
|
|
23
24
|
interface AdvancedSearchButtonProps {
|
|
24
25
|
isShowFilter: boolean;
|
|
@@ -272,9 +273,9 @@ type FormInputNumberProps<T extends FieldValues> = {
|
|
|
272
273
|
onKeyDown?: any;
|
|
273
274
|
textAlign?: "left" | "right" | "center";
|
|
274
275
|
autoComplete?: string;
|
|
275
|
-
|
|
276
|
+
variant?: "outlined" | "filled" | "standard";
|
|
276
277
|
} & TextFieldProps;
|
|
277
|
-
declare const FormInputNumber: <T extends FieldValues>({ name, control, label, inputRef, onKeyDown, endAdornment, thousandSeparator, startAdornment, onChangeHandler, valueHandler, allowLeadingZeros, allowNegative, maxLength, isLoading, rules, data, borderColor, placeholder, decimalScale, autoComplete, textAlign,
|
|
278
|
+
declare const FormInputNumber: <T extends FieldValues>({ name, control, label, inputRef, onKeyDown, endAdornment, thousandSeparator, startAdornment, onChangeHandler, valueHandler, allowLeadingZeros, allowNegative, maxLength, isLoading, rules, data, borderColor, placeholder, decimalScale, autoComplete, textAlign, variant, ...rest }: FormInputNumberProps<T>) => React__default.JSX.Element;
|
|
278
279
|
|
|
279
280
|
type FormInputTextProps$1<T extends FieldValues> = {
|
|
280
281
|
control: Control<T>;
|
|
@@ -289,8 +290,9 @@ type FormInputTextProps$1<T extends FieldValues> = {
|
|
|
289
290
|
isLoading?: boolean;
|
|
290
291
|
onBlurHandler?: any;
|
|
291
292
|
rows?: number;
|
|
293
|
+
variant?: "outlined" | "filled" | "standard";
|
|
292
294
|
} & TextFieldProps;
|
|
293
|
-
declare const FormInputText: <T extends FieldValues>({ name, control, label, maxLength, readOnly, rules, size, disabled, multiline, isLoading, onBlurHandler, rows, ...rest }: FormInputTextProps$1<T>) => React__default.JSX.Element;
|
|
295
|
+
declare const FormInputText: <T extends FieldValues>({ name, control, label, maxLength, readOnly, rules, size, disabled, multiline, isLoading, onBlurHandler, rows, variant, ...rest }: FormInputTextProps$1<T>) => React__default.JSX.Element;
|
|
294
296
|
|
|
295
297
|
type FormInputTextProps<T extends FieldValues> = {
|
|
296
298
|
control: Control<T>;
|
package/dist/index.d.ts
CHANGED
|
@@ -16,9 +16,10 @@ interface MultipleSelectChipProps {
|
|
|
16
16
|
disabled?: boolean;
|
|
17
17
|
size?: "small" | "medium";
|
|
18
18
|
clear?: boolean;
|
|
19
|
+
variant?: "outlined" | "filled" | "standard";
|
|
20
|
+
placeholder?: string;
|
|
19
21
|
}
|
|
20
|
-
declare function MultipleSelectChip({ name, control, label, data, multipleitems,
|
|
21
|
-
isLoading, disabled, size, clear, }: MultipleSelectChipProps): React.JSX.Element;
|
|
22
|
+
declare function MultipleSelectChip({ name, control, label, data, multipleitems, isLoading, disabled, size, clear, variant, placeholder, }: MultipleSelectChipProps): React.JSX.Element;
|
|
22
23
|
|
|
23
24
|
interface AdvancedSearchButtonProps {
|
|
24
25
|
isShowFilter: boolean;
|
|
@@ -272,9 +273,9 @@ type FormInputNumberProps<T extends FieldValues> = {
|
|
|
272
273
|
onKeyDown?: any;
|
|
273
274
|
textAlign?: "left" | "right" | "center";
|
|
274
275
|
autoComplete?: string;
|
|
275
|
-
|
|
276
|
+
variant?: "outlined" | "filled" | "standard";
|
|
276
277
|
} & TextFieldProps;
|
|
277
|
-
declare const FormInputNumber: <T extends FieldValues>({ name, control, label, inputRef, onKeyDown, endAdornment, thousandSeparator, startAdornment, onChangeHandler, valueHandler, allowLeadingZeros, allowNegative, maxLength, isLoading, rules, data, borderColor, placeholder, decimalScale, autoComplete, textAlign,
|
|
278
|
+
declare const FormInputNumber: <T extends FieldValues>({ name, control, label, inputRef, onKeyDown, endAdornment, thousandSeparator, startAdornment, onChangeHandler, valueHandler, allowLeadingZeros, allowNegative, maxLength, isLoading, rules, data, borderColor, placeholder, decimalScale, autoComplete, textAlign, variant, ...rest }: FormInputNumberProps<T>) => React__default.JSX.Element;
|
|
278
279
|
|
|
279
280
|
type FormInputTextProps$1<T extends FieldValues> = {
|
|
280
281
|
control: Control<T>;
|
|
@@ -289,8 +290,9 @@ type FormInputTextProps$1<T extends FieldValues> = {
|
|
|
289
290
|
isLoading?: boolean;
|
|
290
291
|
onBlurHandler?: any;
|
|
291
292
|
rows?: number;
|
|
293
|
+
variant?: "outlined" | "filled" | "standard";
|
|
292
294
|
} & TextFieldProps;
|
|
293
|
-
declare const FormInputText: <T extends FieldValues>({ name, control, label, maxLength, readOnly, rules, size, disabled, multiline, isLoading, onBlurHandler, rows, ...rest }: FormInputTextProps$1<T>) => React__default.JSX.Element;
|
|
295
|
+
declare const FormInputText: <T extends FieldValues>({ name, control, label, maxLength, readOnly, rules, size, disabled, multiline, isLoading, onBlurHandler, rows, variant, ...rest }: FormInputTextProps$1<T>) => React__default.JSX.Element;
|
|
294
296
|
|
|
295
297
|
type FormInputTextProps<T extends FieldValues> = {
|
|
296
298
|
control: Control<T>;
|
package/dist/index.js
CHANGED
|
@@ -607,16 +607,16 @@ function MultipleSelectChip({
|
|
|
607
607
|
label,
|
|
608
608
|
data,
|
|
609
609
|
multipleitems,
|
|
610
|
-
//قابلیت انتخاب چند گزینه ای
|
|
611
610
|
isLoading,
|
|
612
611
|
disabled = false,
|
|
613
612
|
size = "medium",
|
|
614
|
-
clear = false
|
|
613
|
+
clear = false,
|
|
614
|
+
variant = "outlined",
|
|
615
|
+
placeholder
|
|
615
616
|
}) {
|
|
616
617
|
const dataOptions = data?.map((value) => ({
|
|
617
618
|
title: value.userName || value.name || `${value.firstName} ${value.lastName}`,
|
|
618
619
|
key: value.id || `key_${Math.random()}`,
|
|
619
|
-
// Assuming each item has an 'id'
|
|
620
620
|
httpMethod: numberToHttpMethodMapping[value.httpMethod],
|
|
621
621
|
url: value.url,
|
|
622
622
|
licensePlate: value.licensePlate
|
|
@@ -641,16 +641,6 @@ function MultipleSelectChip({
|
|
|
641
641
|
onChange(value?.key || null);
|
|
642
642
|
}
|
|
643
643
|
};
|
|
644
|
-
function search(option, value) {
|
|
645
|
-
if (option.title.includes(value.title)) {
|
|
646
|
-
return true;
|
|
647
|
-
}
|
|
648
|
-
if (value.title.includes(option.title)) {
|
|
649
|
-
return true;
|
|
650
|
-
}
|
|
651
|
-
return false;
|
|
652
|
-
}
|
|
653
|
-
const CustomStyledValue = ({ children }) => /* @__PURE__ */ React3.createElement("span", { style: { color: "green", fontStyle: "italic" } }, children);
|
|
654
644
|
return /* @__PURE__ */ React3.createElement(
|
|
655
645
|
import_react_hook_form.Controller,
|
|
656
646
|
{
|
|
@@ -665,30 +655,24 @@ function MultipleSelectChip({
|
|
|
665
655
|
disableCloseOnSelect: multipleitems,
|
|
666
656
|
options: combinedOptions,
|
|
667
657
|
multiple: multipleitems,
|
|
668
|
-
sx: {
|
|
669
|
-
|
|
670
|
-
},
|
|
671
|
-
noOptionsText: "\u062F\u0627\u062F\u0647 \u0627\u06CC \u0628\u0631\u0627\u06CC \u0646\u0645\u0627\u06CC\u0634 \u0648\u062C\u0648\u062F \u0646\u062F\u0627\u0631\u062F",
|
|
658
|
+
sx: { width: "100%" },
|
|
659
|
+
noOptionsText: "\u062F\u0627\u062F\u0647\u200C\u0627\u06CC \u0628\u0631\u0627\u06CC \u0646\u0645\u0627\u06CC\u0634 \u0648\u062C\u0648\u062F \u0646\u062F\u0627\u0631\u062F",
|
|
672
660
|
value: multipleitems ? selectedValues : combinedOptions.find(
|
|
673
661
|
(option) => String(option.key) === String(value)
|
|
674
662
|
) || { title: "", key: "" },
|
|
675
|
-
onChange: (event, value2) =>
|
|
676
|
-
handleChange(event, value2, onChange);
|
|
677
|
-
},
|
|
663
|
+
onChange: (event, value2) => handleChange(event, value2, onChange),
|
|
678
664
|
isOptionEqualToValue: (option, value2) => String(option.key) === String(value2?.key),
|
|
679
665
|
getOptionLabel: (option) => option.title,
|
|
680
666
|
loading: isLoading,
|
|
681
667
|
loadingText: "\u062F\u0631 \u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC...",
|
|
682
|
-
renderOption: (props, option) =>
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
);
|
|
691
|
-
},
|
|
668
|
+
renderOption: (props, option) => /* @__PURE__ */ React3.createElement(
|
|
669
|
+
CustomeStyle,
|
|
670
|
+
{
|
|
671
|
+
props,
|
|
672
|
+
option,
|
|
673
|
+
multipleitems: !!multipleitems
|
|
674
|
+
}
|
|
675
|
+
),
|
|
692
676
|
slots: { popper: import_material3.Popper },
|
|
693
677
|
slotProps: {
|
|
694
678
|
popper: {
|
|
@@ -706,7 +690,6 @@ function MultipleSelectChip({
|
|
|
706
690
|
name: "flip",
|
|
707
691
|
options: {
|
|
708
692
|
fallbackPlacements: ["top", "bottom"]
|
|
709
|
-
// Ensures it flips to the top if needed
|
|
710
693
|
}
|
|
711
694
|
}
|
|
712
695
|
]
|
|
@@ -720,6 +703,8 @@ function MultipleSelectChip({
|
|
|
720
703
|
error: !!error,
|
|
721
704
|
helperText: error?.message,
|
|
722
705
|
inputRef: ref,
|
|
706
|
+
variant,
|
|
707
|
+
placeholder,
|
|
723
708
|
InputProps: {
|
|
724
709
|
...params.InputProps,
|
|
725
710
|
startAdornment: /* @__PURE__ */ React3.createElement(
|
|
@@ -729,14 +714,12 @@ function MultipleSelectChip({
|
|
|
729
714
|
display: "flex",
|
|
730
715
|
flexWrap: "wrap",
|
|
731
716
|
maxHeight: "250px",
|
|
732
|
-
// Set the maximum height for the chip container
|
|
733
717
|
overflowY: "auto",
|
|
734
|
-
// Enable vertical scroll
|
|
735
718
|
padding: 0
|
|
736
|
-
// Remove any padding to ensure chips stay inside the container
|
|
737
719
|
}
|
|
738
720
|
},
|
|
739
|
-
|
|
721
|
+
isLoading ? /* @__PURE__ */ React3.createElement(import_material3.Typography, { sx: { marginRight: 1 } }, "\u062F\u0631 \u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC...") : null,
|
|
722
|
+
params.InputProps.startAdornment
|
|
740
723
|
)
|
|
741
724
|
}
|
|
742
725
|
}
|
|
@@ -3552,7 +3535,7 @@ var FormInputNumber = ({
|
|
|
3552
3535
|
decimalScale = 2,
|
|
3553
3536
|
autoComplete = "off",
|
|
3554
3537
|
textAlign = "right",
|
|
3555
|
-
|
|
3538
|
+
variant = "outlined",
|
|
3556
3539
|
...rest
|
|
3557
3540
|
}) => {
|
|
3558
3541
|
return /* @__PURE__ */ import_react22.default.createElement(
|
|
@@ -3576,30 +3559,18 @@ var FormInputNumber = ({
|
|
|
3576
3559
|
},
|
|
3577
3560
|
value: data && !value ? data : value == null ? "" : valueHandler ? valueHandler(value) : value,
|
|
3578
3561
|
fullWidth: true,
|
|
3579
|
-
variant
|
|
3562
|
+
variant,
|
|
3580
3563
|
sx: {
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
|
|
3586
|
-
|
|
3587
|
-
|
|
3588
|
-
"& .MuiInput-underline:hover:not(.Mui-disabled):before": {
|
|
3589
|
-
borderBottom: "none"
|
|
3590
|
-
}
|
|
3591
|
-
} : {
|
|
3592
|
-
"& .MuiOutlinedInput-notchedOutline": {
|
|
3593
|
-
borderColor: borderColor || ""
|
|
3564
|
+
"& .MuiOutlinedInput-notchedOutline": {
|
|
3565
|
+
borderColor: borderColor || ""
|
|
3566
|
+
},
|
|
3567
|
+
"& .MuiOutlinedInput-root": {
|
|
3568
|
+
borderRadius: "12px",
|
|
3569
|
+
"&:hover fieldset": {
|
|
3570
|
+
borderColor: borderColor ?? "#085938"
|
|
3594
3571
|
},
|
|
3595
|
-
"
|
|
3596
|
-
|
|
3597
|
-
"&:hover fieldset": {
|
|
3598
|
-
borderColor: borderColor ?? "#085938"
|
|
3599
|
-
},
|
|
3600
|
-
"&.Mui-focused fieldset": {
|
|
3601
|
-
borderColor: borderColor ?? "#085938"
|
|
3602
|
-
}
|
|
3572
|
+
"&.Mui-focused fieldset": {
|
|
3573
|
+
borderColor: borderColor ?? "#085938"
|
|
3603
3574
|
}
|
|
3604
3575
|
},
|
|
3605
3576
|
"& .MuiInputLabel-root.Mui-focused": {
|
|
@@ -3687,6 +3658,7 @@ var FormInputText = ({
|
|
|
3687
3658
|
isLoading,
|
|
3688
3659
|
onBlurHandler,
|
|
3689
3660
|
rows,
|
|
3661
|
+
variant = "outlined",
|
|
3690
3662
|
...rest
|
|
3691
3663
|
}) => {
|
|
3692
3664
|
return /* @__PURE__ */ import_react23.default.createElement(
|
|
@@ -3708,7 +3680,7 @@ var FormInputText = ({
|
|
|
3708
3680
|
value,
|
|
3709
3681
|
fullWidth: true,
|
|
3710
3682
|
label,
|
|
3711
|
-
variant
|
|
3683
|
+
variant,
|
|
3712
3684
|
inputProps: {
|
|
3713
3685
|
...rest.inputProps,
|
|
3714
3686
|
maxLength,
|