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.
- package/dist/components/PersianNumberInput.d.ts +11 -2
- package/dist/components/PersianNumberInput.d.ts.map +1 -1
- package/dist/components/PersianNumberInput.js +16 -10
- package/dist/components/PersianNumberInput.js.map +1 -1
- package/dist/hooks/usePersianNumberInput.d.ts +10 -2
- package/dist/hooks/usePersianNumberInput.d.ts.map +1 -1
- package/dist/hooks/usePersianNumberInput.js +87 -81
- package/dist/hooks/usePersianNumberInput.js.map +1 -1
- package/dist/utils/digitUtils.d.ts +17 -29
- package/dist/utils/digitUtils.d.ts.map +1 -1
- package/dist/utils/digitUtils.js +139 -61
- package/dist/utils/digitUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { TransformNumberOptions } from '../utils/transformNumber';
|
|
3
|
-
interface PersianNumberInputProps extends
|
|
4
|
-
|
|
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":"
|
|
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,
|
|
20
|
-
// بقیه پراپ ها (مثل className, style, placeholder, id و ...) به input اصلی منتقل می شوند
|
|
21
|
-
restInputProps = __rest(_a, ["initialValue", "separatorCount", "separatorChar", "locale", "
|
|
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,
|
|
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" //
|
|
43
|
-
, inputMode: "decimal"
|
|
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":";;;;;;;;;;;;;;
|
|
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,
|
|
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,
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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(
|
|
28
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
|
39
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
49
|
-
if (rawValue === undefined) {
|
|
50
|
-
|
|
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,
|
|
89
|
+
}, [rawValue, separatorCount, separatorChar, locale, showZero, maxDecimals]);
|
|
54
90
|
const handleChange = (0, react_1.useCallback)((event) => {
|
|
55
91
|
const inputValue = event.target.value;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
101
|
+
// حتی اگر مقدار خام تغییر نکرد، ممکن است کاربر فقط جداکننده تایپ کرده باشد
|
|
102
|
+
// و ما نیاز به آپدیت نمایش داریم (مثلا از ۱۵ به ۱۵٫)
|
|
103
|
+
// اما useMemo باید این را هندل کند. اگر rawValue تغییر نکند، displayValue هم نباید تغییر کند
|
|
104
|
+
// مگر اینکه منطق getSanitizedAndRoundedValue تغییر کرده باشد.
|
|
105
|
+
// برای اطمینان، شاید لازم باشد state نمایش را جداگانه مدیریت کرد؟ فعلا نه.
|
|
106
|
+
}, [rawValue, getSanitizedAndRoundedValue, onValueChange]);
|
|
81
107
|
const handleSetValue = (0, react_1.useCallback)((newValue) => {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
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":";;;;;;AAAA,iCAAiC;AACjC,
|
|
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
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
18
|
+
* پاکسازی ورودی عددی.
|
|
19
|
+
* ارقام محلی و جداکننده اعشار محلی (٫) و جداکننده دلخواه ورودی را به انگلیسی تبدیل میکند.
|
|
20
|
+
* کاراکترهای غیرمجاز را حذف میکند.
|
|
21
|
+
* فقط یک نقطه اعشار و یک علامت منفی در ابتدا را مجاز میداند.
|
|
22
|
+
*
|
|
23
|
+
* @param value رشته ورودی
|
|
24
|
+
* @param inputDecimalSeparator کاراکتر جداکننده اعشار که کاربر در ورودی استفاده میکند (پیشفرض '.')
|
|
25
|
+
* @returns رشته پاکشده با ارقام انگلیسی و نقطه استاندارد (.). میتواند شامل '-' یا '.' یا '-.' باشد.
|
|
39
26
|
*/
|
|
40
|
-
export declare const
|
|
27
|
+
export declare const sanitizeNumericInput: (value: string | number | null | undefined, inputDecimalSeparator?: string) => string;
|
|
41
28
|
/**
|
|
42
|
-
*
|
|
43
|
-
* این
|
|
44
|
-
* @param value
|
|
45
|
-
* @
|
|
29
|
+
* گرد کردن یا محدود کردن تعداد ارقام اعشار یک رشته عددی (انگلیسی).
|
|
30
|
+
* مهم: این تابع نقطه انتهایی را حفظ میکند اگر ورودی با نقطه تمام شود و maxDecimals صفر نباشد.
|
|
31
|
+
* @param value رشته عددی با ارقام انگلیسی و نقطه استاندارد.
|
|
32
|
+
* @param maxDecimals حداکثر تعداد اعشار مجاز (undefined یعنی بدون محدودیت).
|
|
33
|
+
* @returns رشته گرد شده یا محدود شده.
|
|
46
34
|
*/
|
|
47
|
-
export declare const
|
|
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;
|
|
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"}
|
package/dist/utils/digitUtils.js
CHANGED
|
@@ -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
|
-
//
|
|
11
|
+
// ar: ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"],
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
|
-
* نقشه جداکننده اعشار برای زبانهای
|
|
14
|
+
* نقشه جداکننده اعشار برای زبانهای مختلف (برای نمایش خروجی).
|
|
15
15
|
*/
|
|
16
16
|
exports.decimalSeparatorMap = {
|
|
17
17
|
fa: "٫",
|
|
18
|
-
// en: ".",
|
|
18
|
+
// en: ".", // انگلیسی معمولا نقطه است
|
|
19
19
|
};
|
|
20
|
-
//
|
|
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
|
-
*
|
|
87
|
-
*
|
|
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
|
-
|
|
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":";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,
|
|
1
|
+
{"version":3,"file":"digitUtils.js","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED