persian-number-input 4.0.5 → 4.0.6

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.
@@ -1,10 +1,19 @@
1
1
  import React from 'react';
2
2
  import type { TransformNumberOptions } from '../utils/transformNumber';
3
- interface PersianNumberInputProps extends TransformNumberOptions, Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value'> {
4
- onValueChange?: (value: string | undefined) => void;
3
+ interface PersianNumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'min' | 'max'>, // min/max از نوع input حذف شد چون خودمان هندل می‌کنیم
4
+ Omit<TransformNumberOptions, 'maxDecimals'> {
5
+ /** مقدار اولیه */
5
6
  initialValue?: number | string;
7
+ /** تابعی که با تغییر مقدار خام (انگلیسی و بدون فرمت) فراخوانی می‌شود */
8
+ onValueChange?: (value: string | undefined) => void;
9
+ /** حداقل مقدار مجاز (اعشار پشتیبانی می‌شود) */
6
10
  min?: number;
11
+ /** حداکثر مقدار مجاز (اعشار پشتیبانی می‌شود) */
7
12
  max?: number;
13
+ /** حداکثر تعداد ارقام اعشار مجاز (undefined یعنی نامحدود) */
14
+ maxDecimals?: number;
15
+ /** کاراکتری که کاربر برای وارد کردن اعشار استفاده می‌کند (پیش‌فرض '.') */
16
+ inputDecimalSeparator?: string;
8
17
  }
9
18
  declare const PersianNumberInput: React.FC<PersianNumberInputProps>;
10
19
  export default PersianNumberInput;
@@ -1 +1 @@
1
- {"version":3,"file":"PersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/components/PersianNumberInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGvE,UAAU,uBACN,SAAQ,sBAAsB,EAC9B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAEvE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAiDzD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"PersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/components/PersianNumberInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGvE,UAAU,uBACN,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,sDAAsD;AACvJ,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC;IAE3C,kBAAkB;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,wEAAwE;IACxE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAqDzD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -15,32 +15,38 @@ const jsx_runtime_1 = require("react/jsx-runtime");
15
15
  const usePersianNumberInput_1 = require("../hooks/usePersianNumberInput");
16
16
  const PersianNumberInput = (_a) => {
17
17
  var {
18
- // جدا کردن آپشن های هوک از بقیه پراپ های input
19
- initialValue, separatorCount, separatorChar, locale, maxDecimals, showZero, onValueChange, min, max } = _a,
20
- // بقیه پراپ ها (مثل className, style, placeholder, id و ...) به input اصلی منتقل می شوند
21
- restInputProps = __rest(_a, ["initialValue", "separatorCount", "separatorChar", "locale", "maxDecimals", "showZero", "onValueChange", "min", "max"]);
22
- // اعتبارسنجی پراپ‌ها
18
+ // جدا کردن آپشن های هوک و نمایش از بقیه پراپ های input
19
+ initialValue, separatorCount, separatorChar, locale, showZero, onValueChange, min, max, maxDecimals, inputDecimalSeparator } = _a, // پراپ جدید
20
+ // بقیه پراپ ها (مثل className, style, placeholder, id, disabled و ...) به input اصلی منتقل می شوند
21
+ restInputProps = __rest(_a, ["initialValue", "separatorCount", "separatorChar", "locale", "showZero", "onValueChange", "min", "max", "maxDecimals", "inputDecimalSeparator"]);
22
+ // اعتبارسنجی پراپ‌ها (اختیاری ولی خوب)
23
23
  if (maxDecimals !== undefined && maxDecimals < 0) {
24
24
  console.warn('maxDecimals باید غیرمنفی باشد');
25
25
  maxDecimals = 0;
26
26
  }
27
27
  if (min !== undefined && max !== undefined && min > max) {
28
28
  console.warn('min نباید بزرگ‌تر از max باشد');
29
+ // شاید بهتر باشد یکی را نادیده گرفت یا خطا داد؟ فعلا فقط هشدار.
29
30
  }
30
- const { value: formattedValue, onChange, rawValue, // می توانید rawValue را هم برگردانید اگر لازم است
31
+ const { value: formattedValue, // مقدار فرمت شده برای نمایش
32
+ onChange, // تابع onChange برای input
33
+ // setValue, // اگر نیاز به تنظیم مقدار از بیرون دارید
34
+ // rawValue, // مقدار خام انگلیسی بدون فرمت (اگر لازم دارید)
31
35
  } = (0, usePersianNumberInput_1.usePersianNumberInput)({
32
36
  initialValue,
33
37
  separatorCount,
34
38
  separatorChar,
35
39
  locale,
36
- maxDecimals,
37
40
  showZero,
38
41
  onValueChange,
39
42
  min,
40
- max
43
+ max,
44
+ maxDecimals,
45
+ inputDecimalSeparator, // پاس دادن پراپ جدید به هوک
41
46
  });
42
- return ((0, jsx_runtime_1.jsx)("input", Object.assign({ type: "text" // یا "tel" هم گاهی استفاده می شود
43
- , inputMode: "decimal", dir: "ltr" // معمولا برای اعداد بهتر است
47
+ return ((0, jsx_runtime_1.jsx)("input", Object.assign({ type: "text" // استفاده از text به جای number برای کنترل کامل فرمت
48
+ , inputMode: "decimal" // کیبورد مناسب در موبایل را نشان می‌دهد
49
+ , dir: "ltr" // برای اعداد معمولا ltr بهتر است، حتی در متن فارسی
44
50
  }, restInputProps, { value: formattedValue, onChange: onChange })));
45
51
  };
46
52
  exports.default = PersianNumberInput;
@@ -1 +1 @@
1
- {"version":3,"file":"PersianNumberInput.js","sourceRoot":"","sources":["../../src/components/PersianNumberInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,0EAAuE;AAcvE,MAAM,kBAAkB,GAAsC,CAAC,EAa9D,EAAE,EAAE;QAb0D;IAC3D,+CAA+C;IAC/C,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,EACN,WAAW,EACX,QAAQ,EACR,aAAa,EACb,GAAG,EACH,GAAG,OAGN;IAFG,yFAAyF;IACtF,cAAc,cAZ0C,uHAa9D,CADoB;IAEjB,qBAAqB;IACrB,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,WAAW,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,EACF,KAAK,EAAE,cAAc,EACrB,QAAQ,EACR,QAAQ,EAAE,kDAAkD;MAC/D,GAAG,IAAA,6CAAqB,EAAC;QACtB,YAAY;QACZ,cAAc;QACd,aAAa;QACb,MAAM;QACN,WAAW;QACX,QAAQ;QACR,aAAa;QACb,GAAG;QACH,GAAG;KACN,CAAC,CAAC;IAEH,OAAO,CACH,gDACI,IAAI,EAAC,MAAM,CAAC,kCAAkC;UAC9C,SAAS,EAAC,SAAS,EACnB,GAAG,EAAC,KAAK,CAAC,6BAA6B;QACnC,cAAc,IAClB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,QAAQ,IACpB,CACL,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"PersianNumberInput.js","sourceRoot":"","sources":["../../src/components/PersianNumberInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,0EAAuE;AAuBvE,MAAM,kBAAkB,GAAsC,CAAC,EAc9D,EAAE,EAAE;QAd0D;IAC3D,uDAAuD;IACvD,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,EACN,QAAQ,EACR,aAAa,EACb,GAAG,EACH,GAAG,EACH,WAAW,EACX,qBAAqB,OAGxB,EAH0B,YAAY;IACnC,mGAAmG;IAChG,cAAc,cAb0C,gJAc9D,CADoB;IAEjB,uCAAuC;IACvC,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,WAAW,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC9C,gEAAgE;IACpE,CAAC;IAED,MAAM,EACF,KAAK,EAAE,cAAc,EAAE,4BAA4B;IACnD,QAAQ,EAAc,2BAA2B;IACjD,+DAA+D;IAC/D,qEAAqE;MACxE,GAAG,IAAA,6CAAqB,EAAC;QACtB,YAAY;QACZ,cAAc;QACd,aAAa;QACb,MAAM;QACN,QAAQ;QACR,aAAa;QACb,GAAG;QACH,GAAG;QACH,WAAW;QACX,qBAAqB,EAAE,4BAA4B;KACtD,CAAC,CAAC;IAEH,OAAO,CACH,gDACI,IAAI,EAAC,MAAM,CAAC,qDAAqD;UACjE,SAAS,EAAC,SAAS,CAAC,wCAAwC;UAC5D,GAAG,EAAC,KAAK,CAAC,mDAAmD;QACzD,cAAc,IAClB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,QAAQ,IACpB,CACL,CAAC;AACN,CAAC,CAAC;AAEF,kBAAe,kBAAkB,CAAC"}
@@ -1,17 +1,25 @@
1
1
  import React from 'react';
2
2
  import { TransformNumberOptions } from '../utils/transformNumber';
3
- interface UsePersianNumberInputProps extends TransformNumberOptions {
3
+ interface UsePersianNumberInputProps extends Omit<TransformNumberOptions, 'maxDecimals'> {
4
4
  initialValue?: number | string;
5
5
  onValueChange?: (value: string | undefined) => void;
6
6
  min?: number;
7
7
  max?: number;
8
+ /** حداکثر تعداد ارقام اعشار مجاز. undefined یعنی نامحدود. */
9
+ maxDecimals?: number;
10
+ /** کاراکتری که کاربر برای وارد کردن اعشار استفاده می‌کند (مثلا '.' یا '/') */
11
+ inputDecimalSeparator?: string;
8
12
  }
9
13
  interface UsePersianNumberInputReturn {
14
+ /** مقدار فرمت شده برای نمایش در input */
10
15
  value: string;
16
+ /** هندلر onChange برای input */
11
17
  onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
18
+ /** تابعی برای تنظیم مقدار به صورت برنامه‌نویسی */
12
19
  setValue: (newValue: number | string | undefined) => void;
20
+ /** مقدار عددی خام (رشته انگلیسی بدون جداکننده گروه) */
13
21
  rawValue: string | undefined;
14
22
  }
15
- export declare const usePersianNumberInput: ({ initialValue, separatorCount, separatorChar, locale, maxDecimals, showZero, onValueChange, min, max, }?: UsePersianNumberInputProps) => UsePersianNumberInputReturn;
23
+ export declare const usePersianNumberInput: ({ initialValue, separatorCount, separatorChar, locale, showZero, onValueChange, min, max, maxDecimals, inputDecimalSeparator, }?: UsePersianNumberInputProps) => UsePersianNumberInputReturn;
16
24
  export {};
17
25
  //# sourceMappingURL=usePersianNumberInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AACA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAmB,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGnF,UAAU,0BAA2B,SAAQ,sBAAsB;IACjE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,2BAA2B;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC/D,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAWD,eAAO,MAAM,qBAAqB,GAAI,2GAUnC,0BAA+B,KAAG,2BA4FpC,CAAC"}
1
+ {"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AACA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAEzE,OAAO,EAAmB,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGnF,UAAU,0BAA2B,SAAQ,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC;IACtF,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,UAAU,2BAA2B;IACnC,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC/D,kDAAkD;IAClD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC1D,uDAAuD;IACvD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,eAAO,MAAM,qBAAqB,GAAI,kIAWnC,0BAA+B,KAAG,2BAiIpC,CAAC"}
@@ -6,107 +6,113 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.usePersianNumberInput = void 0;
7
7
  // hooks/usePersianNumberInput.ts
8
8
  const react_1 = require("react");
9
- const decimal_js_1 = __importDefault(require("decimal.js"));
9
+ const decimal_js_1 = __importDefault(require("decimal.js")); // اطمینان از نصب: npm install decimal.js @types/decimal.js
10
10
  const transformNumber_1 = require("../utils/transformNumber");
11
- const digitUtils_1 = require("../utils/digitUtils");
12
- // اگر maxDecimals تعریف نشده باشد، اعشار حفظ می‌شود
13
- const roundToDecimals = (value, maxDecimals) => {
14
- if (!value || !value.includes('.') || maxDecimals == null)
15
- return value;
16
- const [integerPart, fractionalPart] = value.split('.');
17
- if (maxDecimals === 0)
18
- return integerPart;
19
- const trimmedFractional = fractionalPart.slice(0, maxDecimals);
20
- return trimmedFractional ? `${integerPart}.${trimmedFractional}` : integerPart;
21
- };
22
- const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar = ',', locale = 'fa', maxDecimals, // undefined یعنی نامحدود
23
- showZero = false, onValueChange, min, max, } = {}) => {
24
- const [rawValue, setRawValue] = (0, react_1.useState)(() => {
25
- if (initialValue == null)
11
+ const digitUtils_1 = require("../utils/digitUtils"); // roundToDecimals هم ایمپورت شود
12
+ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar = ',', locale = 'fa', showZero = false, onValueChange, min, max, maxDecimals, // می‌تواند undefined باشد
13
+ inputDecimalSeparator = '.', // پیش‌فرض نقطه است
14
+ } = {}) => {
15
+ const getSanitizedAndRoundedValue = (0, react_1.useCallback)((val) => {
16
+ if (val === null || val === undefined)
26
17
  return undefined;
27
- let sanitized = (0, digitUtils_1.sanitizeNumericInput)(String(initialValue));
28
- sanitized = roundToDecimals(sanitized, maxDecimals);
29
- if (sanitized) {
18
+ let sanitized = (0, digitUtils_1.sanitizeNumericInput)(String(val), inputDecimalSeparator);
19
+ // اجازه به مقادیر بینابینی مثل '-' یا '.' یا '-.'
20
+ if (sanitized === '-' || sanitized === '.' || sanitized === '-.') {
21
+ // اگر فقط همین‌ها بودند، فعلا اجازه عبور بده
22
+ // ولی اگر صفر نباید نشان داده شود، بعدا undefined می‌شوند
23
+ }
24
+ else if (sanitized) {
30
25
  try {
31
- const numericValue = new decimal_js_1.default(sanitized);
32
- if ((min !== undefined && numericValue.lt(min)) ||
33
- (max !== undefined && numericValue.gt(max))) {
34
- return undefined;
26
+ // قبل از گرد کردن، محدوده را چک کن
27
+ // توجه: Decimal.js با '.' و '-.' مشکلی ندارد ولی با '-' خالی خطا می‌دهد
28
+ if (sanitized !== '-') {
29
+ const numericValue = new decimal_js_1.default(sanitized);
30
+ if ((min !== undefined && numericValue.lt(min)) ||
31
+ (max !== undefined && numericValue.gt(max))) {
32
+ // اگر خارج از محدوده است، مقدار قبلی را برگردان یا خالی کن؟
33
+ // فعلا خالی برمی‌گردانیم تا از تنظیم مقدار نامعتبر جلوگیری شود
34
+ console.warn(`Value ${sanitized} is out of range [${min}, ${max}]`);
35
+ return undefined; // یا شاید مقدار قبلی؟ rawValue?
36
+ }
35
37
  }
38
+ // حالا گرد کردن را انجام بده
39
+ // نکته: roundToDecimals باید بعد از چک کردن min/max باشد
40
+ sanitized = (0, digitUtils_1.roundToDecimals)(sanitized, maxDecimals);
36
41
  }
37
42
  catch (error) {
38
- console.warn(`Invalid initial value: ${sanitized}`, error);
39
- return undefined;
43
+ console.warn(`Invalid numeric value for range check or rounding: ${sanitized}`, error);
44
+ // اگر مقدار sanitized معتبر نبود (مثلا فقط '-') خالی برگردان
45
+ if (sanitized !== '-')
46
+ return undefined;
47
+ // در غیر اینصورت، خود '-' یا '.' را موقتا نگه دار
40
48
  }
41
49
  }
42
- if (parseFloat(sanitized) === 0 && !showZero && sanitized !== '0') {
50
+ else {
51
+ // اگر sanitize خالی برگرداند
52
+ return undefined;
53
+ }
54
+ // مدیریت showZero
55
+ // توجه: parseFloat('.') یا parseFloat('-.' ) برابر NaN است
56
+ // parseFloat('-') برابر NaN است
57
+ const numericRepresentation = parseFloat(sanitized);
58
+ if (!showZero && numericRepresentation === 0 && sanitized !== '0.' && sanitized !== '-0.') {
59
+ // اگر مقدار صفر است و نباید نمایش داده شود
60
+ // مگر اینکه کاربر در حال تایپ اعشار صفر باشد (مثل 0.)
43
61
  return undefined;
44
62
  }
45
- return sanitized || undefined;
46
- });
63
+ // اگر مقدار فقط '-' یا '.' یا '-.' است و showZero=false، خالی برگردان
64
+ if (!showZero && (sanitized === '-' || sanitized === '.' || sanitized === '-.')) {
65
+ return undefined;
66
+ }
67
+ return sanitized || undefined; // اطمینان از اینکه '' به undefined تبدیل شود
68
+ }, [inputDecimalSeparator, min, max, maxDecimals, showZero]);
69
+ const [rawValue, setRawValue] = (0, react_1.useState)(() => getSanitizedAndRoundedValue(initialValue));
70
+ // برای همگام‌سازی با initialValue در صورت تغییر خارجی
71
+ (0, react_1.useEffect)(() => {
72
+ setRawValue(getSanitizedAndRoundedValue(initialValue));
73
+ }, [initialValue, getSanitizedAndRoundedValue]);
47
74
  const displayValue = (0, react_1.useMemo)(() => {
48
- const options = { separatorCount, separatorChar, locale, maxDecimals, showZero };
49
- if (rawValue === undefined) {
50
- return showZero ? (0, transformNumber_1.transformNumber)('0', options) : '';
75
+ const options = { separatorCount, separatorChar, locale, showZero, maxDecimals /* پاس دادن maxDecimals به transformNumber */ };
76
+ if (rawValue === undefined || rawValue === '' || rawValue === '-') {
77
+ // اگر خام undefined یا خالی یا فقط منفی است
78
+ // transformNumber خودش showZero را هندل می‌کند
79
+ return (0, transformNumber_1.transformNumber)(rawValue, options);
80
+ }
81
+ // اگر rawValue فقط نقطه است (مثلا '.') یا '-.'
82
+ if (rawValue === '.' || rawValue === '-.') {
83
+ // نمایش مناسب بده (مثلا ۰٫ یا -۰٫)
84
+ const base = rawValue.startsWith('-') ? '-0' : '0';
85
+ // transformNumber خودش به درستی نقطه را محلی می‌کند
86
+ return (0, transformNumber_1.transformNumber)(`${base}.`, options);
51
87
  }
52
88
  return (0, transformNumber_1.transformNumber)(rawValue, options);
53
- }, [rawValue, separatorCount, separatorChar, locale, maxDecimals, showZero]);
89
+ }, [rawValue, separatorCount, separatorChar, locale, showZero, maxDecimals]);
54
90
  const handleChange = (0, react_1.useCallback)((event) => {
55
91
  const inputValue = event.target.value;
56
- let sanitizedValue = (0, digitUtils_1.sanitizeNumericInput)(inputValue);
57
- if (sanitizedValue !== rawValue) {
58
- sanitizedValue = roundToDecimals(sanitizedValue, maxDecimals);
59
- let valueToSet = sanitizedValue;
60
- if (sanitizedValue) {
61
- try {
62
- const numericValue = new decimal_js_1.default(sanitizedValue);
63
- if ((min !== undefined && numericValue.lt(min)) ||
64
- (max !== undefined && numericValue.gt(max))) {
65
- return; // خارج از محدوده
66
- }
67
- }
68
- catch (error) {
69
- console.warn(`Invalid input value: ${sanitizedValue}`, error);
70
- return;
71
- }
72
- }
73
- if (parseFloat(sanitizedValue) === 0 && !showZero && sanitizedValue !== '0.') {
74
- valueToSet = undefined;
92
+ const newRawValue = getSanitizedAndRoundedValue(inputValue);
93
+ // فقط اگر مقدار خام واقعا تغییر کرده، آپدیت کن
94
+ // این مقایسه مهم است تا از لوپ‌های آپدیت ناخواسته جلوگیری شود
95
+ if (newRawValue !== rawValue) {
96
+ setRawValue(newRawValue);
97
+ if (onValueChange) {
98
+ onValueChange(newRawValue);
75
99
  }
76
- setRawValue(valueToSet);
77
- if (onValueChange)
78
- onValueChange(valueToSet);
79
100
  }
80
- }, [rawValue, onValueChange, showZero, min, max, maxDecimals]);
101
+ // حتی اگر مقدار خام تغییر نکرد، ممکن است کاربر فقط جداکننده تایپ کرده باشد
102
+ // و ما نیاز به آپدیت نمایش داریم (مثلا از ۱۵ به ۱۵٫)
103
+ // اما useMemo باید این را هندل کند. اگر rawValue تغییر نکند، displayValue هم نباید تغییر کند
104
+ // مگر اینکه منطق getSanitizedAndRoundedValue تغییر کرده باشد.
105
+ // برای اطمینان، شاید لازم باشد state نمایش را جداگانه مدیریت کرد؟ فعلا نه.
106
+ }, [rawValue, getSanitizedAndRoundedValue, onValueChange]);
81
107
  const handleSetValue = (0, react_1.useCallback)((newValue) => {
82
- if (newValue == null) {
83
- setRawValue(undefined);
84
- if (onValueChange)
85
- onValueChange(undefined);
86
- return;
87
- }
88
- let sanitizedValue = (0, digitUtils_1.sanitizeNumericInput)(String(newValue));
89
- sanitizedValue = roundToDecimals(sanitizedValue, maxDecimals);
90
- if (sanitizedValue) {
91
- try {
92
- const numericValue = new decimal_js_1.default(sanitizedValue);
93
- if ((min !== undefined && numericValue.lt(min)) ||
94
- (max !== undefined && numericValue.gt(max))) {
95
- return;
96
- }
97
- }
98
- catch (error) {
99
- console.warn(`Invalid set value: ${sanitizedValue}`, error);
100
- return;
108
+ const newRawValue = getSanitizedAndRoundedValue(newValue);
109
+ if (newRawValue !== rawValue) {
110
+ setRawValue(newRawValue);
111
+ if (onValueChange) {
112
+ onValueChange(newRawValue);
101
113
  }
102
114
  }
103
- const valueToSet = parseFloat(sanitizedValue) === 0 && !showZero && sanitizedValue !== '0.'
104
- ? undefined
105
- : sanitizedValue;
106
- setRawValue(valueToSet);
107
- if (onValueChange)
108
- onValueChange(valueToSet);
109
- }, [onValueChange, showZero, min, max, maxDecimals]);
115
+ }, [rawValue, getSanitizedAndRoundedValue, onValueChange]);
110
116
  return { value: displayValue, onChange: handleChange, setValue: handleSetValue, rawValue };
111
117
  };
112
118
  exports.usePersianNumberInput = usePersianNumberInput;
@@ -1 +1 @@
1
- {"version":3,"file":"usePersianNumberInput.js","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePersianNumberInput.js","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"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"}
@@ -5,44 +5,32 @@ export declare const digitsMap: {
5
5
  [key: string]: ReadonlyArray<string>;
6
6
  };
7
7
  /**
8
- * نقشه جداکننده اعشار برای زبان‌های مختلف.
8
+ * نقشه جداکننده اعشار برای زبان‌های مختلف (برای نمایش خروجی).
9
9
  */
10
10
  export declare const decimalSeparatorMap: {
11
11
  [key: string]: string;
12
12
  };
13
- /**
14
- * تبدیل رشته حاوی ارقام محلی (مانند فارسی) به رشته با ارقام انگلیسی (0-9).
15
- * @param str رشته ورودی
16
- * @returns رشته با ارقام انگلیسی
17
- */
18
13
  export declare const convertToEnglishDigits: (str: string) => string;
19
- /**
20
- * تبدیل رشته حاوی ارقام انگلیسی (0-9) به رشته با ارقام محلی.
21
- * @param numStr رشته با ارقام انگلیسی
22
- * @param locale کد زبان ('fa', 'in', ...)
23
- * @returns رشته با ارقام محلی
24
- */
25
14
  export declare const toLocalizedDigits: (numStr: string, locale: keyof typeof digitsMap) => string;
26
- /**
27
- * جایگزینی جداکننده اعشار انگلیسی (.) با جداکننده محلی.
28
- * @param numStr رشته با ارقام و جداکننده انگلیسی
29
- * @param locale کد زبان
30
- * @returns رشته با جداکننده اعشار محلی
31
- */
32
15
  export declare const localizeDecimalSeparator: (numStr: string, locale: keyof typeof decimalSeparatorMap) => string;
16
+ export declare const groupDigits: (numStr: string, separatorCount: number, separatorChar?: string) => string;
33
17
  /**
34
- * گروه‌بندی ارقام قسمت صحیح یک عدد با استفاده از جداکننده.
35
- * @param numStr قسمت صحیح عدد (فقط ارقام انگلیسی)
36
- * @param separatorCount تعداد ارقام در هر گروه
37
- * @param separatorChar کاراکتر جداکننده
38
- * @returns رشته گروه‌بندی شده
18
+ * پاک‌سازی ورودی عددی.
19
+ * ارقام محلی و جداکننده اعشار محلی (٫) و جداکننده دلخواه ورودی را به انگلیسی تبدیل می‌کند.
20
+ * کاراکترهای غیرمجاز را حذف می‌کند.
21
+ * فقط یک نقطه اعشار و یک علامت منفی در ابتدا را مجاز می‌داند.
22
+ *
23
+ * @param value رشته ورودی
24
+ * @param inputDecimalSeparator کاراکتر جداکننده اعشار که کاربر در ورودی استفاده می‌کند (پیش‌فرض '.')
25
+ * @returns رشته پاک‌شده با ارقام انگلیسی و نقطه استاندارد (.). می‌تواند شامل '-' یا '.' یا '-.' باشد.
39
26
  */
40
- export declare const groupDigits: (numStr: string, separatorCount: number, separatorChar?: string) => string;
27
+ export declare const sanitizeNumericInput: (value: string | number | null | undefined, inputDecimalSeparator?: string) => string;
41
28
  /**
42
- * پاک‌سازی ورودی عددی برای اجازه دادن به کاراکترهای مجاز (اعداد، نقطه و منفی).
43
- * این نسخه جدید: ارقام فارسی و جداکننده اعشار فارسی را هم پشتیبانی می‌کند.
44
- * @param value - رشته ورودی
45
- * @returns رشته پاک‌شده
29
+ * گرد کردن یا محدود کردن تعداد ارقام اعشار یک رشته عددی (انگلیسی).
30
+ * مهم: این تابع نقطه انتهایی را حفظ می‌کند اگر ورودی با نقطه تمام شود و maxDecimals صفر نباشد.
31
+ * @param value رشته عددی با ارقام انگلیسی و نقطه استاندارد.
32
+ * @param maxDecimals حداکثر تعداد اعشار مجاز (undefined یعنی بدون محدودیت).
33
+ * @returns رشته گرد شده یا محدود شده.
46
34
  */
47
- export declare const sanitizeNumericInput: (value: string) => string;
35
+ export declare const roundToDecimals: (value: string, maxDecimals?: number) => string;
48
36
  //# sourceMappingURL=digitUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"digitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;CAI7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAGxD,CAAC;AAgBF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,MAGpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,OAAO,SAAS,KAAG,MAIlF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,OAAO,mBAAmB,KAAG,MAInG,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,gBAAgB,MAAM,EACtB,sBAAmB,KAClB,MAMF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MAgCpD,CAAC"}
1
+ {"version":3,"file":"digitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;CAI7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAGxD,CAAC;AAYF,eAAO,MAAM,sBAAsB,GAAI,KAAK,MAAM,KAAG,MAGpD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,OAAO,SAAS,KAAG,MAIlF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,OAAO,mBAAmB,KAAG,MAInG,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,gBAAgB,MAAM,EACtB,sBAAmB,KAClB,MAOF,CAAC;AAGF;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,GAC7B,OAAO,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,wBAAuB,MAAY,KACpC,MA2FF,CAAC;AAGF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,cAAc,MAAM,KAAG,MAkCrE,CAAC"}
@@ -1,50 +1,37 @@
1
1
  "use strict";
2
2
  // utils/digitUtils.ts
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.sanitizeNumericInput = exports.groupDigits = exports.localizeDecimalSeparator = exports.toLocalizedDigits = exports.convertToEnglishDigits = exports.decimalSeparatorMap = exports.digitsMap = void 0;
4
+ exports.roundToDecimals = exports.sanitizeNumericInput = exports.groupDigits = exports.localizeDecimalSeparator = exports.toLocalizedDigits = exports.convertToEnglishDigits = exports.decimalSeparatorMap = exports.digitsMap = void 0;
5
5
  /**
6
6
  * نقشه ارقام محلی برای زبان‌های مختلف.
7
7
  */
8
8
  exports.digitsMap = {
9
9
  fa: ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"],
10
10
  // می‌توانید زبان‌های دیگر را اضافه کنید
11
- // in: ["", "", "", "", "", "", "", "", "", ""],
11
+ // ar: ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"],
12
12
  };
13
13
  /**
14
- * نقشه جداکننده اعشار برای زبان‌های مختلف.
14
+ * نقشه جداکننده اعشار برای زبان‌های مختلف (برای نمایش خروجی).
15
15
  */
16
16
  exports.decimalSeparatorMap = {
17
17
  fa: "٫",
18
- // en: ".",
18
+ // en: ".", // انگلیسی معمولا نقطه است
19
19
  };
20
- // همه ارقام محلی را به یک رشته واحد می‌چسبانیم تا regex بسازیم
20
+ // --- توابع کمکی برای تبدیل ارقام ---
21
21
  const allLocalizedDigits = Object.values(exports.digitsMap).flat().join("");
22
- // مپ برای تبدیل رقم محلی به رقم انگلیسی
23
22
  const conversionMap = {};
24
23
  for (const locale in exports.digitsMap) {
25
24
  exports.digitsMap[locale].forEach((digit, index) => {
26
25
  conversionMap[digit] = index.toString();
27
26
  });
28
27
  }
29
- // Regex برای پیدا کردن تمام ارقام محلی
30
28
  const localizedDigitsRegex = new RegExp(`[${allLocalizedDigits}]`, 'g');
31
- /**
32
- * تبدیل رشته حاوی ارقام محلی (مانند فارسی) به رشته با ارقام انگلیسی (0-9).
33
- * @param str رشته ورودی
34
- * @returns رشته با ارقام انگلیسی
35
- */
36
29
  const convertToEnglishDigits = (str) => {
37
30
  if (!str)
38
31
  return "";
39
32
  return str.replace(localizedDigitsRegex, (char) => conversionMap[char] || char);
40
33
  };
41
34
  exports.convertToEnglishDigits = convertToEnglishDigits;
42
- /**
43
- * تبدیل رشته حاوی ارقام انگلیسی (0-9) به رشته با ارقام محلی.
44
- * @param numStr رشته با ارقام انگلیسی
45
- * @param locale کد زبان ('fa', 'in', ...)
46
- * @returns رشته با ارقام محلی
47
- */
48
35
  const toLocalizedDigits = (numStr, locale) => {
49
36
  if (!numStr || !exports.digitsMap[locale])
50
37
  return numStr;
@@ -52,66 +39,157 @@ const toLocalizedDigits = (numStr, locale) => {
52
39
  return numStr.replace(/\d/g, (digit) => localeDigits[parseInt(digit, 10)]);
53
40
  };
54
41
  exports.toLocalizedDigits = toLocalizedDigits;
55
- /**
56
- * جایگزینی جداکننده اعشار انگلیسی (.) با جداکننده محلی.
57
- * @param numStr رشته با ارقام و جداکننده انگلیسی
58
- * @param locale کد زبان
59
- * @returns رشته با جداکننده اعشار محلی
60
- */
61
42
  const localizeDecimalSeparator = (numStr, locale) => {
62
43
  const separator = exports.decimalSeparatorMap[locale];
63
- if (!separator)
64
- return numStr;
44
+ if (!separator || !numStr.includes('.'))
45
+ return numStr; // فقط اگر نقطه انگلیسی وجود داشت جایگزین کن
65
46
  return numStr.replace('.', separator);
66
47
  };
67
48
  exports.localizeDecimalSeparator = localizeDecimalSeparator;
68
- /**
69
- * گروه‌بندی ارقام قسمت صحیح یک عدد با استفاده از جداکننده.
70
- * @param numStr قسمت صحیح عدد (فقط ارقام انگلیسی)
71
- * @param separatorCount تعداد ارقام در هر گروه
72
- * @param separatorChar کاراکتر جداکننده
73
- * @returns رشته گروه‌بندی شده
74
- */
75
49
  const groupDigits = (numStr, separatorCount, separatorChar = ',') => {
76
50
  if (!numStr || separatorCount <= 0) {
77
51
  return numStr;
78
52
  }
53
+ // فقط روی قسمت صحیح اعمال شود (اگر فقط قسمت صحیح داده شده)
79
54
  const regex = new RegExp(`\\B(?=(\\d{${separatorCount}})+(?!\\d))`, 'g');
80
55
  return numStr.replace(regex, separatorChar);
81
56
  };
82
57
  exports.groupDigits = groupDigits;
83
58
  /**
84
- * پاک‌سازی ورودی عددی برای اجازه دادن به کاراکترهای مجاز (اعداد، نقطه و منفی).
85
- * این نسخه جدید: ارقام فارسی و جداکننده اعشار فارسی را هم پشتیبانی می‌کند.
86
- * @param value - رشته ورودی
87
- * @returns رشته پاک‌شده
59
+ * پاک‌سازی ورودی عددی.
60
+ * ارقام محلی و جداکننده اعشار محلی (٫) و جداکننده دلخواه ورودی را به انگلیسی تبدیل می‌کند.
61
+ * کاراکترهای غیرمجاز را حذف می‌کند.
62
+ * فقط یک نقطه اعشار و یک علامت منفی در ابتدا را مجاز می‌داند.
63
+ *
64
+ * @param value رشته ورودی
65
+ * @param inputDecimalSeparator کاراکتر جداکننده اعشار که کاربر در ورودی استفاده می‌کند (پیش‌فرض '.')
66
+ * @returns رشته پاک‌شده با ارقام انگلیسی و نقطه استاندارد (.). می‌تواند شامل '-' یا '.' یا '-.' باشد.
88
67
  */
89
- const sanitizeNumericInput = (value) => {
90
- // ۱) تبدیل ارقام فارسی به انگلیسی
91
- let normalized = (0, exports.convertToEnglishDigits)(value);
92
- // ۲) تبدیل جداکننده اعشار فارسی (٫) به نقطه
93
- normalized = normalized.replace(/٫/g, '.');
94
- // ۳) حذف کاراکترهای غیرمجاز
95
- let sanitized = normalized.replace(/[^0-9.\-]/g, '');
96
- // حذف صفرهای ابتدایی مگر در موارد اعشاری
97
- if (sanitized.startsWith('0') && !sanitized.startsWith('0.') && sanitized.length > 1) {
98
- sanitized = sanitized.replace(/^0+/, '');
99
- }
100
- // نگه‌داشتن فقط یک نقطه اعشار
101
- const parts = sanitized.split('.');
102
- if (parts.length > 2) {
103
- sanitized = `${parts[0]}.${parts[1]}`;
104
- }
105
- // حذف منفی‌های اضافه و اطمینان از جای صحیح آن
106
- sanitized = sanitized.replace(/-+/g, '-');
107
- if (sanitized.includes('-') && !sanitized.startsWith('-')) {
108
- sanitized = sanitized.replace(/-/, '');
109
- }
110
- // اگر ورودی خالی یا فقط '-' یا '.' است، خالی برگردان
111
- if (sanitized === '' || sanitized === '-' || sanitized === '.') {
68
+ const sanitizeNumericInput = (value, inputDecimalSeparator = '.') => {
69
+ if (value === null || value === undefined)
112
70
  return '';
71
+ let str = String(value);
72
+ // 1. تبدیل ارقام محلی به انگلیسی
73
+ str = (0, exports.convertToEnglishDigits)(str);
74
+ // 2. تبدیل جداکننده اعشار فارسی (٫) به نقطه استاندارد (.)
75
+ str = str.replace(/٫/g, '.');
76
+ // 3. تبدیل جداکننده اعشار ورودی دلخواه (اگر با نقطه استاندارد فرق دارد) به نقطه استاندارد
77
+ const standardSeparator = '.';
78
+ if (inputDecimalSeparator && inputDecimalSeparator !== standardSeparator) {
79
+ // برای جلوگیری از خطای regex با کاراکترهای خاص، آن را escape می‌کنیم
80
+ const escapedSeparator = inputDecimalSeparator.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
81
+ const sepRegex = new RegExp(escapedSeparator, 'g');
82
+ str = str.replace(sepRegex, standardSeparator);
83
+ }
84
+ // 4. مدیریت علامت منفی: فقط یک منفی در ابتدا مجاز است
85
+ const negative = str.startsWith('-');
86
+ // تمام کاراکترهای غیر از عدد و نقطه استاندارد را حذف کن (منفی را جداگانه بررسی کردیم)
87
+ str = str.replace(/[^0-9.]/g, '');
88
+ // 5. مدیریت نقطه اعشار: فقط اولین نقطه مجاز است
89
+ const firstDotIndex = str.indexOf(standardSeparator);
90
+ if (firstDotIndex !== -1) {
91
+ const integerPart = str.substring(0, firstDotIndex);
92
+ // قسمت اعشاری شامل همه چیز بعد از نقطه اول است، و نقاط اضافی در آن حذف می‌شود
93
+ const fractionalPart = str.substring(firstDotIndex + 1).replace(/\./g, '');
94
+ str = `${integerPart}${standardSeparator}${fractionalPart}`;
95
+ }
96
+ // 6. بازگرداندن علامت منفی در صورت لزوم
97
+ // فقط اگر رشته خالی نباشد و فقط نقطه نباشد، منفی را اضافه کن
98
+ if (negative && str !== '' && str !== standardSeparator) {
99
+ str = `-${str}`;
100
+ }
101
+ // 7. مدیریت صفرهای پیشرو در قسمت صحیح (بعد از پردازش منفی و نقطه)
102
+ // مثال: "-005.1" -> "-5.1", "005" -> "5", "0.5" -> "0.5"
103
+ let sign = '';
104
+ let numericPart = str;
105
+ if (str.startsWith('-')) {
106
+ sign = '-';
107
+ numericPart = str.substring(1);
108
+ }
109
+ let [intPart, fracPart] = numericPart.split(standardSeparator);
110
+ if (intPart && intPart.length > 1 && intPart.startsWith('0')) {
111
+ intPart = intPart.replace(/^0+/, '');
112
+ if (intPart === '')
113
+ intPart = '0'; // اگر فقط صفر بود، 0 بماند (مثل 0.5)
113
114
  }
114
- return sanitized;
115
+ else if (intPart === '') {
116
+ // اگر رشته با نقطه شروع شود (مثلا ".5")
117
+ if (fracPart !== undefined) {
118
+ intPart = '0';
119
+ }
120
+ }
121
+ // بازسازی رشته نهایی
122
+ if (fracPart !== undefined) {
123
+ str = `${sign}${intPart}${standardSeparator}${fracPart}`;
124
+ }
125
+ else if (intPart !== undefined) {
126
+ str = `${sign}${intPart}`;
127
+ // اگر ورودی اصلی فقط جداکننده بود، خروجی باید '.' باشد
128
+ if (value === inputDecimalSeparator && sign === '') {
129
+ str = '.';
130
+ }
131
+ // اگر ورودی اصلی فقط '-' بود
132
+ if (value === '-' && sign === '-' && intPart === undefined) {
133
+ str = '-';
134
+ }
135
+ }
136
+ else if (sign === '-' && value === '-') {
137
+ // اگر ورودی فقط '-' بود و پردازش‌ها آن را حذف کردند
138
+ str = '-';
139
+ }
140
+ else {
141
+ // موارد دیگر که ممکن است خالی شوند
142
+ str = '';
143
+ }
144
+ // اجازه دادن به حالت‌های بینابینی در تایپ
145
+ if (value === '-')
146
+ return '-';
147
+ if (String(value).endsWith(inputDecimalSeparator) && str === `${sign}${intPart}`) {
148
+ // اگر کاربر جداکننده را تایپ کرده ولی هنوز عددی بعدش نیامده
149
+ return `${str}${standardSeparator}`;
150
+ }
151
+ return str;
115
152
  };
116
153
  exports.sanitizeNumericInput = sanitizeNumericInput;
154
+ /**
155
+ * گرد کردن یا محدود کردن تعداد ارقام اعشار یک رشته عددی (انگلیسی).
156
+ * مهم: این تابع نقطه انتهایی را حفظ می‌کند اگر ورودی با نقطه تمام شود و maxDecimals صفر نباشد.
157
+ * @param value رشته عددی با ارقام انگلیسی و نقطه استاندارد.
158
+ * @param maxDecimals حداکثر تعداد اعشار مجاز (undefined یعنی بدون محدودیت).
159
+ * @returns رشته گرد شده یا محدود شده.
160
+ */
161
+ const roundToDecimals = (value, maxDecimals) => {
162
+ // اگر مقدار نامعتبر، بدون نقطه یا بدون نیاز به گرد کردن است، همان را برگردان
163
+ if (maxDecimals === undefined || !value || !value.includes('.')) {
164
+ return value;
165
+ }
166
+ const standardSeparator = '.';
167
+ const endsWithSeparator = value.endsWith(standardSeparator);
168
+ let [integerPart, fractionalPart = ''] = value.split(standardSeparator);
169
+ // اگر maxDecimals صفر است، قسمت صحیح را برگردان
170
+ if (maxDecimals <= 0) {
171
+ // اگر قسمت صحیح خالی بود (مثلا در حالت '-.')، صفر را برگردان
172
+ return integerPart === '' && value.startsWith('-') ? "-0" : (integerPart || "0");
173
+ // بازگشت بهتر: فقط قسمت صحیح
174
+ return integerPart || "0";
175
+ }
176
+ // قسمت اعشار را به تعداد مجاز کوتاه کن
177
+ const trimmedFractional = fractionalPart.slice(0, maxDecimals);
178
+ // بازسازی رشته
179
+ if (trimmedFractional) {
180
+ return `${integerPart}${standardSeparator}${trimmedFractional}`;
181
+ }
182
+ else {
183
+ // اگر قسمت اعشاری بعد از کوتاه کردن خالی شد
184
+ // اگر ورودی اصلی با نقطه تمام شده بود، نقطه را حفظ کن
185
+ if (endsWithSeparator) {
186
+ return `${integerPart}${standardSeparator}`;
187
+ }
188
+ else {
189
+ // در غیر این صورت فقط قسمت صحیح را برگردان
190
+ return integerPart;
191
+ }
192
+ }
193
+ };
194
+ exports.roundToDecimals = roundToDecimals;
117
195
  //# sourceMappingURL=digitUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"digitUtils.js","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"digitUtils.js","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":";AAAA,sBAAsB;;;AAEtB;;GAEG;AACU,QAAA,SAAS,GAA6C;IACjE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACtD,wCAAwC;IACxC,0DAA0D;CAC3D,CAAC;AAEF;;GAEG;AACU,QAAA,mBAAmB,GAA8B;IAC5D,EAAE,EAAE,GAAG;IACP,sCAAsC;CACvC,CAAC;AAEF,sCAAsC;AACtC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAS,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpE,MAAM,aAAa,GAA8B,EAAE,CAAC;AACpD,KAAK,MAAM,MAAM,IAAI,iBAAS,EAAE,CAAC;IAC/B,iBAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACzC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AACD,MAAM,oBAAoB,GAAG,IAAI,MAAM,CAAC,IAAI,kBAAkB,GAAG,EAAE,GAAG,CAAC,CAAC;AAEjE,MAAM,sBAAsB,GAAG,CAAC,GAAW,EAAU,EAAE;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;AAClF,CAAC,CAAC;AAHW,QAAA,sBAAsB,0BAGjC;AAEK,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,MAA8B,EAAU,EAAE;IAC1F,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAS,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACjD,MAAM,YAAY,GAAG,iBAAS,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC;AAJW,QAAA,iBAAiB,qBAI5B;AAEK,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,MAAwC,EAAU,EAAE;IAC3G,MAAM,SAAS,GAAG,2BAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,4CAA4C;IACpG,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC;AAJW,QAAA,wBAAwB,4BAInC;AAEK,MAAM,WAAW,GAAG,CACzB,MAAc,EACd,cAAsB,EACtB,aAAa,GAAG,GAAG,EACX,EAAE;IACV,IAAI,CAAC,MAAM,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2DAA2D;IAC3D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,cAAc,cAAc,aAAa,EAAE,GAAG,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAC9C,CAAC,CAAC;AAXW,QAAA,WAAW,eAWtB;AAGF;;;;;;;;;GASG;AACI,MAAM,oBAAoB,GAAG,CAChC,KAAyC,EACzC,wBAAgC,GAAG,EAC7B,EAAE;IACR,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAExB,iCAAiC;IACjC,GAAG,GAAG,IAAA,8BAAsB,EAAC,GAAG,CAAC,CAAC;IAElC,0DAA0D;IAC1D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE7B,0FAA0F;IAC1F,MAAM,iBAAiB,GAAG,GAAG,CAAC;IAC9B,IAAI,qBAAqB,IAAI,qBAAqB,KAAK,iBAAiB,EAAE,CAAC;QACvE,qEAAqE;QACrE,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QACzF,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACnD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACnD,CAAC;IAED,sDAAsD;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,sFAAsF;IACtF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAElC,gDAAgD;IAChD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrD,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;QACpD,8EAA8E;QAC9E,MAAM,cAAc,GAAG,GAAG,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3E,GAAG,GAAG,GAAG,WAAW,GAAG,iBAAiB,GAAG,cAAc,EAAE,CAAC;IAChE,CAAC;IAED,wCAAwC;IACxC,gEAAgE;IAChE,IAAI,QAAQ,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;QACtD,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,kEAAkE;IAClE,yDAAyD;IACzD,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,WAAW,GAAG,GAAG,CAAC;IACtB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,GAAG,GAAG,CAAC;QACX,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE/D,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO,GAAG,GAAG,CAAC,CAAC,qCAAqC;IAC5E,CAAC;SAAM,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACxB,wCAAwC;QACxC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,GAAG,GAAG,CAAC;QAClB,CAAC;IACL,CAAC;IAED,qBAAqB;IACrB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,GAAG,GAAG,GAAG,IAAI,GAAG,OAAO,GAAG,iBAAiB,GAAG,QAAQ,EAAE,CAAC;IAC7D,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,GAAG,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC;QAC1B,uDAAuD;QACvD,IAAI,KAAK,KAAK,qBAAqB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChD,GAAG,GAAG,GAAG,CAAC;QACf,CAAC;QACA,6BAA6B;QAC7B,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACzD,GAAG,GAAG,GAAG,CAAC;QACd,CAAC;IACN,CAAC;SAAM,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QACtC,oDAAoD;QACpD,GAAG,GAAG,GAAG,CAAC;IACf,CAAC;SAAM,CAAC;QACJ,mCAAmC;QACnC,GAAG,GAAG,EAAE,CAAC;IACb,CAAC;IAGD,0CAA0C;IACzC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,EAAE,EAAE,CAAC;QAC/E,4DAA4D;QAC5D,OAAO,GAAG,GAAG,GAAG,iBAAiB,EAAE,CAAC;IACxC,CAAC;IAGF,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AA9FW,QAAA,oBAAoB,wBA8F/B;AAGF;;;;;;GAMG;AACI,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,WAAoB,EAAU,EAAE;IAC3E,6EAA6E;IAC7E,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,iBAAiB,GAAG,GAAG,CAAC;IAC9B,MAAM,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAExE,gDAAgD;IAChD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACnB,6DAA6D;QAC7D,OAAO,WAAW,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;QAChF,6BAA6B;QAC7B,OAAO,WAAW,IAAI,GAAG,CAAC;IAC/B,CAAC;IAED,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAE/D,eAAe;IACf,IAAI,iBAAiB,EAAE,CAAC;QACpB,OAAO,GAAG,WAAW,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,CAAC;IACpE,CAAC;SAAM,CAAC;QACJ,4CAA4C;QAC5C,sDAAsD;QACtD,IAAI,iBAAiB,EAAE,CAAC;YACpB,OAAO,GAAG,WAAW,GAAG,iBAAiB,EAAE,CAAC;QAChD,CAAC;aAAM,CAAC;YACJ,2CAA2C;YAC3C,OAAO,WAAW,CAAC;QACvB,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,eAAe,mBAkC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "persian-number-input",
3
- "version": "4.0.5",
3
+ "version": "4.0.6",
4
4
  "description": "React component for Persian, Indic, or English localized number input with customizable digit grouping",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",