@mamrp/components 1.7.3 → 1.7.4

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.
@@ -112,7 +112,7 @@ interface MultipleSelectChipProps<T extends OptionType> {
112
112
  isLoading?: boolean;
113
113
  disabled?: boolean;
114
114
  size?: "small" | "medium";
115
- clear?: boolean;
115
+ disableClearable?: boolean;
116
116
  renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode;
117
117
  }
118
118
  /**
@@ -127,7 +127,7 @@ interface MultipleSelectChipProps<T extends OptionType> {
127
127
  * @param {boolean} [isLoading=false] - آیا داده‌ها در حال بارگذاری هستند.
128
128
  * @param {boolean} [disabled=false] - غیرفعال‌سازی ورودی.
129
129
  * @param {"small" | "medium"} [size="medium"] - سایز ورودی.
130
- * @param {boolean} [clear=false] - آیا امکان پاک کردن وجود دارد یا نه.
130
+ * @param {boolean} [disableClearable=false] - آیا امکان پاک کردن وجود دارد یا نه.
131
131
  * @param {string} [tooltip] - متن راهنما هنگام هاور.
132
132
  * @param {(props, option) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.
133
133
  *
@@ -156,7 +156,7 @@ interface MultipleSelectChipProps<T extends OptionType> {
156
156
  * )}
157
157
  * ```
158
158
  */
159
- declare function MultipleSelector<T extends OptionType>({ name, control, label, data, isLoading, disabled, size, clear, renderOption, }: MultipleSelectChipProps<T>): React.JSX.Element;
159
+ declare function MultipleSelector<T extends OptionType>({ name, control, label, data, isLoading, disabled, size, disableClearable, renderOption, }: MultipleSelectChipProps<T>): React.JSX.Element;
160
160
 
161
161
  interface BaseOption$1 {
162
162
  key: number | string | "false" | true;
@@ -172,7 +172,7 @@ interface SeacrchableSelectChipProps<T extends BaseOption$1 = BaseOption$1> {
172
172
  isLoading?: boolean;
173
173
  disabled?: boolean;
174
174
  size?: "small" | "medium";
175
- clear?: boolean;
175
+ disableClearable?: boolean;
176
176
  onChangeHandler?: (value: any, onChange: (data: any) => void) => void;
177
177
  valueHandler?: (value: any) => any;
178
178
  onFilterOptions: (inputValue: string) => void;
@@ -192,7 +192,7 @@ interface SeacrchableSelectChipProps<T extends BaseOption$1 = BaseOption$1> {
192
192
  * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).
193
193
  * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.
194
194
  * @param {"small" | "medium"} [size="medium"] - اندازه ورودی.
195
- * @param {boolean} [clear=false] - فعال بودن امکان پاک‌کردن مقدار انتخاب‌شده.
195
+ * @param {boolean} [disableClearable=false] - فعال بودن امکان پاک‌کردن مقدار انتخاب‌شده.
196
196
  * @param {(value: any, onChange: (data: any) => void) => void} [onChangeHandler] - تابع هندل انتخاب گزینه (در صورت نیاز به کنترل خارجی).
197
197
  * @param {(value: any) => string} [valueHandler] - تابع تبدیل مقدار ذخیره‌شده در فرم به مقدار نمایشی در input (مثلاً عنوان).
198
198
  * @param {string} [inputValue] - مقدار ورودی کنونی (برای کنترل ورودی).
@@ -229,7 +229,7 @@ interface SeacrchableSelectChipProps<T extends BaseOption$1 = BaseOption$1> {
229
229
  * )}
230
230
  * ```
231
231
  */
232
- declare function SearchableSelector<T extends BaseOption$1 = BaseOption$1>({ name, control, label, data, inputValue, isLoading, disabled, size, clear, onChangeHandler, valueHandler, onFilterOptions, renderOption, }: SeacrchableSelectChipProps<T>): React.JSX.Element;
232
+ declare function SearchableSelector<T extends BaseOption$1 = BaseOption$1>({ name, control, label, data, inputValue, isLoading, disabled, size, disableClearable, onChangeHandler, valueHandler, onFilterOptions, renderOption, }: SeacrchableSelectChipProps<T>): React.JSX.Element;
233
233
 
234
234
  interface BaseOption {
235
235
  key: number | string | "false" | true;
@@ -241,7 +241,6 @@ interface SingleClientSelectorProps<T extends BaseOption = BaseOption> {
241
241
  control: Control<any>;
242
242
  label?: string;
243
243
  data?: T[];
244
- multipleitems?: boolean;
245
244
  isLoading?: boolean;
246
245
  disabled?: boolean;
247
246
  size?: "small" | "medium";
@@ -250,6 +249,106 @@ interface SingleClientSelectorProps<T extends BaseOption = BaseOption> {
250
249
  placeholder?: string;
251
250
  renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState$1) => React.ReactNode;
252
251
  }
252
+ /**
253
+ * 🔍 کامپوننت انتخاب تکی کلاینت با قابلیت جست‌وجو، پشتیبانی از react-hook-form و MUI Autocomplete
254
+ *
255
+ * @component SingleClientSelector
256
+ *
257
+ * @template T - نوع گزینه‌ها که باید شامل `key` و `title` باشد و از BaseOption ارث‌بری کند.
258
+ *
259
+ * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.
260
+ * @param {Control<any>} control - کنترل فرم از `react-hook-form`.
261
+ * @param {string} [label] - برچسب نمایشی برای فیلد.
262
+ * @param {T[]} [data] - لیستی از گزینه‌ها شامل `key` و `title` به عنوان مقدار و متن نمایشی.
263
+ * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).
264
+ * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.
265
+ * @param {"small" | "medium"} [size="medium"] - اندازه ورودی.
266
+ * @param {boolean} [disableClearable=false] - غیرفعال کردن امکان پاک‌کردن مقدار انتخاب‌شده.
267
+ * @param {TextFieldVariants} [variant="outlined"] - نوع نمایش TextField (outlined، filled، standard).
268
+ * @param {string} [placeholder] - متن راهنما برای ورودی.
269
+ * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.
270
+ *
271
+ * @returns {string | number | boolean | null} مقدار انتخاب‌شده (کلید گزینه یا null)
272
+ *
273
+ * @example
274
+ * ```tsx
275
+ * // استفاده ساده
276
+ * <SingleClientSelector<{ title: string; key: number }>
277
+ * name="clientId"
278
+ * label="انتخاب مشتری"
279
+ * control={control}
280
+ * data={[
281
+ * { title: "شرکت الف", key: 1 },
282
+ * { title: "شرکت ب", key: 2 }
283
+ * ]}
284
+ * />
285
+ * ```
286
+ *
287
+ * @example
288
+ * ```tsx
289
+ * // استفاده پیشرفته با رندرینگ سفارشی
290
+ * <SingleClientSelector<Client>
291
+ * name="selectedClient"
292
+ * label="انتخاب مشتری"
293
+ * control={control}
294
+ * data={clients}
295
+ * isLoading={isLoadingClients}
296
+ * placeholder="جستجو و انتخاب مشتری..."
297
+ * renderOption={(props, option) => (
298
+ * <li {...props} key={option.key}>
299
+ * <div style={{ display: 'flex', flexDirection: 'column' }}>
300
+ * <strong>{option.title}</strong>
301
+ * <small>{option.email}</small>
302
+ * </div>
303
+ * </li>
304
+ * )}
305
+ * />
306
+ * ```
307
+ *
308
+ * @description
309
+ * این کامپوننت یک انتخاب‌گر تکی اختصاصی برای کلاینت‌ها با قابلیت‌های زیر است:
310
+ *
311
+ * ✅ **یکپارچگی با فرم**: پشتیبانی کامل از `react-hook-form` با validation
312
+ * 🔍 **جست‌وجو**: امکان جست‌وجو در لیست گزینه‌ها
313
+ * ⚡ **بارگذاری**: نمایش وضعیت loading هنگام fetch داده‌ها
314
+ * 🎨 **سفارشی‌سازی**: امکان سفارشی‌سازی کامل نمایش آیتم‌ها
315
+ * 🧹 **پاک‌سازی**: قابلیت پاک کردن انتخاب (قابل غیرفعال‌سازی)
316
+ * 📱 **ریسپانسیو**: طراحی مناسب برای همه اندازه صفحه‌ها
317
+ * 🌐 **RTL**: پشتیبانی کامل از راست به چپ
318
+ * 🎯 **بهینه**: بهینه‌سازی شده برای عملکرد بالا با `useMemo`
319
+ *
320
+ * **نکات مهم:**
321
+ * - مقدار خروجی همیشه `key` گزینه انتخاب‌شده است
322
+ * - در صورت عدم انتخاب، مقدار `null` برگردانده می‌شود
323
+ * - هر گزینه باید دارای `key` و `title` یکتا باشد
324
+ * - کامپوننت خطاهای validation فرم را نمایش می‌دهد
325
+ * - از Popper برای بهبود عملکرد dropdown استفاده می‌کند
326
+ *
327
+ * **الگوی استفاده معمول:**
328
+ * ```tsx
329
+ * // تعریف نوع داده
330
+ * interface Client {
331
+ * key: number;
332
+ * title: string;
333
+ * email?: string;
334
+ * phone?: string;
335
+ * }
336
+ *
337
+ * // در کامپوننت
338
+ * const { control, watch } = useForm();
339
+ * const { data: clients, isLoading } = useGetClients();
340
+ *
341
+ * return (
342
+ * <SingleClientSelector<Client>
343
+ * name="clientId"
344
+ * control={control}
345
+ * label="انتخاب مشتری"
346
+ * data={clients}
347
+ * isLoading={isLoading}
348
+ * />
349
+ * );
350
+ * ```
351
+ */
253
352
  declare function SingleClientSelector<T extends BaseOption = BaseOption>({ name, control, label, data, isLoading, disabled, size, disableClearable, variant, placeholder, renderOption, }: SingleClientSelectorProps<T>): React.JSX.Element;
254
353
 
255
354
  export { MultiCheckSelector, MultipleSelector, SearchableSelector, SingleClientSelector };
@@ -112,7 +112,7 @@ interface MultipleSelectChipProps<T extends OptionType> {
112
112
  isLoading?: boolean;
113
113
  disabled?: boolean;
114
114
  size?: "small" | "medium";
115
- clear?: boolean;
115
+ disableClearable?: boolean;
116
116
  renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode;
117
117
  }
118
118
  /**
@@ -127,7 +127,7 @@ interface MultipleSelectChipProps<T extends OptionType> {
127
127
  * @param {boolean} [isLoading=false] - آیا داده‌ها در حال بارگذاری هستند.
128
128
  * @param {boolean} [disabled=false] - غیرفعال‌سازی ورودی.
129
129
  * @param {"small" | "medium"} [size="medium"] - سایز ورودی.
130
- * @param {boolean} [clear=false] - آیا امکان پاک کردن وجود دارد یا نه.
130
+ * @param {boolean} [disableClearable=false] - آیا امکان پاک کردن وجود دارد یا نه.
131
131
  * @param {string} [tooltip] - متن راهنما هنگام هاور.
132
132
  * @param {(props, option) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.
133
133
  *
@@ -156,7 +156,7 @@ interface MultipleSelectChipProps<T extends OptionType> {
156
156
  * )}
157
157
  * ```
158
158
  */
159
- declare function MultipleSelector<T extends OptionType>({ name, control, label, data, isLoading, disabled, size, clear, renderOption, }: MultipleSelectChipProps<T>): React.JSX.Element;
159
+ declare function MultipleSelector<T extends OptionType>({ name, control, label, data, isLoading, disabled, size, disableClearable, renderOption, }: MultipleSelectChipProps<T>): React.JSX.Element;
160
160
 
161
161
  interface BaseOption$1 {
162
162
  key: number | string | "false" | true;
@@ -172,7 +172,7 @@ interface SeacrchableSelectChipProps<T extends BaseOption$1 = BaseOption$1> {
172
172
  isLoading?: boolean;
173
173
  disabled?: boolean;
174
174
  size?: "small" | "medium";
175
- clear?: boolean;
175
+ disableClearable?: boolean;
176
176
  onChangeHandler?: (value: any, onChange: (data: any) => void) => void;
177
177
  valueHandler?: (value: any) => any;
178
178
  onFilterOptions: (inputValue: string) => void;
@@ -192,7 +192,7 @@ interface SeacrchableSelectChipProps<T extends BaseOption$1 = BaseOption$1> {
192
192
  * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).
193
193
  * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.
194
194
  * @param {"small" | "medium"} [size="medium"] - اندازه ورودی.
195
- * @param {boolean} [clear=false] - فعال بودن امکان پاک‌کردن مقدار انتخاب‌شده.
195
+ * @param {boolean} [disableClearable=false] - فعال بودن امکان پاک‌کردن مقدار انتخاب‌شده.
196
196
  * @param {(value: any, onChange: (data: any) => void) => void} [onChangeHandler] - تابع هندل انتخاب گزینه (در صورت نیاز به کنترل خارجی).
197
197
  * @param {(value: any) => string} [valueHandler] - تابع تبدیل مقدار ذخیره‌شده در فرم به مقدار نمایشی در input (مثلاً عنوان).
198
198
  * @param {string} [inputValue] - مقدار ورودی کنونی (برای کنترل ورودی).
@@ -229,7 +229,7 @@ interface SeacrchableSelectChipProps<T extends BaseOption$1 = BaseOption$1> {
229
229
  * )}
230
230
  * ```
231
231
  */
232
- declare function SearchableSelector<T extends BaseOption$1 = BaseOption$1>({ name, control, label, data, inputValue, isLoading, disabled, size, clear, onChangeHandler, valueHandler, onFilterOptions, renderOption, }: SeacrchableSelectChipProps<T>): React.JSX.Element;
232
+ declare function SearchableSelector<T extends BaseOption$1 = BaseOption$1>({ name, control, label, data, inputValue, isLoading, disabled, size, disableClearable, onChangeHandler, valueHandler, onFilterOptions, renderOption, }: SeacrchableSelectChipProps<T>): React.JSX.Element;
233
233
 
234
234
  interface BaseOption {
235
235
  key: number | string | "false" | true;
@@ -241,7 +241,6 @@ interface SingleClientSelectorProps<T extends BaseOption = BaseOption> {
241
241
  control: Control<any>;
242
242
  label?: string;
243
243
  data?: T[];
244
- multipleitems?: boolean;
245
244
  isLoading?: boolean;
246
245
  disabled?: boolean;
247
246
  size?: "small" | "medium";
@@ -250,6 +249,106 @@ interface SingleClientSelectorProps<T extends BaseOption = BaseOption> {
250
249
  placeholder?: string;
251
250
  renderOption?: (props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState$1) => React.ReactNode;
252
251
  }
252
+ /**
253
+ * 🔍 کامپوننت انتخاب تکی کلاینت با قابلیت جست‌وجو، پشتیبانی از react-hook-form و MUI Autocomplete
254
+ *
255
+ * @component SingleClientSelector
256
+ *
257
+ * @template T - نوع گزینه‌ها که باید شامل `key` و `title` باشد و از BaseOption ارث‌بری کند.
258
+ *
259
+ * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.
260
+ * @param {Control<any>} control - کنترل فرم از `react-hook-form`.
261
+ * @param {string} [label] - برچسب نمایشی برای فیلد.
262
+ * @param {T[]} [data] - لیستی از گزینه‌ها شامل `key` و `title` به عنوان مقدار و متن نمایشی.
263
+ * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).
264
+ * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.
265
+ * @param {"small" | "medium"} [size="medium"] - اندازه ورودی.
266
+ * @param {boolean} [disableClearable=false] - غیرفعال کردن امکان پاک‌کردن مقدار انتخاب‌شده.
267
+ * @param {TextFieldVariants} [variant="outlined"] - نوع نمایش TextField (outlined، filled، standard).
268
+ * @param {string} [placeholder] - متن راهنما برای ورودی.
269
+ * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.
270
+ *
271
+ * @returns {string | number | boolean | null} مقدار انتخاب‌شده (کلید گزینه یا null)
272
+ *
273
+ * @example
274
+ * ```tsx
275
+ * // استفاده ساده
276
+ * <SingleClientSelector<{ title: string; key: number }>
277
+ * name="clientId"
278
+ * label="انتخاب مشتری"
279
+ * control={control}
280
+ * data={[
281
+ * { title: "شرکت الف", key: 1 },
282
+ * { title: "شرکت ب", key: 2 }
283
+ * ]}
284
+ * />
285
+ * ```
286
+ *
287
+ * @example
288
+ * ```tsx
289
+ * // استفاده پیشرفته با رندرینگ سفارشی
290
+ * <SingleClientSelector<Client>
291
+ * name="selectedClient"
292
+ * label="انتخاب مشتری"
293
+ * control={control}
294
+ * data={clients}
295
+ * isLoading={isLoadingClients}
296
+ * placeholder="جستجو و انتخاب مشتری..."
297
+ * renderOption={(props, option) => (
298
+ * <li {...props} key={option.key}>
299
+ * <div style={{ display: 'flex', flexDirection: 'column' }}>
300
+ * <strong>{option.title}</strong>
301
+ * <small>{option.email}</small>
302
+ * </div>
303
+ * </li>
304
+ * )}
305
+ * />
306
+ * ```
307
+ *
308
+ * @description
309
+ * این کامپوننت یک انتخاب‌گر تکی اختصاصی برای کلاینت‌ها با قابلیت‌های زیر است:
310
+ *
311
+ * ✅ **یکپارچگی با فرم**: پشتیبانی کامل از `react-hook-form` با validation
312
+ * 🔍 **جست‌وجو**: امکان جست‌وجو در لیست گزینه‌ها
313
+ * ⚡ **بارگذاری**: نمایش وضعیت loading هنگام fetch داده‌ها
314
+ * 🎨 **سفارشی‌سازی**: امکان سفارشی‌سازی کامل نمایش آیتم‌ها
315
+ * 🧹 **پاک‌سازی**: قابلیت پاک کردن انتخاب (قابل غیرفعال‌سازی)
316
+ * 📱 **ریسپانسیو**: طراحی مناسب برای همه اندازه صفحه‌ها
317
+ * 🌐 **RTL**: پشتیبانی کامل از راست به چپ
318
+ * 🎯 **بهینه**: بهینه‌سازی شده برای عملکرد بالا با `useMemo`
319
+ *
320
+ * **نکات مهم:**
321
+ * - مقدار خروجی همیشه `key` گزینه انتخاب‌شده است
322
+ * - در صورت عدم انتخاب، مقدار `null` برگردانده می‌شود
323
+ * - هر گزینه باید دارای `key` و `title` یکتا باشد
324
+ * - کامپوننت خطاهای validation فرم را نمایش می‌دهد
325
+ * - از Popper برای بهبود عملکرد dropdown استفاده می‌کند
326
+ *
327
+ * **الگوی استفاده معمول:**
328
+ * ```tsx
329
+ * // تعریف نوع داده
330
+ * interface Client {
331
+ * key: number;
332
+ * title: string;
333
+ * email?: string;
334
+ * phone?: string;
335
+ * }
336
+ *
337
+ * // در کامپوننت
338
+ * const { control, watch } = useForm();
339
+ * const { data: clients, isLoading } = useGetClients();
340
+ *
341
+ * return (
342
+ * <SingleClientSelector<Client>
343
+ * name="clientId"
344
+ * control={control}
345
+ * label="انتخاب مشتری"
346
+ * data={clients}
347
+ * isLoading={isLoading}
348
+ * />
349
+ * );
350
+ * ```
351
+ */
253
352
  declare function SingleClientSelector<T extends BaseOption = BaseOption>({ name, control, label, data, isLoading, disabled, size, disableClearable, variant, placeholder, renderOption, }: SingleClientSelectorProps<T>): React.JSX.Element;
254
353
 
255
354
  export { MultiCheckSelector, MultipleSelector, SearchableSelector, SingleClientSelector };
@@ -276,7 +276,7 @@ function MultipleSelector({
276
276
  isLoading,
277
277
  disabled = false,
278
278
  size = "medium",
279
- clear = false,
279
+ disableClearable = false,
280
280
  renderOption
281
281
  }) {
282
282
  const dataOptions = data?.map((value) => ({
@@ -310,7 +310,7 @@ function MultipleSelector({
310
310
  import_Autocomplete2.default,
311
311
  {
312
312
  multiple: true,
313
- disableClearable: clear,
313
+ disableClearable,
314
314
  disabled: disabled || isLoading,
315
315
  size,
316
316
  disableCloseOnSelect: true,
@@ -406,7 +406,7 @@ function SearchableSelector({
406
406
  isLoading,
407
407
  disabled = false,
408
408
  size = "medium",
409
- clear = false,
409
+ disableClearable = false,
410
410
  onChangeHandler,
411
411
  valueHandler,
412
412
  onFilterOptions,
@@ -429,7 +429,7 @@ function SearchableSelector({
429
429
  import_Autocomplete3.default,
430
430
  {
431
431
  freeSolo: true,
432
- disableClearable: clear || isLoading,
432
+ disableClearable: disableClearable || isLoading,
433
433
  disabled,
434
434
  disablePortal: true,
435
435
  size,
@@ -572,14 +572,12 @@ function SingleClientSelector({
572
572
  if (!value) return null;
573
573
  return dataOptions.find(
574
574
  (option) => String(option.key) === String(value)
575
- )?.title ? dataOptions.find(
576
- (option) => String(option.key) === String(value)
577
- ) : null;
575
+ )?.title ? dataOptions.find((option) => String(option.key) === String(value)) : null;
578
576
  }, [value, dataOptions]);
579
577
  return /* @__PURE__ */ React5.createElement(
580
578
  import_Autocomplete4.default,
581
579
  {
582
- disableClearable,
580
+ disableClearable: disableClearable || isLoading,
583
581
  disabled: disabled || isLoading,
584
582
  size,
585
583
  options: dataOptions,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/selectors/index.ts","../../react-shim.js","../../src/selectors/multi-check-selector/index.tsx","../../src/selectors/multiple-selector/index.tsx","../../src/selectors/searchable-selector/index.tsx","../../src/selectors/single-client-selector/index.tsx"],"sourcesContent":["export { default as MultiCheckSelector } from \"./multi-check-selector\";\nexport { default as MultipleSelector } from \"./multiple-selector\";\nexport { default as SearchableSelector } from \"./searchable-selector\";\nexport { default as SingleClientSelector } from \"./single-client-selector\";\n","import * as React from \"react\";\nexport { React };\n","import Autocomplete from \"@mui/material/Autocomplete\";\r\nimport TextField, { TextFieldVariants } from \"@mui/material/TextField\";\r\nimport * as React from \"react\";\r\nimport { Control, Controller } from \"react-hook-form\";\r\nimport { Checkbox, CircularProgress, Popper } from \"@mui/material\";\r\nimport { FaCheckSquare } from \"react-icons/fa\";\r\nimport { RiCheckboxBlankLine } from \"react-icons/ri\";\r\nimport { MdSelectAll } from \"react-icons/md\";\r\nimport { RiDeleteBin6Line } from \"react-icons/ri\";\r\ninterface OptionType {\r\n title: string;\r\n key: string | number;\r\n [x: string]: any; // برای پشتیبانی از فیلدهای اضافی\r\n}\r\nexport interface AutocompleteRenderOptionState {\r\n inputValue: string;\r\n index: number;\r\n selected: boolean;\r\n}\r\ninterface MultipleSelectChipProps<T extends OptionType> {\r\n name: string;\r\n control: Control<any>;\r\n label?: string;\r\n data?: T[];\r\n isLoading?: boolean;\r\n disabled?: boolean;\r\n size?: \"small\" | \"medium\";\r\n disableClearable?: boolean;\r\n variant?: TextFieldVariants;\r\n placeholder?: string;\r\n renderOption?: (\r\n props: React.HTMLAttributes<HTMLLIElement>,\r\n option: T,\r\n state: AutocompleteRenderOptionState\r\n ) => React.ReactNode;\r\n}\r\n/**\r\n * 📦 MultipleSelector — کامپوننت انتخاب چندگزینه‌ای پیشرفته\r\n *\r\n * @component MultipleSelector\r\n *\r\n * @template T — نوع داده‌ی گزینه‌ها که باید شامل فیلدهای `title` و `key` باشد.\r\n *\r\n * @param {string} name - نام فیلد در فرم (برای ثبت در react-hook-form).\r\n * @param {Control<any>} control - کنترل فرم از کتابخانه react-hook-form.\r\n * @param {string} [label] - برچسب ورودی.\r\n * @param {T[]} [data] - آرایه‌ای از گزینه‌ها که هر کدام باید شامل `title` (نمایش) و `key` (شناسه یکتا) باشد.\r\n * @param {boolean} [isLoading=false] - حالت لودینگ برای نمایش اسپینر در ورودی.\r\n * @param {boolean} [disabled=false] - غیرفعال‌کردن ورودی.\r\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - سایز ورودی MUI Autocomplete.\r\n * @param {boolean} [clear=false] - اگر `false` باشد، قابلیت پاک کردن کامل (Clearable) غیرفعال می‌شود.\r\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابع سفارشی برای رندر هر آیتم در لیست انتخاب.\r\n *\r\n * @description\r\n * این کامپوننت یک `Autocomplete` چندگزینه‌ای با قابلیت‌های زیر است:\r\n * - اتصال مستقیم به `react-hook-form` (با استفاده از Controller)\r\n * - انتخاب همه (`انتخاب همه`) یا پاک کردن همه (`پاک کردن همه`)\r\n * - نمایش تعداد آیتم‌های انتخاب شده به جای تگ‌های جداگانه\r\n * - پشتیبانی از حالت لودینگ و غیرفعال بودن\r\n * - امکان سفارشی‌سازی رندر آیتم‌ها (`renderOption`)\r\n * - آیکون‌های سفارشی برای انتخاب‌ها و گزینه‌های ویژه\r\n * - جلوگیری از بستن لیست هنگام انتخاب آیتم‌ها (`disableCloseOnSelect`)\r\n * - مدیریت موقعیت Popper با MUI modifiers\r\n *\r\n * @returns {Array<string | number>} آرایه‌ای از کلیدهای آیتم‌های انتخاب شده.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { useForm, Controller } from \"react-hook-form\";\r\n *\r\n * type MyOption = { title: string; key: number };\r\n *\r\n * const options: MyOption[] = [\r\n * { title: \"محصول ۱\", key: 1 },\r\n * { title: \"محصول ۲\", key: 2 },\r\n * ];\r\n *\r\n * export default function MyForm() {\r\n * const { control, handleSubmit } = useForm({ defaultValues: { productIds: [] } });\r\n *\r\n * const onSubmit = (data: any) => {\r\n * console.log(\"انتخاب شده‌ها:\", data.productIds);\r\n * };\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(onSubmit)}>\r\n * <MultipleSelector<MyOption>\r\n * name=\"productIds\"\r\n * label=\"محصولات\"\r\n * control={control}\r\n * data={options}\r\n * isLoading={false}\r\n * size=\"small\"\r\n * renderOption={(props, option, state) => (\r\n * <li {...props} key={option.key}>\r\n * <strong style={{ color: state.selected ? \"green\" : \"black\" }}>\r\n * {option.title}\r\n * </strong>\r\n * </li>\r\n * )}\r\n * />\r\n * <button type=\"submit\">ثبت</button>\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport default function MultiCheckSelector<T extends OptionType>({\r\n name,\r\n control,\r\n label,\r\n data,\r\n isLoading,\r\n disabled = false,\r\n size = \"medium\",\r\n disableClearable = false,\r\n renderOption,\r\n variant,\r\n placeholder,\r\n}: MultipleSelectChipProps<T>) {\r\n const dataOptions =\r\n data?.map((value) => ({\r\n ...value,\r\n key: value.key || `key_${Math.random()}`,\r\n })) || [];\r\n\r\n const combinedOptions =\r\n dataOptions.length > 0\r\n ? [\r\n { title: \"انتخاب همه\", key: \"All\" } as T,\r\n { title: \"پاک کردن همه\", key: \"ClearAll\" } as T,\r\n ...dataOptions,\r\n ]\r\n : [...dataOptions];\r\n\r\n const handleChange = (\r\n _event: any,\r\n selected: any,\r\n onChange: (value: any) => void\r\n ) => {\r\n if (selected.some((item: any) => item.key === \"All\")) {\r\n const allItems = [...dataOptions];\r\n onChange(allItems.map((item) => item.key));\r\n } else if (selected.some((item: any) => item.key === \"ClearAll\")) {\r\n onChange([]);\r\n } else {\r\n onChange(selected.map((item: any) => item.key));\r\n }\r\n };\r\n const icon = <RiCheckboxBlankLine size={20} />;\r\n const checkedIcon = <FaCheckSquare size={20} />;\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\r\n const computedValue = React.useMemo(() => {\r\n if (Array.isArray(value) && dataOptions.length > 0) {\r\n return dataOptions.filter((option: any) =>\r\n value.includes(option.key)\r\n );\r\n }\r\n return [];\r\n }, [value, dataOptions]);\r\n\r\n // کنترل باز و بسته شدن آتوکامپلیت\r\n const autocompleteRef = React.useRef<any>(null);\r\n const [open, setOpen] = React.useState(false);\r\n const handleOpen = () => setOpen(true);\r\n const handleClose = () => setOpen(false);\r\n return (\r\n <Autocomplete\r\n multiple\r\n disableClearable={disableClearable}\r\n disabled={disabled || isLoading}\r\n size={size}\r\n disableCloseOnSelect\r\n options={combinedOptions}\r\n sx={{ width: \"100%\" }}\r\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\r\n value={computedValue}\r\n onChange={(event, value) =>\r\n handleChange(event, value as T[], onChange)\r\n }\r\n isOptionEqualToValue={(option, value) =>\r\n String(option.key) === String(value?.key)\r\n }\r\n getOptionLabel={(option) => option.title}\r\n loading={isLoading}\r\n loadingText=\"در حال بارگذاری...\"\r\n open={open}\r\n onOpen={handleOpen}\r\n onClose={handleClose}\r\n ref={autocompleteRef}\r\n renderOption={(props, option, state) => {\r\n if (renderOption) {\r\n return renderOption(props, option, state);\r\n }\r\n // آیکون مناسب برای گزینه‌های انتخاب همه و پاک کردن همه\r\n let iconElem = null;\r\n if (option.key === \"All\") {\r\n iconElem = (\r\n <MdSelectAll\r\n size={18}\r\n style={{ marginLeft: 6, color: \"#2563eb\" }}\r\n />\r\n );\r\n } else if (option.key === \"ClearAll\") {\r\n iconElem = (\r\n <RiDeleteBin6Line\r\n size={18}\r\n style={{ marginLeft: 6, color: \"#ef4444\" }}\r\n />\r\n );\r\n }\r\n return (\r\n <li\r\n {...props}\r\n key={`${option.key}`}\r\n style={{ margin: 5, borderRadius: 3 }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {option.key === \"All\" || option.key === \"ClearAll\" ? (\r\n iconElem\r\n ) : (\r\n <Checkbox\r\n icon={icon}\r\n checkedIcon={checkedIcon}\r\n style={{ marginLeft: 8 }}\r\n checked={state.selected}\r\n sx={{ margin: 0, padding: 0 }}\r\n />\r\n )}\r\n <div style={{ flexDirection: \"row\", width: \"100%\" }}>\r\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\r\n </div>\r\n </div>\r\n </li>\r\n );\r\n }}\r\n renderTags={(value) => {\r\n if (value.length === 0) return null;\r\n const total = dataOptions.length;\r\n const tagText =\r\n value.length === total\r\n ? `${value.length} مورد انتخاب شده`\r\n : `${value.length} مورد از ${total} انتخاب شده`;\r\n\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n height: \"auto\",\r\n minHeight: size === \"small\" ? \"24px\" : \"32px\",\r\n maxHeight: size === \"small\" ? \"32px\" : \"40px\",\r\n overflow: \"hidden\",\r\n whiteSpace: \"nowrap\",\r\n textOverflow: \"ellipsis\",\r\n width: \"100%\",\r\n maxWidth: \"calc(100% - 50px)\", // جا برای آیکون‌های پایانی\r\n }}\r\n onClick={handleOpen}\r\n >\r\n <span\r\n style={{\r\n fontWeight: 600,\r\n fontSize: size === \"small\" ? 13 : 15,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n display: \"block\",\r\n width: \"100%\",\r\n }}\r\n title={tagText} // نمایش متن کامل در tooltip\r\n >\r\n {tagText}\r\n </span>\r\n </div>\r\n );\r\n }}\r\n slots={{ popper: Popper }}\r\n slotProps={{\r\n popper: {\r\n modifiers: [\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"window\",\r\n rootBoundary: \"viewport\",\r\n altBoundary: true,\r\n padding: 10,\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top\", \"bottom\"],\r\n },\r\n },\r\n ],\r\n },\r\n }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label={label}\r\n error={!!error}\r\n variant={variant}\r\n placeholder={placeholder}\r\n helperText={error?.message}\r\n inputRef={ref}\r\n InputLabelProps={{ shrink: true }}\r\n InputProps={{\r\n ...params.InputProps,\r\n endAdornment: (\r\n <React.Fragment>\r\n {isLoading ? (\r\n <CircularProgress color=\"primary\" size={20} />\r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n </React.Fragment>\r\n ),\r\n }}\r\n />\r\n )}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n// ...existing code...\r\n","import Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\nimport { CircularProgress, Popper } from \"@mui/material\";\n\ninterface OptionType {\n title: string;\n key: string | number;\n [x: string]: any; // برای پشتیبانی از فیلدهای اضافی\n}\n\ninterface MultipleSelectChipProps<T extends OptionType> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n clear?: boolean;\n\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T\n ) => React.ReactNode;\n}\n/**\n * 📦 کامپوننت انتخاب چند گزینه‌ای با پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component MultipleSelector\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {Control<any>} control - کنترل فرم از react-hook-form.\n * @param {{ title: string; key: string | number }[]} [data] - لیستی از گزینه‌ها شامل `title` (متن) و `key` (مقدار).\n * @param {boolean} [isLoading=false] - آیا داده‌ها در حال بارگذاری هستند.\n * @param {boolean} [disabled=false] - غیرفعال‌سازی ورودی.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - سایز ورودی.\n * @param {boolean} [clear=false] - آیا امکان پاک کردن وجود دارد یا نه.\n * @param {string} [tooltip] - متن راهنما هنگام هاور.\n * @param {(props, option) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {Array<{ key: string | number }>} لیستی از آیتم‌های انتخاب‌شده ( فقط آیدی‌ها).\n *\n * @example\n * ```tsx\n * <MultipleSelector<{title:string; key:number;}>\n * name=\"productIds\"\n * label=\"محصولات\"\n * control={control}\n * data={[{ title: \"محصول ۱\", key: 1 }, { title: \"محصول ۲\", key: 2 }]}\n * />\n * ```\n *\n * @description\n * کامپوننتی چندانتخابی با قابلیت انتخاب همه‌ی موارد، سفارشی‌سازی گزینه‌ها،\n * نمایش راهنمای هاور، و بازگرداندن لیست کامل از آبجکت‌های انتخاب‌شده.\n *\n * برای سفارشی‌سازی نحوه نمایش آیتم‌ها:\n * ```tsx\n * renderOption={(props, option) => (\n * <li {...props} key={`${option.key}`}>\n * <span style={{ color: \"green\" }}>{option.title}</span>\n * </li>\n * )}\n * ```\n */\n\nexport default function MultipleSelector<T extends OptionType>({\n name,\n control,\n label,\n data,\n isLoading,\n disabled = false,\n size = \"medium\",\n clear = false,\n renderOption,\n}: MultipleSelectChipProps<T>) {\n const dataOptions =\n data?.map((value) => ({\n ...value,\n key: value.key || `key_${Math.random()}`,\n })) || [];\n\n const combinedOptions =\n dataOptions.length > 0\n ? [{ title: \"انتخاب همه\", key: \"All\" } as T, ...dataOptions]\n : [...dataOptions];\n\n const handleChange = (\n _event: any,\n selected: any,\n onChange: (value: any) => void\n ) => {\n if (selected.some((item: any) => item.key === \"All\")) {\n const allItems = [...dataOptions];\n onChange(allItems.map((item) => item.key));\n } else {\n onChange(selected.map((item: any) => item.key));\n }\n };\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const computedValue = React.useMemo(() => {\n if (Array.isArray(value) && dataOptions.length > 0) {\n return dataOptions.filter((option: any) =>\n value.includes(option.key)\n );\n }\n return [];\n }, [value, dataOptions]);\n\n return (\n <Autocomplete\n multiple\n disableClearable={clear}\n disabled={disabled || isLoading}\n size={size}\n disableCloseOnSelect\n options={combinedOptions}\n sx={{ width: \"100%\" }}\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\n value={computedValue}\n onChange={(event, value) =>\n handleChange(event, value as T[], onChange)\n }\n isOptionEqualToValue={(option, value) =>\n String(option.key) === String(value?.key)\n }\n getOptionLabel={(option) => option.title}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option) => {\n if (renderOption) {\n return renderOption(props, option);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }}\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"],\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n","import { CircularProgress, Popper } from \"@mui/material\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\n\ninterface BaseOption {\n key: number | string | \"false\" | true;\n title: string | number;\n [x: string]: any;\n}\n\ninterface SeacrchableSelectChipProps<T extends BaseOption = BaseOption> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n inputValue:string;\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n clear?: boolean;\n onChangeHandler?: (value: any, onChange: (data: any) => void) => void;\n valueHandler?: (value: any) => any;\n onFilterOptions: (inputValue: string) => void;\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T\n ) => React.ReactNode;\n}\n/**\n * 🔍 کامپوننت انتخاب تکی با قابلیت جست‌وجو، پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component SeacrchableSelector\n *\n * @template T - نوع گزینه‌ها که باید شامل `key` و `title` باشد.\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {Control<any>} control - کنترل فرم از `react-hook-form`.\n * @param {T[]} [data] - لیستی از گزینه‌ها شامل `key` و `title` به عنوان مقدار و متن نمایشی.\n * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).\n * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - اندازه ورودی.\n * @param {boolean} [clear=false] - فعال بودن امکان پاک‌کردن مقدار انتخاب‌شده.\n * @param {(value: any, onChange: (data: any) => void) => void} [onChangeHandler] - تابع هندل انتخاب گزینه (در صورت نیاز به کنترل خارجی).\n * @param {(value: any) => string} [valueHandler] - تابع تبدیل مقدار ذخیره‌شده در فرم به مقدار نمایشی در input (مثلاً عنوان).\n * @param {string} [inputValue] - مقدار ورودی کنونی (برای کنترل ورودی).\n * @param {(inputValue: string) => void} [onFilterOptions] - تابعی برای هندل کردن فیلتر شدن داده‌ها هنگام تایپ کاربر (مثلاً برای fetch کردن).\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {string | number | null} مقدار انتخاب‌شده (کلید گزینه یا null)\n *\n * @example\n * ```tsx\n * <SeacrchableSelector<{ title: string; key: number }>\n * name=\"categoryId\"\n * label=\"دسته‌بندی\"\n * control={control}\n * data={[{ title: \"کتاب\", key: 1 }, { title: \"لوازم تحریر\", key: 2 }]}\n * inputValue={inputValue}\n * onFilterOptions={(input) => fetchUsers(input)}\n * />\n * ```\n *\n * @description\n * این کامپوننت یک ورودی انتخاب‌گر تکی با قابلیت جست‌وجو و پشتیبانی از مقدار دلخواه کاربر (`freeSolo`) است.\n * قابلیت‌هایی مانند بارگذاری داده، سفارشی‌سازی نمایش گزینه‌ها، هماهنگ‌سازی با فرم، پاک‌سازی انتخاب، و پشتیبانی از جست‌وجوی سمت سرور را نیز داراست.\n *\n * اگر `freeSolo` فعال باشد، می‌توان مقادیر تایپ‌شده را نیز ذخیره کرد. مقدار خروجی معمولاً `key` گزینه انتخاب‌شده است،\n * مگر اینکه کاربر متنی وارد کند که در لیست نباشد (در این صورت می‌توان آن را مستقیم ذخیره کرد).\n *\n * برای سفارشی‌سازی گزینه‌ها:\n * ```tsx\n * renderOption={(props, option) => (\n * <li {...props} key={option.key}>\n * <b>{option.title}</b>\n * </li>\n * )}\n * ```\n */\n\nexport default function SearchableSelector<T extends BaseOption = BaseOption>({\n name,\n control,\n label,\n data,\n inputValue,\n isLoading,\n disabled = false,\n size = \"medium\",\n clear = false,\n onChangeHandler,\n valueHandler,\n onFilterOptions,\n renderOption,\n \n}: SeacrchableSelectChipProps<T>) {\n const dataOptions =\n data?.map((value: T) => ({\n ...value,\n })) || [];\n\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const selectedValues = React.useMemo(\n () => dataOptions.find((v) => v?.key == value) ?? null,\n [value, dataOptions]\n );\n\n return (\n <Autocomplete\n freeSolo={true}\n disableClearable={clear || isLoading}\n disabled={disabled}\n disablePortal\n size={size}\n disableCloseOnSelect={false}\n options={dataOptions}\n inputValue={valueHandler ? valueHandler(value) : inputValue}\n onInputChange={(_, newInput, reason) => {\n reason == \"input\" && onChange(null);\n // وقتی کاربر داره تایپ می‌کنه یا پاک می‌کنه\n onFilterOptions(newInput);\n }}\n sx={{\n width: \"100%\",\n }}\n noOptionsText=\"داده ای برای نمایش وجود ندارد\"\n value={selectedValues}\n onChange={(e, value) => {\n // ۱) اگر کاربر یک رشته تایپ‌شده (freeSolo) انتخاب کرده\n if (typeof value === \"string\") {\n // می‌تونیم key رو هم با خود رشته‌ی ورودی برابر بگیریم،\n // یا اگر نمی‌خواید freeSolo ذخیره کنید، اینجا onChange(null) بزنید\n onChange(value as any); // یا onChange(null) بسته به نیاز\n onFilterOptions(value);\n }\n // ۲) اگر گزینه‌ی منظم انتخاب شده\n else if (value && typeof value === \"object\") {\n onChangeHandler\n ? onChangeHandler(value, onChange)\n : onChange(value.key);\n onFilterOptions(String(value.title));\n }\n // ۳) حالت پاک کردن\n else {\n onChange(null);\n onFilterOptions(\"\");\n }\n }}\n getOptionLabel={(option) => {\n if (typeof option === \"string\") return option;\n if (option?.title) return String(option.title);\n return \"\";\n }}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option) => {\n if (renderOption) {\n return renderOption(props, option);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }} // New API\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"], // Ensures it flips to the top if needed\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n","import { CircularProgress, Popper } from \"@mui/material\";\nimport Autocomplete, {\n AutocompleteRenderOptionState,\n} from \"@mui/material/Autocomplete\";\nimport TextField, { TextFieldVariants } from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\n\ninterface BaseOption {\n key: number | string | \"false\" | true;\n title: string | number;\n [x: string]: any;\n}\n\ninterface SingleClientSelectorProps<T extends BaseOption = BaseOption> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n multipleitems?: boolean; // این prop استفاده نمی‌شود - قابل حذف\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n disableClearable?: boolean;\n variant?: TextFieldVariants;\n placeholder?: string;\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T,\n state: AutocompleteRenderOptionState\n ) => React.ReactNode;\n}\n\nexport default function SingleClientSelector<\n T extends BaseOption = BaseOption\n>({\n name,\n control,\n label,\n data,\n isLoading,\n disabled = false,\n size = \"medium\",\n disableClearable = false,\n variant = \"outlined\",\n placeholder,\n renderOption,\n}: SingleClientSelectorProps<T>) {\n const dataOptions = React.useMemo(\n () =>\n data?.map((value) => ({\n ...value,\n key: value.key || `key_${Math.random()}`,\n })) || [],\n [data]\n );\n\n const handleChange = (\n _event: React.SyntheticEvent,\n selected: T | null,\n onChange: (value: any) => void\n ) => {\n // اصلاح: بررسی null و undefined\n onChange(selected?.key ?? null);\n };\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const computedValue = React.useMemo(() => {\n if (!value) return null;\n\n // اصلاح: برای single selector از === استفاده می‌کنیم\n return dataOptions.find(\n (option) => String(option.key) === String(value)\n )?.title\n ? dataOptions.find(\n (option) => String(option.key) === String(value)\n )\n : null;\n }, [value, dataOptions]);\n\n return (\n <Autocomplete\n disableClearable={disableClearable}\n disabled={disabled || isLoading}\n size={size}\n options={dataOptions}\n sx={{ width: \"100%\" }}\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\n value={computedValue}\n onChange={(event, newValue) =>\n handleChange(event, newValue, onChange)\n }\n isOptionEqualToValue={(option, value) =>\n String(option.key) === String(value?.key)\n }\n getOptionLabel={(option) => {\n if (typeof option === \"string\") return option;\n if (option?.title) return String(option.title);\n return \"\";\n }}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option, state) => {\n if (renderOption) {\n return renderOption(props, option, state);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }}\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"],\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n variant={variant}\n placeholder={placeholder}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n"],"mappings":"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","names":["React","import_ri","Autocomplete","value","TextField","import_Autocomplete","import_TextField","React","import_react_hook_form","import_material","Autocomplete","value","TextField","import_material","import_Autocomplete","import_TextField","React","import_react_hook_form","Autocomplete","value","TextField","import_material","import_Autocomplete","import_TextField","React","import_react_hook_form","Autocomplete","value","TextField"]}
1
+ {"version":3,"sources":["../../src/selectors/index.ts","../../react-shim.js","../../src/selectors/multi-check-selector/index.tsx","../../src/selectors/multiple-selector/index.tsx","../../src/selectors/searchable-selector/index.tsx","../../src/selectors/single-client-selector/index.tsx"],"sourcesContent":["export { default as MultiCheckSelector } from \"./multi-check-selector\";\nexport { default as MultipleSelector } from \"./multiple-selector\";\nexport { default as SearchableSelector } from \"./searchable-selector\";\nexport { default as SingleClientSelector } from \"./single-client-selector\";\n","import * as React from \"react\";\nexport { React };\n","import Autocomplete from \"@mui/material/Autocomplete\";\r\nimport TextField, { TextFieldVariants } from \"@mui/material/TextField\";\r\nimport * as React from \"react\";\r\nimport { Control, Controller } from \"react-hook-form\";\r\nimport { Checkbox, CircularProgress, Popper } from \"@mui/material\";\r\nimport { FaCheckSquare } from \"react-icons/fa\";\r\nimport { RiCheckboxBlankLine } from \"react-icons/ri\";\r\nimport { MdSelectAll } from \"react-icons/md\";\r\nimport { RiDeleteBin6Line } from \"react-icons/ri\";\r\ninterface OptionType {\r\n title: string;\r\n key: string | number;\r\n [x: string]: any; // برای پشتیبانی از فیلدهای اضافی\r\n}\r\nexport interface AutocompleteRenderOptionState {\r\n inputValue: string;\r\n index: number;\r\n selected: boolean;\r\n}\r\ninterface MultipleSelectChipProps<T extends OptionType> {\r\n name: string;\r\n control: Control<any>;\r\n label?: string;\r\n data?: T[];\r\n isLoading?: boolean;\r\n disabled?: boolean;\r\n size?: \"small\" | \"medium\";\r\n disableClearable?: boolean;\r\n variant?: TextFieldVariants;\r\n placeholder?: string;\r\n renderOption?: (\r\n props: React.HTMLAttributes<HTMLLIElement>,\r\n option: T,\r\n state: AutocompleteRenderOptionState\r\n ) => React.ReactNode;\r\n}\r\n/**\r\n * 📦 MultipleSelector — کامپوننت انتخاب چندگزینه‌ای پیشرفته\r\n *\r\n * @component MultipleSelector\r\n *\r\n * @template T — نوع داده‌ی گزینه‌ها که باید شامل فیلدهای `title` و `key` باشد.\r\n *\r\n * @param {string} name - نام فیلد در فرم (برای ثبت در react-hook-form).\r\n * @param {Control<any>} control - کنترل فرم از کتابخانه react-hook-form.\r\n * @param {string} [label] - برچسب ورودی.\r\n * @param {T[]} [data] - آرایه‌ای از گزینه‌ها که هر کدام باید شامل `title` (نمایش) و `key` (شناسه یکتا) باشد.\r\n * @param {boolean} [isLoading=false] - حالت لودینگ برای نمایش اسپینر در ورودی.\r\n * @param {boolean} [disabled=false] - غیرفعال‌کردن ورودی.\r\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - سایز ورودی MUI Autocomplete.\r\n * @param {boolean} [clear=false] - اگر `false` باشد، قابلیت پاک کردن کامل (Clearable) غیرفعال می‌شود.\r\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابع سفارشی برای رندر هر آیتم در لیست انتخاب.\r\n *\r\n * @description\r\n * این کامپوننت یک `Autocomplete` چندگزینه‌ای با قابلیت‌های زیر است:\r\n * - اتصال مستقیم به `react-hook-form` (با استفاده از Controller)\r\n * - انتخاب همه (`انتخاب همه`) یا پاک کردن همه (`پاک کردن همه`)\r\n * - نمایش تعداد آیتم‌های انتخاب شده به جای تگ‌های جداگانه\r\n * - پشتیبانی از حالت لودینگ و غیرفعال بودن\r\n * - امکان سفارشی‌سازی رندر آیتم‌ها (`renderOption`)\r\n * - آیکون‌های سفارشی برای انتخاب‌ها و گزینه‌های ویژه\r\n * - جلوگیری از بستن لیست هنگام انتخاب آیتم‌ها (`disableCloseOnSelect`)\r\n * - مدیریت موقعیت Popper با MUI modifiers\r\n *\r\n * @returns {Array<string | number>} آرایه‌ای از کلیدهای آیتم‌های انتخاب شده.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { useForm, Controller } from \"react-hook-form\";\r\n *\r\n * type MyOption = { title: string; key: number };\r\n *\r\n * const options: MyOption[] = [\r\n * { title: \"محصول ۱\", key: 1 },\r\n * { title: \"محصول ۲\", key: 2 },\r\n * ];\r\n *\r\n * export default function MyForm() {\r\n * const { control, handleSubmit } = useForm({ defaultValues: { productIds: [] } });\r\n *\r\n * const onSubmit = (data: any) => {\r\n * console.log(\"انتخاب شده‌ها:\", data.productIds);\r\n * };\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(onSubmit)}>\r\n * <MultipleSelector<MyOption>\r\n * name=\"productIds\"\r\n * label=\"محصولات\"\r\n * control={control}\r\n * data={options}\r\n * isLoading={false}\r\n * size=\"small\"\r\n * renderOption={(props, option, state) => (\r\n * <li {...props} key={option.key}>\r\n * <strong style={{ color: state.selected ? \"green\" : \"black\" }}>\r\n * {option.title}\r\n * </strong>\r\n * </li>\r\n * )}\r\n * />\r\n * <button type=\"submit\">ثبت</button>\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport default function MultiCheckSelector<T extends OptionType>({\r\n name,\r\n control,\r\n label,\r\n data,\r\n isLoading,\r\n disabled = false,\r\n size = \"medium\",\r\n disableClearable = false,\r\n renderOption,\r\n variant,\r\n placeholder,\r\n}: MultipleSelectChipProps<T>) {\r\n const dataOptions =\r\n data?.map((value) => ({\r\n ...value,\r\n key: value.key || `key_${Math.random()}`,\r\n })) || [];\r\n\r\n const combinedOptions =\r\n dataOptions.length > 0\r\n ? [\r\n { title: \"انتخاب همه\", key: \"All\" } as T,\r\n { title: \"پاک کردن همه\", key: \"ClearAll\" } as T,\r\n ...dataOptions,\r\n ]\r\n : [...dataOptions];\r\n\r\n const handleChange = (\r\n _event: any,\r\n selected: any,\r\n onChange: (value: any) => void\r\n ) => {\r\n if (selected.some((item: any) => item.key === \"All\")) {\r\n const allItems = [...dataOptions];\r\n onChange(allItems.map((item) => item.key));\r\n } else if (selected.some((item: any) => item.key === \"ClearAll\")) {\r\n onChange([]);\r\n } else {\r\n onChange(selected.map((item: any) => item.key));\r\n }\r\n };\r\n const icon = <RiCheckboxBlankLine size={20} />;\r\n const checkedIcon = <FaCheckSquare size={20} />;\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\r\n const computedValue = React.useMemo(() => {\r\n if (Array.isArray(value) && dataOptions.length > 0) {\r\n return dataOptions.filter((option: any) =>\r\n value.includes(option.key)\r\n );\r\n }\r\n return [];\r\n }, [value, dataOptions]);\r\n\r\n // کنترل باز و بسته شدن آتوکامپلیت\r\n const autocompleteRef = React.useRef<any>(null);\r\n const [open, setOpen] = React.useState(false);\r\n const handleOpen = () => setOpen(true);\r\n const handleClose = () => setOpen(false);\r\n return (\r\n <Autocomplete\r\n multiple\r\n disableClearable={disableClearable}\r\n disabled={disabled || isLoading}\r\n size={size}\r\n disableCloseOnSelect\r\n options={combinedOptions}\r\n sx={{ width: \"100%\" }}\r\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\r\n value={computedValue}\r\n onChange={(event, value) =>\r\n handleChange(event, value as T[], onChange)\r\n }\r\n isOptionEqualToValue={(option, value) =>\r\n String(option.key) === String(value?.key)\r\n }\r\n getOptionLabel={(option) => option.title}\r\n loading={isLoading}\r\n loadingText=\"در حال بارگذاری...\"\r\n open={open}\r\n onOpen={handleOpen}\r\n onClose={handleClose}\r\n ref={autocompleteRef}\r\n renderOption={(props, option, state) => {\r\n if (renderOption) {\r\n return renderOption(props, option, state);\r\n }\r\n // آیکون مناسب برای گزینه‌های انتخاب همه و پاک کردن همه\r\n let iconElem = null;\r\n if (option.key === \"All\") {\r\n iconElem = (\r\n <MdSelectAll\r\n size={18}\r\n style={{ marginLeft: 6, color: \"#2563eb\" }}\r\n />\r\n );\r\n } else if (option.key === \"ClearAll\") {\r\n iconElem = (\r\n <RiDeleteBin6Line\r\n size={18}\r\n style={{ marginLeft: 6, color: \"#ef4444\" }}\r\n />\r\n );\r\n }\r\n return (\r\n <li\r\n {...props}\r\n key={`${option.key}`}\r\n style={{ margin: 5, borderRadius: 3 }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {option.key === \"All\" || option.key === \"ClearAll\" ? (\r\n iconElem\r\n ) : (\r\n <Checkbox\r\n icon={icon}\r\n checkedIcon={checkedIcon}\r\n style={{ marginLeft: 8 }}\r\n checked={state.selected}\r\n sx={{ margin: 0, padding: 0 }}\r\n />\r\n )}\r\n <div style={{ flexDirection: \"row\", width: \"100%\" }}>\r\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\r\n </div>\r\n </div>\r\n </li>\r\n );\r\n }}\r\n renderTags={(value) => {\r\n if (value.length === 0) return null;\r\n const total = dataOptions.length;\r\n const tagText =\r\n value.length === total\r\n ? `${value.length} مورد انتخاب شده`\r\n : `${value.length} مورد از ${total} انتخاب شده`;\r\n\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n height: \"auto\",\r\n minHeight: size === \"small\" ? \"24px\" : \"32px\",\r\n maxHeight: size === \"small\" ? \"32px\" : \"40px\",\r\n overflow: \"hidden\",\r\n whiteSpace: \"nowrap\",\r\n textOverflow: \"ellipsis\",\r\n width: \"100%\",\r\n maxWidth: \"calc(100% - 50px)\", // جا برای آیکون‌های پایانی\r\n }}\r\n onClick={handleOpen}\r\n >\r\n <span\r\n style={{\r\n fontWeight: 600,\r\n fontSize: size === \"small\" ? 13 : 15,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n display: \"block\",\r\n width: \"100%\",\r\n }}\r\n title={tagText} // نمایش متن کامل در tooltip\r\n >\r\n {tagText}\r\n </span>\r\n </div>\r\n );\r\n }}\r\n slots={{ popper: Popper }}\r\n slotProps={{\r\n popper: {\r\n modifiers: [\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"window\",\r\n rootBoundary: \"viewport\",\r\n altBoundary: true,\r\n padding: 10,\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top\", \"bottom\"],\r\n },\r\n },\r\n ],\r\n },\r\n }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label={label}\r\n error={!!error}\r\n variant={variant}\r\n placeholder={placeholder}\r\n helperText={error?.message}\r\n inputRef={ref}\r\n InputLabelProps={{ shrink: true }}\r\n InputProps={{\r\n ...params.InputProps,\r\n endAdornment: (\r\n <React.Fragment>\r\n {isLoading ? (\r\n <CircularProgress color=\"primary\" size={20} />\r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n </React.Fragment>\r\n ),\r\n }}\r\n />\r\n )}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n// ...existing code...\r\n","import Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\nimport { CircularProgress, Popper } from \"@mui/material\";\n\ninterface OptionType {\n title: string;\n key: string | number;\n [x: string]: any; // برای پشتیبانی از فیلدهای اضافی\n}\n\ninterface MultipleSelectChipProps<T extends OptionType> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n disableClearable?: boolean;\n\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T\n ) => React.ReactNode;\n}\n/**\n * 📦 کامپوننت انتخاب چند گزینه‌ای با پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component MultipleSelector\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {Control<any>} control - کنترل فرم از react-hook-form.\n * @param {{ title: string; key: string | number }[]} [data] - لیستی از گزینه‌ها شامل `title` (متن) و `key` (مقدار).\n * @param {boolean} [isLoading=false] - آیا داده‌ها در حال بارگذاری هستند.\n * @param {boolean} [disabled=false] - غیرفعال‌سازی ورودی.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - سایز ورودی.\n * @param {boolean} [disableClearable=false] - آیا امکان پاک کردن وجود دارد یا نه.\n * @param {string} [tooltip] - متن راهنما هنگام هاور.\n * @param {(props, option) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {Array<{ key: string | number }>} لیستی از آیتم‌های انتخاب‌شده ( فقط آیدی‌ها).\n *\n * @example\n * ```tsx\n * <MultipleSelector<{title:string; key:number;}>\n * name=\"productIds\"\n * label=\"محصولات\"\n * control={control}\n * data={[{ title: \"محصول ۱\", key: 1 }, { title: \"محصول ۲\", key: 2 }]}\n * />\n * ```\n *\n * @description\n * کامپوننتی چندانتخابی با قابلیت انتخاب همه‌ی موارد، سفارشی‌سازی گزینه‌ها،\n * نمایش راهنمای هاور، و بازگرداندن لیست کامل از آبجکت‌های انتخاب‌شده.\n *\n * برای سفارشی‌سازی نحوه نمایش آیتم‌ها:\n * ```tsx\n * renderOption={(props, option) => (\n * <li {...props} key={`${option.key}`}>\n * <span style={{ color: \"green\" }}>{option.title}</span>\n * </li>\n * )}\n * ```\n */\n\nexport default function MultipleSelector<T extends OptionType>({\n name,\n control,\n label,\n data,\n isLoading,\n disabled = false,\n size = \"medium\",\n disableClearable = false,\n renderOption,\n}: MultipleSelectChipProps<T>) {\n const dataOptions =\n data?.map((value) => ({\n ...value,\n key: value.key || `key_${Math.random()}`,\n })) || [];\n\n const combinedOptions =\n dataOptions.length > 0\n ? [{ title: \"انتخاب همه\", key: \"All\" } as T, ...dataOptions]\n : [...dataOptions];\n\n const handleChange = (\n _event: any,\n selected: any,\n onChange: (value: any) => void\n ) => {\n if (selected.some((item: any) => item.key === \"All\")) {\n const allItems = [...dataOptions];\n onChange(allItems.map((item) => item.key));\n } else {\n onChange(selected.map((item: any) => item.key));\n }\n };\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const computedValue = React.useMemo(() => {\n if (Array.isArray(value) && dataOptions.length > 0) {\n return dataOptions.filter((option: any) =>\n value.includes(option.key)\n );\n }\n return [];\n }, [value, dataOptions]);\n\n return (\n <Autocomplete\n multiple\n disableClearable={disableClearable}\n disabled={disabled || isLoading}\n size={size}\n disableCloseOnSelect\n options={combinedOptions}\n sx={{ width: \"100%\" }}\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\n value={computedValue}\n onChange={(event, value) =>\n handleChange(event, value as T[], onChange)\n }\n isOptionEqualToValue={(option, value) =>\n String(option.key) === String(value?.key)\n }\n getOptionLabel={(option) => option.title}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option) => {\n if (renderOption) {\n return renderOption(props, option);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }}\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"],\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n","import { CircularProgress, Popper } from \"@mui/material\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\n\ninterface BaseOption {\n key: number | string | \"false\" | true;\n title: string | number;\n [x: string]: any;\n}\n\ninterface SeacrchableSelectChipProps<T extends BaseOption = BaseOption> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n inputValue:string;\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n disableClearable?: boolean;\n onChangeHandler?: (value: any, onChange: (data: any) => void) => void;\n valueHandler?: (value: any) => any;\n onFilterOptions: (inputValue: string) => void;\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T\n ) => React.ReactNode;\n}\n/**\n * 🔍 کامپوننت انتخاب تکی با قابلیت جست‌وجو، پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component SeacrchableSelector\n *\n * @template T - نوع گزینه‌ها که باید شامل `key` و `title` باشد.\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {Control<any>} control - کنترل فرم از `react-hook-form`.\n * @param {T[]} [data] - لیستی از گزینه‌ها شامل `key` و `title` به عنوان مقدار و متن نمایشی.\n * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).\n * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - اندازه ورودی.\n * @param {boolean} [disableClearable=false] - فعال بودن امکان پاک‌کردن مقدار انتخاب‌شده.\n * @param {(value: any, onChange: (data: any) => void) => void} [onChangeHandler] - تابع هندل انتخاب گزینه (در صورت نیاز به کنترل خارجی).\n * @param {(value: any) => string} [valueHandler] - تابع تبدیل مقدار ذخیره‌شده در فرم به مقدار نمایشی در input (مثلاً عنوان).\n * @param {string} [inputValue] - مقدار ورودی کنونی (برای کنترل ورودی).\n * @param {(inputValue: string) => void} [onFilterOptions] - تابعی برای هندل کردن فیلتر شدن داده‌ها هنگام تایپ کاربر (مثلاً برای fetch کردن).\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {string | number | null} مقدار انتخاب‌شده (کلید گزینه یا null)\n *\n * @example\n * ```tsx\n * <SeacrchableSelector<{ title: string; key: number }>\n * name=\"categoryId\"\n * label=\"دسته‌بندی\"\n * control={control}\n * data={[{ title: \"کتاب\", key: 1 }, { title: \"لوازم تحریر\", key: 2 }]}\n * inputValue={inputValue}\n * onFilterOptions={(input) => fetchUsers(input)}\n * />\n * ```\n *\n * @description\n * این کامپوننت یک ورودی انتخاب‌گر تکی با قابلیت جست‌وجو و پشتیبانی از مقدار دلخواه کاربر (`freeSolo`) است.\n * قابلیت‌هایی مانند بارگذاری داده، سفارشی‌سازی نمایش گزینه‌ها، هماهنگ‌سازی با فرم، پاک‌سازی انتخاب، و پشتیبانی از جست‌وجوی سمت سرور را نیز داراست.\n *\n * اگر `freeSolo` فعال باشد، می‌توان مقادیر تایپ‌شده را نیز ذخیره کرد. مقدار خروجی معمولاً `key` گزینه انتخاب‌شده است،\n * مگر اینکه کاربر متنی وارد کند که در لیست نباشد (در این صورت می‌توان آن را مستقیم ذخیره کرد).\n *\n * برای سفارشی‌سازی گزینه‌ها:\n * ```tsx\n * renderOption={(props, option) => (\n * <li {...props} key={option.key}>\n * <b>{option.title}</b>\n * </li>\n * )}\n * ```\n */\n\nexport default function SearchableSelector<T extends BaseOption = BaseOption>({\n name,\n control,\n label,\n data,\n inputValue,\n isLoading,\n disabled = false,\n size = \"medium\",\n disableClearable = false,\n onChangeHandler,\n valueHandler,\n onFilterOptions,\n renderOption,\n \n}: SeacrchableSelectChipProps<T>) {\n const dataOptions =\n data?.map((value: T) => ({\n ...value,\n })) || [];\n\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const selectedValues = React.useMemo(\n () => dataOptions.find((v) => v?.key == value) ?? null,\n [value, dataOptions]\n );\n\n return (\n <Autocomplete\n freeSolo={true}\n disableClearable={disableClearable || isLoading}\n disabled={disabled}\n disablePortal\n size={size}\n disableCloseOnSelect={false}\n options={dataOptions}\n inputValue={valueHandler ? valueHandler(value) : inputValue}\n onInputChange={(_, newInput, reason) => {\n reason == \"input\" && onChange(null);\n // وقتی کاربر داره تایپ می‌کنه یا پاک می‌کنه\n onFilterOptions(newInput);\n }}\n sx={{\n width: \"100%\",\n }}\n noOptionsText=\"داده ای برای نمایش وجود ندارد\"\n value={selectedValues}\n onChange={(e, value) => {\n // ۱) اگر کاربر یک رشته تایپ‌شده (freeSolo) انتخاب کرده\n if (typeof value === \"string\") {\n // می‌تونیم key رو هم با خود رشته‌ی ورودی برابر بگیریم،\n // یا اگر نمی‌خواید freeSolo ذخیره کنید، اینجا onChange(null) بزنید\n onChange(value as any); // یا onChange(null) بسته به نیاز\n onFilterOptions(value);\n }\n // ۲) اگر گزینه‌ی منظم انتخاب شده\n else if (value && typeof value === \"object\") {\n onChangeHandler\n ? onChangeHandler(value, onChange)\n : onChange(value.key);\n onFilterOptions(String(value.title));\n }\n // ۳) حالت پاک کردن\n else {\n onChange(null);\n onFilterOptions(\"\");\n }\n }}\n getOptionLabel={(option) => {\n if (typeof option === \"string\") return option;\n if (option?.title) return String(option.title);\n return \"\";\n }}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option) => {\n if (renderOption) {\n return renderOption(props, option);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }} // New API\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"], // Ensures it flips to the top if needed\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n","import { CircularProgress, Popper } from \"@mui/material\";\nimport Autocomplete, {\n AutocompleteRenderOptionState,\n} from \"@mui/material/Autocomplete\";\nimport TextField, { TextFieldVariants } from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\n\ninterface BaseOption {\n key: number | string | \"false\" | true;\n title: string | number;\n [x: string]: any;\n}\n\ninterface SingleClientSelectorProps<T extends BaseOption = BaseOption> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n disableClearable?: boolean;\n variant?: TextFieldVariants;\n placeholder?: string;\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T,\n state: AutocompleteRenderOptionState\n ) => React.ReactNode;\n}\n\n/**\n * 🔍 کامپوننت انتخاب تکی کلاینت با قابلیت جست‌وجو، پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component SingleClientSelector\n *\n * @template T - نوع گزینه‌ها که باید شامل `key` و `title` باشد و از BaseOption ارث‌بری کند.\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {Control<any>} control - کنترل فرم از `react-hook-form`.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {T[]} [data] - لیستی از گزینه‌ها شامل `key` و `title` به عنوان مقدار و متن نمایشی.\n * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).\n * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - اندازه ورودی.\n * @param {boolean} [disableClearable=false] - غیرفعال کردن امکان پاک‌کردن مقدار انتخاب‌شده.\n * @param {TextFieldVariants} [variant=\"outlined\"] - نوع نمایش TextField (outlined، filled، standard).\n * @param {string} [placeholder] - متن راهنما برای ورودی.\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {string | number | boolean | null} مقدار انتخاب‌شده (کلید گزینه یا null)\n *\n * @example\n * ```tsx\n * // استفاده ساده\n * <SingleClientSelector<{ title: string; key: number }>\n * name=\"clientId\"\n * label=\"انتخاب مشتری\"\n * control={control}\n * data={[\n * { title: \"شرکت الف\", key: 1 },\n * { title: \"شرکت ب\", key: 2 }\n * ]}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // استفاده پیشرفته با رندرینگ سفارشی\n * <SingleClientSelector<Client>\n * name=\"selectedClient\"\n * label=\"انتخاب مشتری\"\n * control={control}\n * data={clients}\n * isLoading={isLoadingClients}\n * placeholder=\"جستجو و انتخاب مشتری...\"\n * renderOption={(props, option) => (\n * <li {...props} key={option.key}>\n * <div style={{ display: 'flex', flexDirection: 'column' }}>\n * <strong>{option.title}</strong>\n * <small>{option.email}</small>\n * </div>\n * </li>\n * )}\n * />\n * ```\n *\n * @description\n * این کامپوننت یک انتخاب‌گر تکی اختصاصی برای کلاینت‌ها با قابلیت‌های زیر است:\n *\n * ✅ **یکپارچگی با فرم**: پشتیبانی کامل از `react-hook-form` با validation\n * 🔍 **جست‌وجو**: امکان جست‌وجو در لیست گزینه‌ها\n * ⚡ **بارگذاری**: نمایش وضعیت loading هنگام fetch داده‌ها\n * 🎨 **سفارشی‌سازی**: امکان سفارشی‌سازی کامل نمایش آیتم‌ها\n * 🧹 **پاک‌سازی**: قابلیت پاک کردن انتخاب (قابل غیرفعال‌سازی)\n * 📱 **ریسپانسیو**: طراحی مناسب برای همه اندازه صفحه‌ها\n * 🌐 **RTL**: پشتیبانی کامل از راست به چپ\n * 🎯 **بهینه**: بهینه‌سازی شده برای عملکرد بالا با `useMemo`\n *\n * **نکات مهم:**\n * - مقدار خروجی همیشه `key` گزینه انتخاب‌شده است\n * - در صورت عدم انتخاب، مقدار `null` برگردانده می‌شود\n * - هر گزینه باید دارای `key` و `title` یکتا باشد\n * - کامپوننت خطاهای validation فرم را نمایش می‌دهد\n * - از Popper برای بهبود عملکرد dropdown استفاده می‌کند\n *\n * **الگوی استفاده معمول:**\n * ```tsx\n * // تعریف نوع داده\n * interface Client {\n * key: number;\n * title: string;\n * email?: string;\n * phone?: string;\n * }\n *\n * // در کامپوننت\n * const { control, watch } = useForm();\n * const { data: clients, isLoading } = useGetClients();\n *\n * return (\n * <SingleClientSelector<Client>\n * name=\"clientId\"\n * control={control}\n * label=\"انتخاب مشتری\"\n * data={clients}\n * isLoading={isLoading}\n * />\n * );\n * ```\n */\nexport default function SingleClientSelector<\n T extends BaseOption = BaseOption\n>({\n name,\n control,\n label,\n data,\n isLoading,\n disabled = false,\n size = \"medium\",\n disableClearable = false,\n variant = \"outlined\",\n placeholder,\n renderOption,\n}: SingleClientSelectorProps<T>) {\n const dataOptions = React.useMemo(\n () =>\n data?.map((value) => ({\n ...value,\n key: value.key || `key_${Math.random()}`,\n })) || [],\n [data]\n );\n\n const handleChange = (\n _event: React.SyntheticEvent,\n selected: T | null,\n onChange: (value: any) => void\n ) => {\n // اصلاح: بررسی null و undefined\n onChange(selected?.key ?? null);\n };\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const computedValue = React.useMemo(() => {\n if (!value) return null;\n\n // اصلاح: برای single selector از === استفاده می‌کنیم\n return dataOptions.find(\n (option) => String(option.key) === String(value)\n )?.title\n ? dataOptions.find((option) => String(option.key) === String(value))\n : null;\n }, [value, dataOptions]);\n\n return (\n <Autocomplete\n disableClearable={disableClearable || isLoading}\n disabled={disabled || isLoading}\n size={size}\n options={dataOptions}\n sx={{ width: \"100%\" }}\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\n value={computedValue}\n onChange={(event, newValue) =>\n handleChange(event, newValue, onChange)\n }\n isOptionEqualToValue={(option, value) =>\n String(option.key) === String(value?.key)\n }\n getOptionLabel={(option) => {\n if (typeof option === \"string\") return option;\n if (option?.title) return String(option.title);\n return \"\";\n }}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option, state) => {\n if (renderOption) {\n return renderOption(props, option, state);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }}\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"],\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n variant={variant}\n placeholder={placeholder}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n"],"mappings":"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","names":["React","import_ri","Autocomplete","value","TextField","import_Autocomplete","import_TextField","React","import_react_hook_form","import_material","Autocomplete","value","TextField","import_material","import_Autocomplete","import_TextField","React","import_react_hook_form","Autocomplete","value","TextField","import_material","import_Autocomplete","import_TextField","React","import_react_hook_form","Autocomplete","value","TextField"]}
@@ -237,7 +237,7 @@ function MultipleSelector({
237
237
  isLoading,
238
238
  disabled = false,
239
239
  size = "medium",
240
- clear = false,
240
+ disableClearable = false,
241
241
  renderOption
242
242
  }) {
243
243
  const dataOptions = data?.map((value) => ({
@@ -271,7 +271,7 @@ function MultipleSelector({
271
271
  Autocomplete2,
272
272
  {
273
273
  multiple: true,
274
- disableClearable: clear,
274
+ disableClearable,
275
275
  disabled: disabled || isLoading,
276
276
  size,
277
277
  disableCloseOnSelect: true,
@@ -367,7 +367,7 @@ function SearchableSelector({
367
367
  isLoading,
368
368
  disabled = false,
369
369
  size = "medium",
370
- clear = false,
370
+ disableClearable = false,
371
371
  onChangeHandler,
372
372
  valueHandler,
373
373
  onFilterOptions,
@@ -390,7 +390,7 @@ function SearchableSelector({
390
390
  Autocomplete3,
391
391
  {
392
392
  freeSolo: true,
393
- disableClearable: clear || isLoading,
393
+ disableClearable: disableClearable || isLoading,
394
394
  disabled,
395
395
  disablePortal: true,
396
396
  size,
@@ -533,14 +533,12 @@ function SingleClientSelector({
533
533
  if (!value) return null;
534
534
  return dataOptions.find(
535
535
  (option) => String(option.key) === String(value)
536
- )?.title ? dataOptions.find(
537
- (option) => String(option.key) === String(value)
538
- ) : null;
536
+ )?.title ? dataOptions.find((option) => String(option.key) === String(value)) : null;
539
537
  }, [value, dataOptions]);
540
538
  return /* @__PURE__ */ React5.createElement(
541
539
  Autocomplete4,
542
540
  {
543
- disableClearable,
541
+ disableClearable: disableClearable || isLoading,
544
542
  disabled: disabled || isLoading,
545
543
  size,
546
544
  options: dataOptions,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../react-shim.js","../../src/selectors/multi-check-selector/index.tsx","../../src/selectors/multiple-selector/index.tsx","../../src/selectors/searchable-selector/index.tsx","../../src/selectors/single-client-selector/index.tsx"],"sourcesContent":["import * as React from \"react\";\nexport { React };\n","import Autocomplete from \"@mui/material/Autocomplete\";\r\nimport TextField, { TextFieldVariants } from \"@mui/material/TextField\";\r\nimport * as React from \"react\";\r\nimport { Control, Controller } from \"react-hook-form\";\r\nimport { Checkbox, CircularProgress, Popper } from \"@mui/material\";\r\nimport { FaCheckSquare } from \"react-icons/fa\";\r\nimport { RiCheckboxBlankLine } from \"react-icons/ri\";\r\nimport { MdSelectAll } from \"react-icons/md\";\r\nimport { RiDeleteBin6Line } from \"react-icons/ri\";\r\ninterface OptionType {\r\n title: string;\r\n key: string | number;\r\n [x: string]: any; // برای پشتیبانی از فیلدهای اضافی\r\n}\r\nexport interface AutocompleteRenderOptionState {\r\n inputValue: string;\r\n index: number;\r\n selected: boolean;\r\n}\r\ninterface MultipleSelectChipProps<T extends OptionType> {\r\n name: string;\r\n control: Control<any>;\r\n label?: string;\r\n data?: T[];\r\n isLoading?: boolean;\r\n disabled?: boolean;\r\n size?: \"small\" | \"medium\";\r\n disableClearable?: boolean;\r\n variant?: TextFieldVariants;\r\n placeholder?: string;\r\n renderOption?: (\r\n props: React.HTMLAttributes<HTMLLIElement>,\r\n option: T,\r\n state: AutocompleteRenderOptionState\r\n ) => React.ReactNode;\r\n}\r\n/**\r\n * 📦 MultipleSelector — کامپوننت انتخاب چندگزینه‌ای پیشرفته\r\n *\r\n * @component MultipleSelector\r\n *\r\n * @template T — نوع داده‌ی گزینه‌ها که باید شامل فیلدهای `title` و `key` باشد.\r\n *\r\n * @param {string} name - نام فیلد در فرم (برای ثبت در react-hook-form).\r\n * @param {Control<any>} control - کنترل فرم از کتابخانه react-hook-form.\r\n * @param {string} [label] - برچسب ورودی.\r\n * @param {T[]} [data] - آرایه‌ای از گزینه‌ها که هر کدام باید شامل `title` (نمایش) و `key` (شناسه یکتا) باشد.\r\n * @param {boolean} [isLoading=false] - حالت لودینگ برای نمایش اسپینر در ورودی.\r\n * @param {boolean} [disabled=false] - غیرفعال‌کردن ورودی.\r\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - سایز ورودی MUI Autocomplete.\r\n * @param {boolean} [clear=false] - اگر `false` باشد، قابلیت پاک کردن کامل (Clearable) غیرفعال می‌شود.\r\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابع سفارشی برای رندر هر آیتم در لیست انتخاب.\r\n *\r\n * @description\r\n * این کامپوننت یک `Autocomplete` چندگزینه‌ای با قابلیت‌های زیر است:\r\n * - اتصال مستقیم به `react-hook-form` (با استفاده از Controller)\r\n * - انتخاب همه (`انتخاب همه`) یا پاک کردن همه (`پاک کردن همه`)\r\n * - نمایش تعداد آیتم‌های انتخاب شده به جای تگ‌های جداگانه\r\n * - پشتیبانی از حالت لودینگ و غیرفعال بودن\r\n * - امکان سفارشی‌سازی رندر آیتم‌ها (`renderOption`)\r\n * - آیکون‌های سفارشی برای انتخاب‌ها و گزینه‌های ویژه\r\n * - جلوگیری از بستن لیست هنگام انتخاب آیتم‌ها (`disableCloseOnSelect`)\r\n * - مدیریت موقعیت Popper با MUI modifiers\r\n *\r\n * @returns {Array<string | number>} آرایه‌ای از کلیدهای آیتم‌های انتخاب شده.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { useForm, Controller } from \"react-hook-form\";\r\n *\r\n * type MyOption = { title: string; key: number };\r\n *\r\n * const options: MyOption[] = [\r\n * { title: \"محصول ۱\", key: 1 },\r\n * { title: \"محصول ۲\", key: 2 },\r\n * ];\r\n *\r\n * export default function MyForm() {\r\n * const { control, handleSubmit } = useForm({ defaultValues: { productIds: [] } });\r\n *\r\n * const onSubmit = (data: any) => {\r\n * console.log(\"انتخاب شده‌ها:\", data.productIds);\r\n * };\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(onSubmit)}>\r\n * <MultipleSelector<MyOption>\r\n * name=\"productIds\"\r\n * label=\"محصولات\"\r\n * control={control}\r\n * data={options}\r\n * isLoading={false}\r\n * size=\"small\"\r\n * renderOption={(props, option, state) => (\r\n * <li {...props} key={option.key}>\r\n * <strong style={{ color: state.selected ? \"green\" : \"black\" }}>\r\n * {option.title}\r\n * </strong>\r\n * </li>\r\n * )}\r\n * />\r\n * <button type=\"submit\">ثبت</button>\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport default function MultiCheckSelector<T extends OptionType>({\r\n name,\r\n control,\r\n label,\r\n data,\r\n isLoading,\r\n disabled = false,\r\n size = \"medium\",\r\n disableClearable = false,\r\n renderOption,\r\n variant,\r\n placeholder,\r\n}: MultipleSelectChipProps<T>) {\r\n const dataOptions =\r\n data?.map((value) => ({\r\n ...value,\r\n key: value.key || `key_${Math.random()}`,\r\n })) || [];\r\n\r\n const combinedOptions =\r\n dataOptions.length > 0\r\n ? [\r\n { title: \"انتخاب همه\", key: \"All\" } as T,\r\n { title: \"پاک کردن همه\", key: \"ClearAll\" } as T,\r\n ...dataOptions,\r\n ]\r\n : [...dataOptions];\r\n\r\n const handleChange = (\r\n _event: any,\r\n selected: any,\r\n onChange: (value: any) => void\r\n ) => {\r\n if (selected.some((item: any) => item.key === \"All\")) {\r\n const allItems = [...dataOptions];\r\n onChange(allItems.map((item) => item.key));\r\n } else if (selected.some((item: any) => item.key === \"ClearAll\")) {\r\n onChange([]);\r\n } else {\r\n onChange(selected.map((item: any) => item.key));\r\n }\r\n };\r\n const icon = <RiCheckboxBlankLine size={20} />;\r\n const checkedIcon = <FaCheckSquare size={20} />;\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\r\n const computedValue = React.useMemo(() => {\r\n if (Array.isArray(value) && dataOptions.length > 0) {\r\n return dataOptions.filter((option: any) =>\r\n value.includes(option.key)\r\n );\r\n }\r\n return [];\r\n }, [value, dataOptions]);\r\n\r\n // کنترل باز و بسته شدن آتوکامپلیت\r\n const autocompleteRef = React.useRef<any>(null);\r\n const [open, setOpen] = React.useState(false);\r\n const handleOpen = () => setOpen(true);\r\n const handleClose = () => setOpen(false);\r\n return (\r\n <Autocomplete\r\n multiple\r\n disableClearable={disableClearable}\r\n disabled={disabled || isLoading}\r\n size={size}\r\n disableCloseOnSelect\r\n options={combinedOptions}\r\n sx={{ width: \"100%\" }}\r\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\r\n value={computedValue}\r\n onChange={(event, value) =>\r\n handleChange(event, value as T[], onChange)\r\n }\r\n isOptionEqualToValue={(option, value) =>\r\n String(option.key) === String(value?.key)\r\n }\r\n getOptionLabel={(option) => option.title}\r\n loading={isLoading}\r\n loadingText=\"در حال بارگذاری...\"\r\n open={open}\r\n onOpen={handleOpen}\r\n onClose={handleClose}\r\n ref={autocompleteRef}\r\n renderOption={(props, option, state) => {\r\n if (renderOption) {\r\n return renderOption(props, option, state);\r\n }\r\n // آیکون مناسب برای گزینه‌های انتخاب همه و پاک کردن همه\r\n let iconElem = null;\r\n if (option.key === \"All\") {\r\n iconElem = (\r\n <MdSelectAll\r\n size={18}\r\n style={{ marginLeft: 6, color: \"#2563eb\" }}\r\n />\r\n );\r\n } else if (option.key === \"ClearAll\") {\r\n iconElem = (\r\n <RiDeleteBin6Line\r\n size={18}\r\n style={{ marginLeft: 6, color: \"#ef4444\" }}\r\n />\r\n );\r\n }\r\n return (\r\n <li\r\n {...props}\r\n key={`${option.key}`}\r\n style={{ margin: 5, borderRadius: 3 }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {option.key === \"All\" || option.key === \"ClearAll\" ? (\r\n iconElem\r\n ) : (\r\n <Checkbox\r\n icon={icon}\r\n checkedIcon={checkedIcon}\r\n style={{ marginLeft: 8 }}\r\n checked={state.selected}\r\n sx={{ margin: 0, padding: 0 }}\r\n />\r\n )}\r\n <div style={{ flexDirection: \"row\", width: \"100%\" }}>\r\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\r\n </div>\r\n </div>\r\n </li>\r\n );\r\n }}\r\n renderTags={(value) => {\r\n if (value.length === 0) return null;\r\n const total = dataOptions.length;\r\n const tagText =\r\n value.length === total\r\n ? `${value.length} مورد انتخاب شده`\r\n : `${value.length} مورد از ${total} انتخاب شده`;\r\n\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n height: \"auto\",\r\n minHeight: size === \"small\" ? \"24px\" : \"32px\",\r\n maxHeight: size === \"small\" ? \"32px\" : \"40px\",\r\n overflow: \"hidden\",\r\n whiteSpace: \"nowrap\",\r\n textOverflow: \"ellipsis\",\r\n width: \"100%\",\r\n maxWidth: \"calc(100% - 50px)\", // جا برای آیکون‌های پایانی\r\n }}\r\n onClick={handleOpen}\r\n >\r\n <span\r\n style={{\r\n fontWeight: 600,\r\n fontSize: size === \"small\" ? 13 : 15,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n display: \"block\",\r\n width: \"100%\",\r\n }}\r\n title={tagText} // نمایش متن کامل در tooltip\r\n >\r\n {tagText}\r\n </span>\r\n </div>\r\n );\r\n }}\r\n slots={{ popper: Popper }}\r\n slotProps={{\r\n popper: {\r\n modifiers: [\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"window\",\r\n rootBoundary: \"viewport\",\r\n altBoundary: true,\r\n padding: 10,\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top\", \"bottom\"],\r\n },\r\n },\r\n ],\r\n },\r\n }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label={label}\r\n error={!!error}\r\n variant={variant}\r\n placeholder={placeholder}\r\n helperText={error?.message}\r\n inputRef={ref}\r\n InputLabelProps={{ shrink: true }}\r\n InputProps={{\r\n ...params.InputProps,\r\n endAdornment: (\r\n <React.Fragment>\r\n {isLoading ? (\r\n <CircularProgress color=\"primary\" size={20} />\r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n </React.Fragment>\r\n ),\r\n }}\r\n />\r\n )}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n// ...existing code...\r\n","import Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\nimport { CircularProgress, Popper } from \"@mui/material\";\n\ninterface OptionType {\n title: string;\n key: string | number;\n [x: string]: any; // برای پشتیبانی از فیلدهای اضافی\n}\n\ninterface MultipleSelectChipProps<T extends OptionType> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n clear?: boolean;\n\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T\n ) => React.ReactNode;\n}\n/**\n * 📦 کامپوننت انتخاب چند گزینه‌ای با پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component MultipleSelector\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {Control<any>} control - کنترل فرم از react-hook-form.\n * @param {{ title: string; key: string | number }[]} [data] - لیستی از گزینه‌ها شامل `title` (متن) و `key` (مقدار).\n * @param {boolean} [isLoading=false] - آیا داده‌ها در حال بارگذاری هستند.\n * @param {boolean} [disabled=false] - غیرفعال‌سازی ورودی.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - سایز ورودی.\n * @param {boolean} [clear=false] - آیا امکان پاک کردن وجود دارد یا نه.\n * @param {string} [tooltip] - متن راهنما هنگام هاور.\n * @param {(props, option) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {Array<{ key: string | number }>} لیستی از آیتم‌های انتخاب‌شده ( فقط آیدی‌ها).\n *\n * @example\n * ```tsx\n * <MultipleSelector<{title:string; key:number;}>\n * name=\"productIds\"\n * label=\"محصولات\"\n * control={control}\n * data={[{ title: \"محصول ۱\", key: 1 }, { title: \"محصول ۲\", key: 2 }]}\n * />\n * ```\n *\n * @description\n * کامپوننتی چندانتخابی با قابلیت انتخاب همه‌ی موارد، سفارشی‌سازی گزینه‌ها،\n * نمایش راهنمای هاور، و بازگرداندن لیست کامل از آبجکت‌های انتخاب‌شده.\n *\n * برای سفارشی‌سازی نحوه نمایش آیتم‌ها:\n * ```tsx\n * renderOption={(props, option) => (\n * <li {...props} key={`${option.key}`}>\n * <span style={{ color: \"green\" }}>{option.title}</span>\n * </li>\n * )}\n * ```\n */\n\nexport default function MultipleSelector<T extends OptionType>({\n name,\n control,\n label,\n data,\n isLoading,\n disabled = false,\n size = \"medium\",\n clear = false,\n renderOption,\n}: MultipleSelectChipProps<T>) {\n const dataOptions =\n data?.map((value) => ({\n ...value,\n key: value.key || `key_${Math.random()}`,\n })) || [];\n\n const combinedOptions =\n dataOptions.length > 0\n ? [{ title: \"انتخاب همه\", key: \"All\" } as T, ...dataOptions]\n : [...dataOptions];\n\n const handleChange = (\n _event: any,\n selected: any,\n onChange: (value: any) => void\n ) => {\n if (selected.some((item: any) => item.key === \"All\")) {\n const allItems = [...dataOptions];\n onChange(allItems.map((item) => item.key));\n } else {\n onChange(selected.map((item: any) => item.key));\n }\n };\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const computedValue = React.useMemo(() => {\n if (Array.isArray(value) && dataOptions.length > 0) {\n return dataOptions.filter((option: any) =>\n value.includes(option.key)\n );\n }\n return [];\n }, [value, dataOptions]);\n\n return (\n <Autocomplete\n multiple\n disableClearable={clear}\n disabled={disabled || isLoading}\n size={size}\n disableCloseOnSelect\n options={combinedOptions}\n sx={{ width: \"100%\" }}\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\n value={computedValue}\n onChange={(event, value) =>\n handleChange(event, value as T[], onChange)\n }\n isOptionEqualToValue={(option, value) =>\n String(option.key) === String(value?.key)\n }\n getOptionLabel={(option) => option.title}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option) => {\n if (renderOption) {\n return renderOption(props, option);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }}\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"],\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n","import { CircularProgress, Popper } from \"@mui/material\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\n\ninterface BaseOption {\n key: number | string | \"false\" | true;\n title: string | number;\n [x: string]: any;\n}\n\ninterface SeacrchableSelectChipProps<T extends BaseOption = BaseOption> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n inputValue:string;\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n clear?: boolean;\n onChangeHandler?: (value: any, onChange: (data: any) => void) => void;\n valueHandler?: (value: any) => any;\n onFilterOptions: (inputValue: string) => void;\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T\n ) => React.ReactNode;\n}\n/**\n * 🔍 کامپوننت انتخاب تکی با قابلیت جست‌وجو، پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component SeacrchableSelector\n *\n * @template T - نوع گزینه‌ها که باید شامل `key` و `title` باشد.\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {Control<any>} control - کنترل فرم از `react-hook-form`.\n * @param {T[]} [data] - لیستی از گزینه‌ها شامل `key` و `title` به عنوان مقدار و متن نمایشی.\n * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).\n * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - اندازه ورودی.\n * @param {boolean} [clear=false] - فعال بودن امکان پاک‌کردن مقدار انتخاب‌شده.\n * @param {(value: any, onChange: (data: any) => void) => void} [onChangeHandler] - تابع هندل انتخاب گزینه (در صورت نیاز به کنترل خارجی).\n * @param {(value: any) => string} [valueHandler] - تابع تبدیل مقدار ذخیره‌شده در فرم به مقدار نمایشی در input (مثلاً عنوان).\n * @param {string} [inputValue] - مقدار ورودی کنونی (برای کنترل ورودی).\n * @param {(inputValue: string) => void} [onFilterOptions] - تابعی برای هندل کردن فیلتر شدن داده‌ها هنگام تایپ کاربر (مثلاً برای fetch کردن).\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {string | number | null} مقدار انتخاب‌شده (کلید گزینه یا null)\n *\n * @example\n * ```tsx\n * <SeacrchableSelector<{ title: string; key: number }>\n * name=\"categoryId\"\n * label=\"دسته‌بندی\"\n * control={control}\n * data={[{ title: \"کتاب\", key: 1 }, { title: \"لوازم تحریر\", key: 2 }]}\n * inputValue={inputValue}\n * onFilterOptions={(input) => fetchUsers(input)}\n * />\n * ```\n *\n * @description\n * این کامپوننت یک ورودی انتخاب‌گر تکی با قابلیت جست‌وجو و پشتیبانی از مقدار دلخواه کاربر (`freeSolo`) است.\n * قابلیت‌هایی مانند بارگذاری داده، سفارشی‌سازی نمایش گزینه‌ها، هماهنگ‌سازی با فرم، پاک‌سازی انتخاب، و پشتیبانی از جست‌وجوی سمت سرور را نیز داراست.\n *\n * اگر `freeSolo` فعال باشد، می‌توان مقادیر تایپ‌شده را نیز ذخیره کرد. مقدار خروجی معمولاً `key` گزینه انتخاب‌شده است،\n * مگر اینکه کاربر متنی وارد کند که در لیست نباشد (در این صورت می‌توان آن را مستقیم ذخیره کرد).\n *\n * برای سفارشی‌سازی گزینه‌ها:\n * ```tsx\n * renderOption={(props, option) => (\n * <li {...props} key={option.key}>\n * <b>{option.title}</b>\n * </li>\n * )}\n * ```\n */\n\nexport default function SearchableSelector<T extends BaseOption = BaseOption>({\n name,\n control,\n label,\n data,\n inputValue,\n isLoading,\n disabled = false,\n size = \"medium\",\n clear = false,\n onChangeHandler,\n valueHandler,\n onFilterOptions,\n renderOption,\n \n}: SeacrchableSelectChipProps<T>) {\n const dataOptions =\n data?.map((value: T) => ({\n ...value,\n })) || [];\n\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const selectedValues = React.useMemo(\n () => dataOptions.find((v) => v?.key == value) ?? null,\n [value, dataOptions]\n );\n\n return (\n <Autocomplete\n freeSolo={true}\n disableClearable={clear || isLoading}\n disabled={disabled}\n disablePortal\n size={size}\n disableCloseOnSelect={false}\n options={dataOptions}\n inputValue={valueHandler ? valueHandler(value) : inputValue}\n onInputChange={(_, newInput, reason) => {\n reason == \"input\" && onChange(null);\n // وقتی کاربر داره تایپ می‌کنه یا پاک می‌کنه\n onFilterOptions(newInput);\n }}\n sx={{\n width: \"100%\",\n }}\n noOptionsText=\"داده ای برای نمایش وجود ندارد\"\n value={selectedValues}\n onChange={(e, value) => {\n // ۱) اگر کاربر یک رشته تایپ‌شده (freeSolo) انتخاب کرده\n if (typeof value === \"string\") {\n // می‌تونیم key رو هم با خود رشته‌ی ورودی برابر بگیریم،\n // یا اگر نمی‌خواید freeSolo ذخیره کنید، اینجا onChange(null) بزنید\n onChange(value as any); // یا onChange(null) بسته به نیاز\n onFilterOptions(value);\n }\n // ۲) اگر گزینه‌ی منظم انتخاب شده\n else if (value && typeof value === \"object\") {\n onChangeHandler\n ? onChangeHandler(value, onChange)\n : onChange(value.key);\n onFilterOptions(String(value.title));\n }\n // ۳) حالت پاک کردن\n else {\n onChange(null);\n onFilterOptions(\"\");\n }\n }}\n getOptionLabel={(option) => {\n if (typeof option === \"string\") return option;\n if (option?.title) return String(option.title);\n return \"\";\n }}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option) => {\n if (renderOption) {\n return renderOption(props, option);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }} // New API\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"], // Ensures it flips to the top if needed\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n","import { CircularProgress, Popper } from \"@mui/material\";\nimport Autocomplete, {\n AutocompleteRenderOptionState,\n} from \"@mui/material/Autocomplete\";\nimport TextField, { TextFieldVariants } from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\n\ninterface BaseOption {\n key: number | string | \"false\" | true;\n title: string | number;\n [x: string]: any;\n}\n\ninterface SingleClientSelectorProps<T extends BaseOption = BaseOption> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n multipleitems?: boolean; // این prop استفاده نمی‌شود - قابل حذف\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n disableClearable?: boolean;\n variant?: TextFieldVariants;\n placeholder?: string;\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T,\n state: AutocompleteRenderOptionState\n ) => React.ReactNode;\n}\n\nexport default function SingleClientSelector<\n T extends BaseOption = BaseOption\n>({\n name,\n control,\n label,\n data,\n isLoading,\n disabled = false,\n size = \"medium\",\n disableClearable = false,\n variant = \"outlined\",\n placeholder,\n renderOption,\n}: SingleClientSelectorProps<T>) {\n const dataOptions = React.useMemo(\n () =>\n data?.map((value) => ({\n ...value,\n key: value.key || `key_${Math.random()}`,\n })) || [],\n [data]\n );\n\n const handleChange = (\n _event: React.SyntheticEvent,\n selected: T | null,\n onChange: (value: any) => void\n ) => {\n // اصلاح: بررسی null و undefined\n onChange(selected?.key ?? null);\n };\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const computedValue = React.useMemo(() => {\n if (!value) return null;\n\n // اصلاح: برای single selector از === استفاده می‌کنیم\n return dataOptions.find(\n (option) => String(option.key) === String(value)\n )?.title\n ? dataOptions.find(\n (option) => String(option.key) === String(value)\n )\n : null;\n }, [value, dataOptions]);\n\n return (\n <Autocomplete\n disableClearable={disableClearable}\n disabled={disabled || isLoading}\n size={size}\n options={dataOptions}\n sx={{ width: \"100%\" }}\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\n value={computedValue}\n onChange={(event, newValue) =>\n handleChange(event, newValue, onChange)\n }\n isOptionEqualToValue={(option, value) =>\n String(option.key) === String(value?.key)\n }\n getOptionLabel={(option) => {\n if (typeof option === \"string\") return option;\n if (option?.title) return String(option.title);\n return \"\";\n }}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option, state) => {\n if (renderOption) {\n return renderOption(props, option, state);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }}\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"],\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n variant={variant}\n placeholder={placeholder}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n"],"mappings":"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","names":["React","value","Autocomplete","TextField","React","Controller","CircularProgress","Popper","value","CircularProgress","Popper","Autocomplete","TextField","React","Controller","value","CircularProgress","Popper","Autocomplete","TextField","React","Controller","value"]}
1
+ {"version":3,"sources":["../../react-shim.js","../../src/selectors/multi-check-selector/index.tsx","../../src/selectors/multiple-selector/index.tsx","../../src/selectors/searchable-selector/index.tsx","../../src/selectors/single-client-selector/index.tsx"],"sourcesContent":["import * as React from \"react\";\nexport { React };\n","import Autocomplete from \"@mui/material/Autocomplete\";\r\nimport TextField, { TextFieldVariants } from \"@mui/material/TextField\";\r\nimport * as React from \"react\";\r\nimport { Control, Controller } from \"react-hook-form\";\r\nimport { Checkbox, CircularProgress, Popper } from \"@mui/material\";\r\nimport { FaCheckSquare } from \"react-icons/fa\";\r\nimport { RiCheckboxBlankLine } from \"react-icons/ri\";\r\nimport { MdSelectAll } from \"react-icons/md\";\r\nimport { RiDeleteBin6Line } from \"react-icons/ri\";\r\ninterface OptionType {\r\n title: string;\r\n key: string | number;\r\n [x: string]: any; // برای پشتیبانی از فیلدهای اضافی\r\n}\r\nexport interface AutocompleteRenderOptionState {\r\n inputValue: string;\r\n index: number;\r\n selected: boolean;\r\n}\r\ninterface MultipleSelectChipProps<T extends OptionType> {\r\n name: string;\r\n control: Control<any>;\r\n label?: string;\r\n data?: T[];\r\n isLoading?: boolean;\r\n disabled?: boolean;\r\n size?: \"small\" | \"medium\";\r\n disableClearable?: boolean;\r\n variant?: TextFieldVariants;\r\n placeholder?: string;\r\n renderOption?: (\r\n props: React.HTMLAttributes<HTMLLIElement>,\r\n option: T,\r\n state: AutocompleteRenderOptionState\r\n ) => React.ReactNode;\r\n}\r\n/**\r\n * 📦 MultipleSelector — کامپوننت انتخاب چندگزینه‌ای پیشرفته\r\n *\r\n * @component MultipleSelector\r\n *\r\n * @template T — نوع داده‌ی گزینه‌ها که باید شامل فیلدهای `title` و `key` باشد.\r\n *\r\n * @param {string} name - نام فیلد در فرم (برای ثبت در react-hook-form).\r\n * @param {Control<any>} control - کنترل فرم از کتابخانه react-hook-form.\r\n * @param {string} [label] - برچسب ورودی.\r\n * @param {T[]} [data] - آرایه‌ای از گزینه‌ها که هر کدام باید شامل `title` (نمایش) و `key` (شناسه یکتا) باشد.\r\n * @param {boolean} [isLoading=false] - حالت لودینگ برای نمایش اسپینر در ورودی.\r\n * @param {boolean} [disabled=false] - غیرفعال‌کردن ورودی.\r\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - سایز ورودی MUI Autocomplete.\r\n * @param {boolean} [clear=false] - اگر `false` باشد، قابلیت پاک کردن کامل (Clearable) غیرفعال می‌شود.\r\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابع سفارشی برای رندر هر آیتم در لیست انتخاب.\r\n *\r\n * @description\r\n * این کامپوننت یک `Autocomplete` چندگزینه‌ای با قابلیت‌های زیر است:\r\n * - اتصال مستقیم به `react-hook-form` (با استفاده از Controller)\r\n * - انتخاب همه (`انتخاب همه`) یا پاک کردن همه (`پاک کردن همه`)\r\n * - نمایش تعداد آیتم‌های انتخاب شده به جای تگ‌های جداگانه\r\n * - پشتیبانی از حالت لودینگ و غیرفعال بودن\r\n * - امکان سفارشی‌سازی رندر آیتم‌ها (`renderOption`)\r\n * - آیکون‌های سفارشی برای انتخاب‌ها و گزینه‌های ویژه\r\n * - جلوگیری از بستن لیست هنگام انتخاب آیتم‌ها (`disableCloseOnSelect`)\r\n * - مدیریت موقعیت Popper با MUI modifiers\r\n *\r\n * @returns {Array<string | number>} آرایه‌ای از کلیدهای آیتم‌های انتخاب شده.\r\n *\r\n * @example\r\n * ```tsx\r\n * import { useForm, Controller } from \"react-hook-form\";\r\n *\r\n * type MyOption = { title: string; key: number };\r\n *\r\n * const options: MyOption[] = [\r\n * { title: \"محصول ۱\", key: 1 },\r\n * { title: \"محصول ۲\", key: 2 },\r\n * ];\r\n *\r\n * export default function MyForm() {\r\n * const { control, handleSubmit } = useForm({ defaultValues: { productIds: [] } });\r\n *\r\n * const onSubmit = (data: any) => {\r\n * console.log(\"انتخاب شده‌ها:\", data.productIds);\r\n * };\r\n *\r\n * return (\r\n * <form onSubmit={handleSubmit(onSubmit)}>\r\n * <MultipleSelector<MyOption>\r\n * name=\"productIds\"\r\n * label=\"محصولات\"\r\n * control={control}\r\n * data={options}\r\n * isLoading={false}\r\n * size=\"small\"\r\n * renderOption={(props, option, state) => (\r\n * <li {...props} key={option.key}>\r\n * <strong style={{ color: state.selected ? \"green\" : \"black\" }}>\r\n * {option.title}\r\n * </strong>\r\n * </li>\r\n * )}\r\n * />\r\n * <button type=\"submit\">ثبت</button>\r\n * </form>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport default function MultiCheckSelector<T extends OptionType>({\r\n name,\r\n control,\r\n label,\r\n data,\r\n isLoading,\r\n disabled = false,\r\n size = \"medium\",\r\n disableClearable = false,\r\n renderOption,\r\n variant,\r\n placeholder,\r\n}: MultipleSelectChipProps<T>) {\r\n const dataOptions =\r\n data?.map((value) => ({\r\n ...value,\r\n key: value.key || `key_${Math.random()}`,\r\n })) || [];\r\n\r\n const combinedOptions =\r\n dataOptions.length > 0\r\n ? [\r\n { title: \"انتخاب همه\", key: \"All\" } as T,\r\n { title: \"پاک کردن همه\", key: \"ClearAll\" } as T,\r\n ...dataOptions,\r\n ]\r\n : [...dataOptions];\r\n\r\n const handleChange = (\r\n _event: any,\r\n selected: any,\r\n onChange: (value: any) => void\r\n ) => {\r\n if (selected.some((item: any) => item.key === \"All\")) {\r\n const allItems = [...dataOptions];\r\n onChange(allItems.map((item) => item.key));\r\n } else if (selected.some((item: any) => item.key === \"ClearAll\")) {\r\n onChange([]);\r\n } else {\r\n onChange(selected.map((item: any) => item.key));\r\n }\r\n };\r\n const icon = <RiCheckboxBlankLine size={20} />;\r\n const checkedIcon = <FaCheckSquare size={20} />;\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\r\n const computedValue = React.useMemo(() => {\r\n if (Array.isArray(value) && dataOptions.length > 0) {\r\n return dataOptions.filter((option: any) =>\r\n value.includes(option.key)\r\n );\r\n }\r\n return [];\r\n }, [value, dataOptions]);\r\n\r\n // کنترل باز و بسته شدن آتوکامپلیت\r\n const autocompleteRef = React.useRef<any>(null);\r\n const [open, setOpen] = React.useState(false);\r\n const handleOpen = () => setOpen(true);\r\n const handleClose = () => setOpen(false);\r\n return (\r\n <Autocomplete\r\n multiple\r\n disableClearable={disableClearable}\r\n disabled={disabled || isLoading}\r\n size={size}\r\n disableCloseOnSelect\r\n options={combinedOptions}\r\n sx={{ width: \"100%\" }}\r\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\r\n value={computedValue}\r\n onChange={(event, value) =>\r\n handleChange(event, value as T[], onChange)\r\n }\r\n isOptionEqualToValue={(option, value) =>\r\n String(option.key) === String(value?.key)\r\n }\r\n getOptionLabel={(option) => option.title}\r\n loading={isLoading}\r\n loadingText=\"در حال بارگذاری...\"\r\n open={open}\r\n onOpen={handleOpen}\r\n onClose={handleClose}\r\n ref={autocompleteRef}\r\n renderOption={(props, option, state) => {\r\n if (renderOption) {\r\n return renderOption(props, option, state);\r\n }\r\n // آیکون مناسب برای گزینه‌های انتخاب همه و پاک کردن همه\r\n let iconElem = null;\r\n if (option.key === \"All\") {\r\n iconElem = (\r\n <MdSelectAll\r\n size={18}\r\n style={{ marginLeft: 6, color: \"#2563eb\" }}\r\n />\r\n );\r\n } else if (option.key === \"ClearAll\") {\r\n iconElem = (\r\n <RiDeleteBin6Line\r\n size={18}\r\n style={{ marginLeft: 6, color: \"#ef4444\" }}\r\n />\r\n );\r\n }\r\n return (\r\n <li\r\n {...props}\r\n key={`${option.key}`}\r\n style={{ margin: 5, borderRadius: 3 }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"row\",\r\n width: \"100%\",\r\n alignItems: \"center\",\r\n }}\r\n >\r\n {option.key === \"All\" || option.key === \"ClearAll\" ? (\r\n iconElem\r\n ) : (\r\n <Checkbox\r\n icon={icon}\r\n checkedIcon={checkedIcon}\r\n style={{ marginLeft: 8 }}\r\n checked={state.selected}\r\n sx={{ margin: 0, padding: 0 }}\r\n />\r\n )}\r\n <div style={{ flexDirection: \"row\", width: \"100%\" }}>\r\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\r\n </div>\r\n </div>\r\n </li>\r\n );\r\n }}\r\n renderTags={(value) => {\r\n if (value.length === 0) return null;\r\n const total = dataOptions.length;\r\n const tagText =\r\n value.length === total\r\n ? `${value.length} مورد انتخاب شده`\r\n : `${value.length} مورد از ${total} انتخاب شده`;\r\n\r\n return (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n height: \"auto\",\r\n minHeight: size === \"small\" ? \"24px\" : \"32px\",\r\n maxHeight: size === \"small\" ? \"32px\" : \"40px\",\r\n overflow: \"hidden\",\r\n whiteSpace: \"nowrap\",\r\n textOverflow: \"ellipsis\",\r\n width: \"100%\",\r\n maxWidth: \"calc(100% - 50px)\", // جا برای آیکون‌های پایانی\r\n }}\r\n onClick={handleOpen}\r\n >\r\n <span\r\n style={{\r\n fontWeight: 600,\r\n fontSize: size === \"small\" ? 13 : 15,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n display: \"block\",\r\n width: \"100%\",\r\n }}\r\n title={tagText} // نمایش متن کامل در tooltip\r\n >\r\n {tagText}\r\n </span>\r\n </div>\r\n );\r\n }}\r\n slots={{ popper: Popper }}\r\n slotProps={{\r\n popper: {\r\n modifiers: [\r\n {\r\n name: \"preventOverflow\",\r\n options: {\r\n boundary: \"window\",\r\n rootBoundary: \"viewport\",\r\n altBoundary: true,\r\n padding: 10,\r\n },\r\n },\r\n {\r\n name: \"flip\",\r\n options: {\r\n fallbackPlacements: [\"top\", \"bottom\"],\r\n },\r\n },\r\n ],\r\n },\r\n }}\r\n renderInput={(params) => (\r\n <TextField\r\n {...params}\r\n label={label}\r\n error={!!error}\r\n variant={variant}\r\n placeholder={placeholder}\r\n helperText={error?.message}\r\n inputRef={ref}\r\n InputLabelProps={{ shrink: true }}\r\n InputProps={{\r\n ...params.InputProps,\r\n endAdornment: (\r\n <React.Fragment>\r\n {isLoading ? (\r\n <CircularProgress color=\"primary\" size={20} />\r\n ) : null}\r\n {params.InputProps.endAdornment}\r\n </React.Fragment>\r\n ),\r\n }}\r\n />\r\n )}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n}\r\n// ...existing code...\r\n","import Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\nimport { CircularProgress, Popper } from \"@mui/material\";\n\ninterface OptionType {\n title: string;\n key: string | number;\n [x: string]: any; // برای پشتیبانی از فیلدهای اضافی\n}\n\ninterface MultipleSelectChipProps<T extends OptionType> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n disableClearable?: boolean;\n\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T\n ) => React.ReactNode;\n}\n/**\n * 📦 کامپوننت انتخاب چند گزینه‌ای با پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component MultipleSelector\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {Control<any>} control - کنترل فرم از react-hook-form.\n * @param {{ title: string; key: string | number }[]} [data] - لیستی از گزینه‌ها شامل `title` (متن) و `key` (مقدار).\n * @param {boolean} [isLoading=false] - آیا داده‌ها در حال بارگذاری هستند.\n * @param {boolean} [disabled=false] - غیرفعال‌سازی ورودی.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - سایز ورودی.\n * @param {boolean} [disableClearable=false] - آیا امکان پاک کردن وجود دارد یا نه.\n * @param {string} [tooltip] - متن راهنما هنگام هاور.\n * @param {(props, option) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {Array<{ key: string | number }>} لیستی از آیتم‌های انتخاب‌شده ( فقط آیدی‌ها).\n *\n * @example\n * ```tsx\n * <MultipleSelector<{title:string; key:number;}>\n * name=\"productIds\"\n * label=\"محصولات\"\n * control={control}\n * data={[{ title: \"محصول ۱\", key: 1 }, { title: \"محصول ۲\", key: 2 }]}\n * />\n * ```\n *\n * @description\n * کامپوننتی چندانتخابی با قابلیت انتخاب همه‌ی موارد، سفارشی‌سازی گزینه‌ها،\n * نمایش راهنمای هاور، و بازگرداندن لیست کامل از آبجکت‌های انتخاب‌شده.\n *\n * برای سفارشی‌سازی نحوه نمایش آیتم‌ها:\n * ```tsx\n * renderOption={(props, option) => (\n * <li {...props} key={`${option.key}`}>\n * <span style={{ color: \"green\" }}>{option.title}</span>\n * </li>\n * )}\n * ```\n */\n\nexport default function MultipleSelector<T extends OptionType>({\n name,\n control,\n label,\n data,\n isLoading,\n disabled = false,\n size = \"medium\",\n disableClearable = false,\n renderOption,\n}: MultipleSelectChipProps<T>) {\n const dataOptions =\n data?.map((value) => ({\n ...value,\n key: value.key || `key_${Math.random()}`,\n })) || [];\n\n const combinedOptions =\n dataOptions.length > 0\n ? [{ title: \"انتخاب همه\", key: \"All\" } as T, ...dataOptions]\n : [...dataOptions];\n\n const handleChange = (\n _event: any,\n selected: any,\n onChange: (value: any) => void\n ) => {\n if (selected.some((item: any) => item.key === \"All\")) {\n const allItems = [...dataOptions];\n onChange(allItems.map((item) => item.key));\n } else {\n onChange(selected.map((item: any) => item.key));\n }\n };\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const computedValue = React.useMemo(() => {\n if (Array.isArray(value) && dataOptions.length > 0) {\n return dataOptions.filter((option: any) =>\n value.includes(option.key)\n );\n }\n return [];\n }, [value, dataOptions]);\n\n return (\n <Autocomplete\n multiple\n disableClearable={disableClearable}\n disabled={disabled || isLoading}\n size={size}\n disableCloseOnSelect\n options={combinedOptions}\n sx={{ width: \"100%\" }}\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\n value={computedValue}\n onChange={(event, value) =>\n handleChange(event, value as T[], onChange)\n }\n isOptionEqualToValue={(option, value) =>\n String(option.key) === String(value?.key)\n }\n getOptionLabel={(option) => option.title}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option) => {\n if (renderOption) {\n return renderOption(props, option);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }}\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"],\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n","import { CircularProgress, Popper } from \"@mui/material\";\nimport Autocomplete from \"@mui/material/Autocomplete\";\nimport TextField from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\n\ninterface BaseOption {\n key: number | string | \"false\" | true;\n title: string | number;\n [x: string]: any;\n}\n\ninterface SeacrchableSelectChipProps<T extends BaseOption = BaseOption> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n inputValue:string;\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n disableClearable?: boolean;\n onChangeHandler?: (value: any, onChange: (data: any) => void) => void;\n valueHandler?: (value: any) => any;\n onFilterOptions: (inputValue: string) => void;\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T\n ) => React.ReactNode;\n}\n/**\n * 🔍 کامپوننت انتخاب تکی با قابلیت جست‌وجو، پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component SeacrchableSelector\n *\n * @template T - نوع گزینه‌ها که باید شامل `key` و `title` باشد.\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {Control<any>} control - کنترل فرم از `react-hook-form`.\n * @param {T[]} [data] - لیستی از گزینه‌ها شامل `key` و `title` به عنوان مقدار و متن نمایشی.\n * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).\n * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - اندازه ورودی.\n * @param {boolean} [disableClearable=false] - فعال بودن امکان پاک‌کردن مقدار انتخاب‌شده.\n * @param {(value: any, onChange: (data: any) => void) => void} [onChangeHandler] - تابع هندل انتخاب گزینه (در صورت نیاز به کنترل خارجی).\n * @param {(value: any) => string} [valueHandler] - تابع تبدیل مقدار ذخیره‌شده در فرم به مقدار نمایشی در input (مثلاً عنوان).\n * @param {string} [inputValue] - مقدار ورودی کنونی (برای کنترل ورودی).\n * @param {(inputValue: string) => void} [onFilterOptions] - تابعی برای هندل کردن فیلتر شدن داده‌ها هنگام تایپ کاربر (مثلاً برای fetch کردن).\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {string | number | null} مقدار انتخاب‌شده (کلید گزینه یا null)\n *\n * @example\n * ```tsx\n * <SeacrchableSelector<{ title: string; key: number }>\n * name=\"categoryId\"\n * label=\"دسته‌بندی\"\n * control={control}\n * data={[{ title: \"کتاب\", key: 1 }, { title: \"لوازم تحریر\", key: 2 }]}\n * inputValue={inputValue}\n * onFilterOptions={(input) => fetchUsers(input)}\n * />\n * ```\n *\n * @description\n * این کامپوننت یک ورودی انتخاب‌گر تکی با قابلیت جست‌وجو و پشتیبانی از مقدار دلخواه کاربر (`freeSolo`) است.\n * قابلیت‌هایی مانند بارگذاری داده، سفارشی‌سازی نمایش گزینه‌ها، هماهنگ‌سازی با فرم، پاک‌سازی انتخاب، و پشتیبانی از جست‌وجوی سمت سرور را نیز داراست.\n *\n * اگر `freeSolo` فعال باشد، می‌توان مقادیر تایپ‌شده را نیز ذخیره کرد. مقدار خروجی معمولاً `key` گزینه انتخاب‌شده است،\n * مگر اینکه کاربر متنی وارد کند که در لیست نباشد (در این صورت می‌توان آن را مستقیم ذخیره کرد).\n *\n * برای سفارشی‌سازی گزینه‌ها:\n * ```tsx\n * renderOption={(props, option) => (\n * <li {...props} key={option.key}>\n * <b>{option.title}</b>\n * </li>\n * )}\n * ```\n */\n\nexport default function SearchableSelector<T extends BaseOption = BaseOption>({\n name,\n control,\n label,\n data,\n inputValue,\n isLoading,\n disabled = false,\n size = \"medium\",\n disableClearable = false,\n onChangeHandler,\n valueHandler,\n onFilterOptions,\n renderOption,\n \n}: SeacrchableSelectChipProps<T>) {\n const dataOptions =\n data?.map((value: T) => ({\n ...value,\n })) || [];\n\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const selectedValues = React.useMemo(\n () => dataOptions.find((v) => v?.key == value) ?? null,\n [value, dataOptions]\n );\n\n return (\n <Autocomplete\n freeSolo={true}\n disableClearable={disableClearable || isLoading}\n disabled={disabled}\n disablePortal\n size={size}\n disableCloseOnSelect={false}\n options={dataOptions}\n inputValue={valueHandler ? valueHandler(value) : inputValue}\n onInputChange={(_, newInput, reason) => {\n reason == \"input\" && onChange(null);\n // وقتی کاربر داره تایپ می‌کنه یا پاک می‌کنه\n onFilterOptions(newInput);\n }}\n sx={{\n width: \"100%\",\n }}\n noOptionsText=\"داده ای برای نمایش وجود ندارد\"\n value={selectedValues}\n onChange={(e, value) => {\n // ۱) اگر کاربر یک رشته تایپ‌شده (freeSolo) انتخاب کرده\n if (typeof value === \"string\") {\n // می‌تونیم key رو هم با خود رشته‌ی ورودی برابر بگیریم،\n // یا اگر نمی‌خواید freeSolo ذخیره کنید، اینجا onChange(null) بزنید\n onChange(value as any); // یا onChange(null) بسته به نیاز\n onFilterOptions(value);\n }\n // ۲) اگر گزینه‌ی منظم انتخاب شده\n else if (value && typeof value === \"object\") {\n onChangeHandler\n ? onChangeHandler(value, onChange)\n : onChange(value.key);\n onFilterOptions(String(value.title));\n }\n // ۳) حالت پاک کردن\n else {\n onChange(null);\n onFilterOptions(\"\");\n }\n }}\n getOptionLabel={(option) => {\n if (typeof option === \"string\") return option;\n if (option?.title) return String(option.title);\n return \"\";\n }}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option) => {\n if (renderOption) {\n return renderOption(props, option);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }} // New API\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"], // Ensures it flips to the top if needed\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n","import { CircularProgress, Popper } from \"@mui/material\";\nimport Autocomplete, {\n AutocompleteRenderOptionState,\n} from \"@mui/material/Autocomplete\";\nimport TextField, { TextFieldVariants } from \"@mui/material/TextField\";\nimport * as React from \"react\";\nimport { Control, Controller } from \"react-hook-form\";\n\ninterface BaseOption {\n key: number | string | \"false\" | true;\n title: string | number;\n [x: string]: any;\n}\n\ninterface SingleClientSelectorProps<T extends BaseOption = BaseOption> {\n name: string;\n control: Control<any>;\n label?: string;\n data?: T[];\n isLoading?: boolean;\n disabled?: boolean;\n size?: \"small\" | \"medium\";\n disableClearable?: boolean;\n variant?: TextFieldVariants;\n placeholder?: string;\n renderOption?: (\n props: React.HTMLAttributes<HTMLLIElement>,\n option: T,\n state: AutocompleteRenderOptionState\n ) => React.ReactNode;\n}\n\n/**\n * 🔍 کامپوننت انتخاب تکی کلاینت با قابلیت جست‌وجو، پشتیبانی از react-hook-form و MUI Autocomplete\n *\n * @component SingleClientSelector\n *\n * @template T - نوع گزینه‌ها که باید شامل `key` و `title` باشد و از BaseOption ارث‌بری کند.\n *\n * @param {string} name - نام فیلدی که در فرم ثبت می‌شود.\n * @param {Control<any>} control - کنترل فرم از `react-hook-form`.\n * @param {string} [label] - برچسب نمایشی برای فیلد.\n * @param {T[]} [data] - لیستی از گزینه‌ها شامل `key` و `title` به عنوان مقدار و متن نمایشی.\n * @param {boolean} [isLoading=false] - وضعیت بارگذاری (مثلاً هنگام فراخوانی API).\n * @param {boolean} [disabled=false] - غیرفعال بودن فیلد.\n * @param {\"small\" | \"medium\"} [size=\"medium\"] - اندازه ورودی.\n * @param {boolean} [disableClearable=false] - غیرفعال کردن امکان پاک‌کردن مقدار انتخاب‌شده.\n * @param {TextFieldVariants} [variant=\"outlined\"] - نوع نمایش TextField (outlined، filled، standard).\n * @param {string} [placeholder] - متن راهنما برای ورودی.\n * @param {(props: React.HTMLAttributes<HTMLLIElement>, option: T, state: AutocompleteRenderOptionState) => React.ReactNode} [renderOption] - تابعی سفارشی برای رندر آیتم‌ها در لیست.\n *\n * @returns {string | number | boolean | null} مقدار انتخاب‌شده (کلید گزینه یا null)\n *\n * @example\n * ```tsx\n * // استفاده ساده\n * <SingleClientSelector<{ title: string; key: number }>\n * name=\"clientId\"\n * label=\"انتخاب مشتری\"\n * control={control}\n * data={[\n * { title: \"شرکت الف\", key: 1 },\n * { title: \"شرکت ب\", key: 2 }\n * ]}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // استفاده پیشرفته با رندرینگ سفارشی\n * <SingleClientSelector<Client>\n * name=\"selectedClient\"\n * label=\"انتخاب مشتری\"\n * control={control}\n * data={clients}\n * isLoading={isLoadingClients}\n * placeholder=\"جستجو و انتخاب مشتری...\"\n * renderOption={(props, option) => (\n * <li {...props} key={option.key}>\n * <div style={{ display: 'flex', flexDirection: 'column' }}>\n * <strong>{option.title}</strong>\n * <small>{option.email}</small>\n * </div>\n * </li>\n * )}\n * />\n * ```\n *\n * @description\n * این کامپوننت یک انتخاب‌گر تکی اختصاصی برای کلاینت‌ها با قابلیت‌های زیر است:\n *\n * ✅ **یکپارچگی با فرم**: پشتیبانی کامل از `react-hook-form` با validation\n * 🔍 **جست‌وجو**: امکان جست‌وجو در لیست گزینه‌ها\n * ⚡ **بارگذاری**: نمایش وضعیت loading هنگام fetch داده‌ها\n * 🎨 **سفارشی‌سازی**: امکان سفارشی‌سازی کامل نمایش آیتم‌ها\n * 🧹 **پاک‌سازی**: قابلیت پاک کردن انتخاب (قابل غیرفعال‌سازی)\n * 📱 **ریسپانسیو**: طراحی مناسب برای همه اندازه صفحه‌ها\n * 🌐 **RTL**: پشتیبانی کامل از راست به چپ\n * 🎯 **بهینه**: بهینه‌سازی شده برای عملکرد بالا با `useMemo`\n *\n * **نکات مهم:**\n * - مقدار خروجی همیشه `key` گزینه انتخاب‌شده است\n * - در صورت عدم انتخاب، مقدار `null` برگردانده می‌شود\n * - هر گزینه باید دارای `key` و `title` یکتا باشد\n * - کامپوننت خطاهای validation فرم را نمایش می‌دهد\n * - از Popper برای بهبود عملکرد dropdown استفاده می‌کند\n *\n * **الگوی استفاده معمول:**\n * ```tsx\n * // تعریف نوع داده\n * interface Client {\n * key: number;\n * title: string;\n * email?: string;\n * phone?: string;\n * }\n *\n * // در کامپوننت\n * const { control, watch } = useForm();\n * const { data: clients, isLoading } = useGetClients();\n *\n * return (\n * <SingleClientSelector<Client>\n * name=\"clientId\"\n * control={control}\n * label=\"انتخاب مشتری\"\n * data={clients}\n * isLoading={isLoading}\n * />\n * );\n * ```\n */\nexport default function SingleClientSelector<\n T extends BaseOption = BaseOption\n>({\n name,\n control,\n label,\n data,\n isLoading,\n disabled = false,\n size = \"medium\",\n disableClearable = false,\n variant = \"outlined\",\n placeholder,\n renderOption,\n}: SingleClientSelectorProps<T>) {\n const dataOptions = React.useMemo(\n () =>\n data?.map((value) => ({\n ...value,\n key: value.key || `key_${Math.random()}`,\n })) || [],\n [data]\n );\n\n const handleChange = (\n _event: React.SyntheticEvent,\n selected: T | null,\n onChange: (value: any) => void\n ) => {\n // اصلاح: بررسی null و undefined\n onChange(selected?.key ?? null);\n };\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field: { onChange, value, ref }, fieldState: { error } }) => {\n const computedValue = React.useMemo(() => {\n if (!value) return null;\n\n // اصلاح: برای single selector از === استفاده می‌کنیم\n return dataOptions.find(\n (option) => String(option.key) === String(value)\n )?.title\n ? dataOptions.find((option) => String(option.key) === String(value))\n : null;\n }, [value, dataOptions]);\n\n return (\n <Autocomplete\n disableClearable={disableClearable || isLoading}\n disabled={disabled || isLoading}\n size={size}\n options={dataOptions}\n sx={{ width: \"100%\" }}\n noOptionsText=\"داده‌ای برای نمایش وجود ندارد\"\n value={computedValue}\n onChange={(event, newValue) =>\n handleChange(event, newValue, onChange)\n }\n isOptionEqualToValue={(option, value) =>\n String(option.key) === String(value?.key)\n }\n getOptionLabel={(option) => {\n if (typeof option === \"string\") return option;\n if (option?.title) return String(option.title);\n return \"\";\n }}\n loading={isLoading}\n loadingText=\"در حال بارگذاری...\"\n renderOption={(props, option, state) => {\n if (renderOption) {\n return renderOption(props, option, state);\n }\n return (\n <li\n {...props}\n key={`${option.key}`}\n style={{ margin: 5, borderRadius: 3 }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n width: \"100%\",\n }}\n >\n <div style={{ flexDirection: \"column\", width: \"100%\" }}>\n <div style={{ fontWeight: \"normal\" }}>{option.title}</div>\n </div>\n </div>\n </li>\n );\n }}\n slots={{ popper: Popper }}\n slotProps={{\n popper: {\n modifiers: [\n {\n name: \"preventOverflow\",\n options: {\n boundary: \"window\",\n rootBoundary: \"viewport\",\n altBoundary: true,\n padding: 10,\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top\", \"bottom\"],\n },\n },\n ],\n },\n }}\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n error={!!error}\n helperText={error?.message}\n inputRef={ref}\n variant={variant}\n placeholder={placeholder}\n InputLabelProps={{ shrink: true }}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <React.Fragment>\n {isLoading ? (\n <CircularProgress color=\"primary\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </React.Fragment>\n ),\n }}\n />\n )}\n />\n );\n }}\n />\n );\n}\n"],"mappings":";AAAA,YAAY,WAAW;;;ACAvB,OAAO,kBAAkB;AACzB,OAAO,eAAsC;AAC7C,YAAYA,YAAW;AACvB,SAAkB,kBAAkB;AACpC,SAAS,UAAU,kBAAkB,cAAc;AACnD,SAAS,qBAAqB;AAC9B,SAAS,2BAA2B;AACpC,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AAmGlB,SAAR,mBAA0D;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,cACJ,MAAM,IAAI,CAAC,WAAW;AAAA,IACpB,GAAG;AAAA,IACH,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,CAAC;AAAA,EACxC,EAAE,KAAK,CAAC;AAEV,QAAM,kBACJ,YAAY,SAAS,IACjB;AAAA,IACA,EAAE,OAAO,2DAAc,KAAK,MAAM;AAAA,IAClC,EAAE,OAAO,kEAAgB,KAAK,WAAW;AAAA,IACzC,GAAG;AAAA,EACL,IACE,CAAC,GAAG,WAAW;AAErB,QAAM,eAAe,CACnB,QACA,UACA,aACG;AACH,QAAI,SAAS,KAAK,CAAC,SAAc,KAAK,QAAQ,KAAK,GAAG;AACpD,YAAM,WAAW,CAAC,GAAG,WAAW;AAChC,eAAS,SAAS,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC;AAAA,IAC3C,WAAW,SAAS,KAAK,CAAC,SAAc,KAAK,QAAQ,UAAU,GAAG;AAChE,eAAS,CAAC,CAAC;AAAA,IACb,OAAO;AACL,eAAS,SAAS,IAAI,CAAC,SAAc,KAAK,GAAG,CAAC;AAAA,IAChD;AAAA,EACF;AACA,QAAM,OAAO,qCAAC,uBAAoB,MAAM,IAAI;AAC5C,QAAM,cAAc,qCAAC,iBAAc,MAAM,IAAI;AAE7C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,OAAO,IAAI,GAAG,YAAY,EAAE,MAAM,EAAE,MAAM;AACtE,cAAM,gBAAsB,eAAQ,MAAM;AACxC,cAAI,MAAM,QAAQ,KAAK,KAAK,YAAY,SAAS,GAAG;AAClD,mBAAO,YAAY;AAAA,cAAO,CAAC,WACzB,MAAM,SAAS,OAAO,GAAG;AAAA,YAC3B;AAAA,UACF;AACA,iBAAO,CAAC;AAAA,QACV,GAAG,CAAC,OAAO,WAAW,CAAC;AAGvB,cAAM,kBAAwB,cAAY,IAAI;AAC9C,cAAM,CAAC,MAAM,OAAO,IAAU,gBAAS,KAAK;AAC5C,cAAM,aAAa,MAAM,QAAQ,IAAI;AACrC,cAAM,cAAc,MAAM,QAAQ,KAAK;AACvC,eACE;AAAA,UAAC;AAAA;AAAA,YACC,UAAQ;AAAA,YACR;AAAA,YACA,UAAU,YAAY;AAAA,YACtB;AAAA,YACA,sBAAoB;AAAA,YACpB,SAAS;AAAA,YACT,IAAI,EAAE,OAAO,OAAO;AAAA,YACpB,eAAc;AAAA,YACd,OAAO;AAAA,YACP,UAAU,CAAC,OAAOC,WAChB,aAAa,OAAOA,QAAc,QAAQ;AAAA,YAE5C,sBAAsB,CAAC,QAAQA,WAC7B,OAAO,OAAO,GAAG,MAAM,OAAOA,QAAO,GAAG;AAAA,YAE1C,gBAAgB,CAAC,WAAW,OAAO;AAAA,YACnC,SAAS;AAAA,YACT,aAAY;AAAA,YACZ;AAAA,YACA,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,KAAK;AAAA,YACL,cAAc,CAAC,OAAO,QAAQ,UAAU;AACtC,kBAAI,cAAc;AAChB,uBAAO,aAAa,OAAO,QAAQ,KAAK;AAAA,cAC1C;AAEA,kBAAI,WAAW;AACf,kBAAI,OAAO,QAAQ,OAAO;AACxB,2BACE;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM;AAAA,oBACN,OAAO,EAAE,YAAY,GAAG,OAAO,UAAU;AAAA;AAAA,gBAC3C;AAAA,cAEJ,WAAW,OAAO,QAAQ,YAAY;AACpC,2BACE;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM;AAAA,oBACN,OAAO,EAAE,YAAY,GAAG,OAAO,UAAU;AAAA;AAAA,gBAC3C;AAAA,cAEJ;AACA,qBACE;AAAA,gBAAC;AAAA;AAAA,kBACE,GAAG;AAAA,kBACJ,KAAK,GAAG,OAAO,GAAG;AAAA,kBAClB,OAAO,EAAE,QAAQ,GAAG,cAAc,EAAE;AAAA;AAAA,gBAEpC;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,sBACL,SAAS;AAAA,sBACT,eAAe;AAAA,sBACf,OAAO;AAAA,sBACP,YAAY;AAAA,oBACd;AAAA;AAAA,kBAEC,OAAO,QAAQ,SAAS,OAAO,QAAQ,aACtC,WAEA;AAAA,oBAAC;AAAA;AAAA,sBACC;AAAA,sBACA;AAAA,sBACA,OAAO,EAAE,YAAY,EAAE;AAAA,sBACvB,SAAS,MAAM;AAAA,sBACf,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE;AAAA;AAAA,kBAC9B;AAAA,kBAEF,qCAAC,SAAI,OAAO,EAAE,eAAe,OAAO,OAAO,OAAO,KAChD,qCAAC,SAAI,OAAO,EAAE,YAAY,SAAS,KAAI,OAAO,KAAM,CACtD;AAAA,gBACF;AAAA,cACF;AAAA,YAEJ;AAAA,YACA,YAAY,CAACA,WAAU;AACrB,kBAAIA,OAAM,WAAW,EAAG,QAAO;AAC/B,oBAAM,QAAQ,YAAY;AAC1B,oBAAM,UACJA,OAAM,WAAW,QACb,GAAGA,OAAM,MAAM,sFACf,GAAGA,OAAM,MAAM,0CAAY,KAAK;AAEtC,qBACE;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,QAAQ;AAAA,oBACR,WAAW,SAAS,UAAU,SAAS;AAAA,oBACvC,WAAW,SAAS,UAAU,SAAS;AAAA,oBACvC,UAAU;AAAA,oBACV,YAAY;AAAA,oBACZ,cAAc;AAAA,oBACd,OAAO;AAAA,oBACP,UAAU;AAAA;AAAA,kBACZ;AAAA,kBACA,SAAS;AAAA;AAAA,gBAET;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,sBACL,YAAY;AAAA,sBACZ,UAAU,SAAS,UAAU,KAAK;AAAA,sBAClC,UAAU;AAAA,sBACV,cAAc;AAAA,sBACd,YAAY;AAAA,sBACZ,SAAS;AAAA,sBACT,OAAO;AAAA,oBACT;AAAA,oBACA,OAAO;AAAA;AAAA,kBAEN;AAAA,gBACH;AAAA,cACF;AAAA,YAEJ;AAAA,YACA,OAAO,EAAE,QAAQ,OAAO;AAAA,YACxB,WAAW;AAAA,cACT,QAAQ;AAAA,gBACN,WAAW;AAAA,kBACT;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP,UAAU;AAAA,sBACV,cAAc;AAAA,sBACd,aAAa;AAAA,sBACb,SAAS;AAAA,oBACX;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP,oBAAoB,CAAC,OAAO,QAAQ;AAAA,oBACtC;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,aAAa,CAAC,WACZ;AAAA,cAAC;AAAA;AAAA,gBACE,GAAG;AAAA,gBACJ;AAAA,gBACA,OAAO,CAAC,CAAC;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA,YAAY,OAAO;AAAA,gBACnB,UAAU;AAAA,gBACV,iBAAiB,EAAE,QAAQ,KAAK;AAAA,gBAChC,YAAY;AAAA,kBACV,GAAG,OAAO;AAAA,kBACV,cACE,qCAAO,iBAAN,MACE,YACC,qCAAC,oBAAiB,OAAM,WAAU,MAAM,IAAI,IAC1C,MACH,OAAO,WAAW,YACrB;AAAA,gBAEJ;AAAA;AAAA,YACF;AAAA;AAAA,QAEJ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;;;ACnVA,OAAOC,mBAAkB;AACzB,OAAOC,gBAAe;AACtB,YAAYC,YAAW;AACvB,SAAkB,cAAAC,mBAAkB;AACpC,SAAS,oBAAAC,mBAAkB,UAAAC,eAAc;AAiE1B,SAAR,iBAAwD;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,mBAAmB;AAAA,EACnB;AACF,GAA+B;AAC7B,QAAM,cACJ,MAAM,IAAI,CAAC,WAAW;AAAA,IACpB,GAAG;AAAA,IACH,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,CAAC;AAAA,EACxC,EAAE,KAAK,CAAC;AAEV,QAAM,kBACJ,YAAY,SAAS,IACjB,CAAC,EAAE,OAAO,2DAAc,KAAK,MAAM,GAAQ,GAAG,WAAW,IACzD,CAAC,GAAG,WAAW;AAErB,QAAM,eAAe,CACnB,QACA,UACA,aACG;AACH,QAAI,SAAS,KAAK,CAAC,SAAc,KAAK,QAAQ,KAAK,GAAG;AACpD,YAAM,WAAW,CAAC,GAAG,WAAW;AAChC,eAAS,SAAS,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC;AAAA,IAC3C,OAAO;AACL,eAAS,SAAS,IAAI,CAAC,SAAc,KAAK,GAAG,CAAC;AAAA,IAChD;AAAA,EACF;AACA,SACE;AAAA,IAACF;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,OAAO,IAAI,GAAG,YAAY,EAAE,MAAM,EAAE,MAAM;AACtE,cAAM,gBAAsB,eAAQ,MAAM;AACxC,cAAI,MAAM,QAAQ,KAAK,KAAK,YAAY,SAAS,GAAG;AAClD,mBAAO,YAAY;AAAA,cAAO,CAAC,WACzB,MAAM,SAAS,OAAO,GAAG;AAAA,YAC3B;AAAA,UACF;AACA,iBAAO,CAAC;AAAA,QACV,GAAG,CAAC,OAAO,WAAW,CAAC;AAEvB,eACE;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,UAAQ;AAAA,YACR;AAAA,YACA,UAAU,YAAY;AAAA,YACtB;AAAA,YACA,sBAAoB;AAAA,YACpB,SAAS;AAAA,YACT,IAAI,EAAE,OAAO,OAAO;AAAA,YACpB,eAAc;AAAA,YACd,OAAO;AAAA,YACP,UAAU,CAAC,OAAOM,WAChB,aAAa,OAAOA,QAAc,QAAQ;AAAA,YAE5C,sBAAsB,CAAC,QAAQA,WAC7B,OAAO,OAAO,GAAG,MAAM,OAAOA,QAAO,GAAG;AAAA,YAE1C,gBAAgB,CAAC,WAAW,OAAO;AAAA,YACnC,SAAS;AAAA,YACT,aAAY;AAAA,YACZ,cAAc,CAAC,OAAO,WAAW;AAC/B,kBAAI,cAAc;AAChB,uBAAO,aAAa,OAAO,MAAM;AAAA,cACnC;AACA,qBACE;AAAA,gBAAC;AAAA;AAAA,kBACE,GAAG;AAAA,kBACJ,KAAK,GAAG,OAAO,GAAG;AAAA,kBAClB,OAAO,EAAE,QAAQ,GAAG,cAAc,EAAE;AAAA;AAAA,gBAEpC;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,sBACL,SAAS;AAAA,sBACT,eAAe;AAAA,sBACf,OAAO;AAAA,oBACT;AAAA;AAAA,kBAEA,qCAAC,SAAI,OAAO,EAAE,eAAe,UAAU,OAAO,OAAO,KACnD,qCAAC,SAAI,OAAO,EAAE,YAAY,SAAS,KAAI,OAAO,KAAM,CACtD;AAAA,gBACF;AAAA,cACF;AAAA,YAEJ;AAAA,YACA,OAAO,EAAE,QAAQD,QAAO;AAAA,YACxB,WAAW;AAAA,cACT,QAAQ;AAAA,gBACN,WAAW;AAAA,kBACT;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP,UAAU;AAAA,sBACV,cAAc;AAAA,sBACd,aAAa;AAAA,sBACb,SAAS;AAAA,oBACX;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP,oBAAoB,CAAC,OAAO,QAAQ;AAAA,oBACtC;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,aAAa,CAAC,WACZ;AAAA,cAACJ;AAAA,cAAA;AAAA,gBACE,GAAG;AAAA,gBACJ;AAAA,gBACA,OAAO,CAAC,CAAC;AAAA,gBACT,YAAY,OAAO;AAAA,gBACnB,UAAU;AAAA,gBACV,iBAAiB,EAAE,QAAQ,KAAK;AAAA,gBAChC,YAAY;AAAA,kBACV,GAAG,OAAO;AAAA,kBACV,cACE,qCAAO,iBAAN,MACE,YACC,qCAACG,mBAAA,EAAiB,OAAM,WAAU,MAAM,IAAI,IAC1C,MACH,OAAO,WAAW,YACrB;AAAA,gBAEJ;AAAA;AAAA,YACF;AAAA;AAAA,QAEJ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;;;ACjNA,SAAS,oBAAAG,mBAAkB,UAAAC,eAAc;AACzC,OAAOC,mBAAkB;AACzB,OAAOC,gBAAe;AACtB,YAAYC,YAAW;AACvB,SAAkB,cAAAC,mBAAkB;AA8ErB,SAAR,mBAAuE;AAAA,EAC5E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAEF,GAAkC;AAChC,QAAM,cACJ,MAAM,IAAI,CAAC,WAAc;AAAA,IACvB,GAAG;AAAA,EACL,EAAE,KAAK,CAAC;AAGV,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,OAAO,IAAI,GAAG,YAAY,EAAE,MAAM,EAAE,MAAM;AACtE,cAAM,iBAAuB;AAAA,UAC3B,MAAM,YAAY,KAAK,CAAC,MAAM,GAAG,OAAO,KAAK,KAAK;AAAA,UAClD,CAAC,OAAO,WAAW;AAAA,QACrB;AAEA,eACE;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,UAAU;AAAA,YACV,kBAAkB,oBAAoB;AAAA,YACtC;AAAA,YACA,eAAa;AAAA,YACb;AAAA,YACA,sBAAsB;AAAA,YACtB,SAAS;AAAA,YACT,YAAY,eAAe,aAAa,KAAK,IAAI;AAAA,YACjD,eAAe,CAAC,GAAG,UAAU,WAAW;AACtC,wBAAU,WAAW,SAAS,IAAI;AAElC,8BAAgB,QAAQ;AAAA,YAC1B;AAAA,YACA,IAAI;AAAA,cACF,OAAO;AAAA,YACT;AAAA,YACA,eAAc;AAAA,YACd,OAAO;AAAA,YACP,UAAU,CAAC,GAAGI,WAAU;AAEtB,kBAAI,OAAOA,WAAU,UAAU;AAG7B,yBAASA,MAAY;AACrB,gCAAgBA,MAAK;AAAA,cACvB,WAESA,UAAS,OAAOA,WAAU,UAAU;AAC3C,kCACI,gBAAgBA,QAAO,QAAQ,IAC/B,SAASA,OAAM,GAAG;AACtB,gCAAgB,OAAOA,OAAM,KAAK,CAAC;AAAA,cACrC,OAEK;AACH,yBAAS,IAAI;AACb,gCAAgB,EAAE;AAAA,cACpB;AAAA,YACF;AAAA,YACA,gBAAgB,CAAC,WAAW;AAC1B,kBAAI,OAAO,WAAW,SAAU,QAAO;AACvC,kBAAI,QAAQ,MAAO,QAAO,OAAO,OAAO,KAAK;AAC7C,qBAAO;AAAA,YACT;AAAA,YACA,SAAS;AAAA,YACT,aAAY;AAAA,YACZ,cAAc,CAAC,OAAO,WAAW;AAC/B,kBAAI,cAAc;AAChB,uBAAO,aAAa,OAAO,MAAM;AAAA,cACnC;AACA,qBACE;AAAA,gBAAC;AAAA;AAAA,kBACE,GAAG;AAAA,kBACJ,KAAK,GAAG,OAAO,GAAG;AAAA,kBAClB,OAAO,EAAE,QAAQ,GAAG,cAAc,EAAE;AAAA;AAAA,gBAEpC;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,sBACL,SAAS;AAAA,sBACT,eAAe;AAAA,sBACf,OAAO;AAAA,oBACT;AAAA;AAAA,kBAEA,qCAAC,SAAI,OAAO,EAAE,eAAe,UAAU,OAAO,OAAO,KACnD,qCAAC,SAAI,OAAO,EAAE,YAAY,SAAS,KAAI,OAAO,KAAM,CACtD;AAAA,gBACF;AAAA,cACF;AAAA,YAEJ;AAAA,YACA,OAAO,EAAE,QAAQL,QAAO;AAAA,YACxB,WAAW;AAAA,cACT,QAAQ;AAAA,gBACN,WAAW;AAAA,kBACT;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP,UAAU;AAAA,sBACV,cAAc;AAAA,sBACd,aAAa;AAAA,sBACb,SAAS;AAAA,oBACX;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP,oBAAoB,CAAC,OAAO,QAAQ;AAAA;AAAA,oBACtC;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,aAAa,CAAC,WACZ;AAAA,cAACE;AAAA,cAAA;AAAA,gBACE,GAAG;AAAA,gBACJ;AAAA,gBACA,OAAO,CAAC,CAAC;AAAA,gBACT,YAAY,OAAO;AAAA,gBACnB,UAAU;AAAA,gBACV,iBAAiB,EAAE,QAAQ,KAAK;AAAA,gBAChC,YAAY;AAAA,kBACV,GAAG,OAAO;AAAA,kBACV,cACE,qCAAO,iBAAN,MACE,YACC,qCAACH,mBAAA,EAAiB,OAAM,WAAU,MAAM,IAAI,IAC1C,MACH,OAAO,WAAW,YACrB;AAAA,gBAEJ;AAAA;AAAA,YACF;AAAA;AAAA,QAEJ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;;;AC1OA,SAAS,oBAAAO,mBAAkB,UAAAC,eAAc;AACzC,OAAOC,mBAEA;AACP,OAAOC,gBAAsC;AAC7C,YAAYC,YAAW;AACvB,SAAkB,cAAAC,mBAAkB;AA8HrB,SAAR,qBAEL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,OAAO;AAAA,EACP,mBAAmB;AAAA,EACnB,UAAU;AAAA,EACV;AAAA,EACA;AACF,GAAiC;AAC/B,QAAM,cAAoB;AAAA,IACxB,MACE,MAAM,IAAI,CAAC,WAAW;AAAA,MACpB,GAAG;AAAA,MACH,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,CAAC;AAAA,IACxC,EAAE,KAAK,CAAC;AAAA,IACV,CAAC,IAAI;AAAA,EACP;AAEA,QAAM,eAAe,CACnB,QACA,UACA,aACG;AAEH,aAAS,UAAU,OAAO,IAAI;AAAA,EAChC;AAEA,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,OAAO,IAAI,GAAG,YAAY,EAAE,MAAM,EAAE,MAAM;AACtE,cAAM,gBAAsB,eAAQ,MAAM;AACxC,cAAI,CAAC,MAAO,QAAO;AAGnB,iBAAO,YAAY;AAAA,YACjB,CAAC,WAAW,OAAO,OAAO,GAAG,MAAM,OAAO,KAAK;AAAA,UACjD,GAAG,QACC,YAAY,KAAK,CAAC,WAAW,OAAO,OAAO,GAAG,MAAM,OAAO,KAAK,CAAC,IACjE;AAAA,QACN,GAAG,CAAC,OAAO,WAAW,CAAC;AAEvB,eACE;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,kBAAkB,oBAAoB;AAAA,YACtC,UAAU,YAAY;AAAA,YACtB;AAAA,YACA,SAAS;AAAA,YACT,IAAI,EAAE,OAAO,OAAO;AAAA,YACpB,eAAc;AAAA,YACd,OAAO;AAAA,YACP,UAAU,CAAC,OAAO,aAChB,aAAa,OAAO,UAAU,QAAQ;AAAA,YAExC,sBAAsB,CAAC,QAAQI,WAC7B,OAAO,OAAO,GAAG,MAAM,OAAOA,QAAO,GAAG;AAAA,YAE1C,gBAAgB,CAAC,WAAW;AAC1B,kBAAI,OAAO,WAAW,SAAU,QAAO;AACvC,kBAAI,QAAQ,MAAO,QAAO,OAAO,OAAO,KAAK;AAC7C,qBAAO;AAAA,YACT;AAAA,YACA,SAAS;AAAA,YACT,aAAY;AAAA,YACZ,cAAc,CAAC,OAAO,QAAQ,UAAU;AACtC,kBAAI,cAAc;AAChB,uBAAO,aAAa,OAAO,QAAQ,KAAK;AAAA,cAC1C;AACA,qBACE;AAAA,gBAAC;AAAA;AAAA,kBACE,GAAG;AAAA,kBACJ,KAAK,GAAG,OAAO,GAAG;AAAA,kBAClB,OAAO,EAAE,QAAQ,GAAG,cAAc,EAAE;AAAA;AAAA,gBAEpC;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,sBACL,SAAS;AAAA,sBACT,eAAe;AAAA,sBACf,OAAO;AAAA,oBACT;AAAA;AAAA,kBAEA,qCAAC,SAAI,OAAO,EAAE,eAAe,UAAU,OAAO,OAAO,KACnD,qCAAC,SAAI,OAAO,EAAE,YAAY,SAAS,KAAI,OAAO,KAAM,CACtD;AAAA,gBACF;AAAA,cACF;AAAA,YAEJ;AAAA,YACA,OAAO,EAAE,QAAQL,QAAO;AAAA,YACxB,WAAW;AAAA,cACT,QAAQ;AAAA,gBACN,WAAW;AAAA,kBACT;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP,UAAU;AAAA,sBACV,cAAc;AAAA,sBACd,aAAa;AAAA,sBACb,SAAS;AAAA,oBACX;AAAA,kBACF;AAAA,kBACA;AAAA,oBACE,MAAM;AAAA,oBACN,SAAS;AAAA,sBACP,oBAAoB,CAAC,OAAO,QAAQ;AAAA,oBACtC;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,aAAa,CAAC,WACZ;AAAA,cAACE;AAAA,cAAA;AAAA,gBACE,GAAG;AAAA,gBACJ;AAAA,gBACA,OAAO,CAAC,CAAC;AAAA,gBACT,YAAY,OAAO;AAAA,gBACnB,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA,iBAAiB,EAAE,QAAQ,KAAK;AAAA,gBAChC,YAAY;AAAA,kBACV,GAAG,OAAO;AAAA,kBACV,cACE,qCAAO,iBAAN,MACE,YACC,qCAACH,mBAAA,EAAiB,OAAM,WAAU,MAAM,IAAI,IAC1C,MACH,OAAO,WAAW,YACrB;AAAA,gBAEJ;AAAA;AAAA,YACF;AAAA;AAAA,QAEJ;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;","names":["React","value","Autocomplete","TextField","React","Controller","CircularProgress","Popper","value","CircularProgress","Popper","Autocomplete","TextField","React","Controller","value","CircularProgress","Popper","Autocomplete","TextField","React","Controller","value"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mamrp/components",
3
- "version": "1.7.3",
3
+ "version": "1.7.4",
4
4
  "description": "A comprehensive suite of reusable React components.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",