persian-number-input 4.0.8 → 4.0.9

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,20 +1,12 @@
1
- import React from 'react';
2
- import type { TransformNumberOptions } from '../utils/transformNumber';
3
- interface PersianNumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'value' | 'min' | 'max'>, // min/max از نوع input حذف شد چون خودمان هندل می‌کنیم
4
- Omit<TransformNumberOptions, 'maxDecimals'> {
5
- /** مقدار اولیه */
1
+ import React from "react";
2
+ import type { TransformNumberOptions } from "../utils/transformNumber";
3
+ interface PersianNumberInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "onChange" | "value" | "min" | "max">, Omit<TransformNumberOptions, "maxDecimals"> {
6
4
  initialValue?: number | string;
7
- /** تابعی که با تغییر مقدار خام (انگلیسی و بدون فرمت) فراخوانی می‌شود */
8
5
  onValueChange?: (value: string | undefined) => void;
9
- /** حداقل مقدار مجاز (اعشار پشتیبانی می‌شود) */
10
6
  min?: number;
11
- /** حداکثر مقدار مجاز (اعشار پشتیبانی می‌شود) */
12
7
  max?: number;
13
- /** حداکثر تعداد ارقام اعشار مجاز (undefined یعنی نامحدود) */
14
8
  maxDecimals?: number;
15
- /** کاراکتری که کاربر برای وارد کردن اعشار استفاده می‌کند (پیش‌فرض '.') */
16
- inputDecimalSeparator?: string;
17
9
  }
18
- declare const PersianNumberInput: React.FC<PersianNumberInputProps>;
10
+ declare const PersianNumberInput: React.ForwardRefExoticComponent<PersianNumberInputProps & React.RefAttributes<HTMLInputElement>>;
19
11
  export default PersianNumberInput;
20
12
  //# sourceMappingURL=PersianNumberInput.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"PersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/components/PersianNumberInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAE/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,UAAU,uBACR,SAAQ,IAAI,CACR,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAC3C,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CACrC,EACD,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC;IAC7C,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,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,kBAAkB,kGA6CtB,CAAC;AAIH,eAAe,kBAAkB,CAAC"}
@@ -12,27 +12,11 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  const jsx_runtime_1 = require("react/jsx-runtime");
15
+ const react_1 = require("react");
15
16
  const usePersianNumberInput_1 = require("../hooks/usePersianNumberInput");
16
- const PersianNumberInput = (_a) => {
17
- var {
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
- if (maxDecimals !== undefined && maxDecimals < 0) {
24
- console.warn('maxDecimals باید غیرمنفی باشد');
25
- maxDecimals = 0;
26
- }
27
- if (min !== undefined && max !== undefined && min > max) {
28
- console.warn('min نباید بزرگ‌تر از max باشد');
29
- // شاید بهتر باشد یکی را نادیده گرفت یا خطا داد؟ فعلا فقط هشدار.
30
- }
31
- const { value: formattedValue, // مقدار فرمت شده برای نمایش
32
- onChange, // تابع onChange برای input
33
- // setValue, // اگر نیاز به تنظیم مقدار از بیرون دارید
34
- // rawValue, // مقدار خام انگلیسی بدون فرمت (اگر لازم دارید)
35
- } = (0, usePersianNumberInput_1.usePersianNumberInput)({
17
+ const PersianNumberInput = (0, react_1.forwardRef)((props, ref) => {
18
+ const { initialValue, separatorCount, separatorChar, locale, showZero, onValueChange, min, max, maxDecimals, onBlur: propsOnBlur } = props, rest = __rest(props, ["initialValue", "separatorCount", "separatorChar", "locale", "showZero", "onValueChange", "min", "max", "maxDecimals", "onBlur"]);
19
+ const { value, onChange, onBlur, inputRef } = (0, usePersianNumberInput_1.usePersianNumberInput)({
36
20
  initialValue,
37
21
  separatorCount,
38
22
  separatorChar,
@@ -42,12 +26,11 @@ const PersianNumberInput = (_a) => {
42
26
  min,
43
27
  max,
44
28
  maxDecimals,
45
- inputDecimalSeparator, // پاس دادن پراپ جدید به هوک
29
+ onBlur: propsOnBlur,
46
30
  });
47
- return ((0, jsx_runtime_1.jsx)("input", Object.assign({ type: "text" // استفاده از text به جای number برای کنترل کامل فرمت
48
- , inputMode: "decimal" // کیبورد مناسب در موبایل را نشان می‌دهد
49
- , dir: "ltr" // برای اعداد معمولا ltr بهتر است، حتی در متن فارسی
50
- }, restInputProps, { value: formattedValue, onChange: onChange })));
51
- };
31
+ (0, react_1.useImperativeHandle)(ref, () => inputRef.current);
32
+ return ((0, jsx_runtime_1.jsx)("input", Object.assign({}, rest, { ref: inputRef, type: "text", inputMode: "decimal", dir: "ltr", value: value, onChange: onChange, onBlur: onBlur })));
33
+ });
34
+ PersianNumberInput.displayName = "PersianNumberInput";
52
35
  exports.default = PersianNumberInput;
53
36
  //# sourceMappingURL=PersianNumberInput.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"PersianNumberInput.js","sourceRoot":"","sources":["../../src/components/PersianNumberInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,iCAA+D;AAC/D,0EAAuE;AAgBvE,MAAM,kBAAkB,GAAG,IAAA,kBAAU,EAGnC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACf,MAAM,EACJ,YAAY,EACZ,cAAc,EACd,aAAa,EACb,MAAM,EACN,QAAQ,EACR,aAAa,EACb,GAAG,EACH,GAAG,EACH,WAAW,EACX,MAAM,EAAE,WAAW,KAEjB,KAAK,EADJ,IAAI,UACL,KAAK,EAZH,iIAYL,CAAQ,CAAC;IAEV,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,6CAAqB,EAAC;QAClE,YAAY;QACZ,cAAc;QACd,aAAa;QACb,MAAM;QACN,QAAQ;QACR,aAAa;QACb,GAAG;QACH,GAAG;QACH,WAAW;QACX,MAAM,EAAE,WAAW;KACpB,CAAC,CAAC;IAEH,IAAA,2BAAmB,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAQ,CAAC,CAAC;IAElD,OAAO,CACL,kDACM,IAAI,IACR,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,SAAS,EACnB,GAAG,EAAC,KAAK,EACT,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,IACd,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,kBAAkB,CAAC,WAAW,GAAG,oBAAoB,CAAC;AAEtD,kBAAe,kBAAkB,CAAC"}
@@ -1,19 +1,20 @@
1
- import React from 'react';
2
- import { TransformNumberOptions } from '../utils/transformNumber';
3
- interface UsePersianNumberInputProps extends Omit<TransformNumberOptions, 'maxDecimals'> {
1
+ import React from "react";
2
+ import { TransformNumberOptions } from "../utils/transformNumber";
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
8
  maxDecimals?: number;
9
- inputDecimalSeparator?: string;
9
+ onBlur?: React.FocusEventHandler<HTMLInputElement>;
10
10
  }
11
- interface UsePersianNumberInputReturn {
11
+ export declare const usePersianNumberInput: (props?: UsePersianNumberInputProps) => {
12
12
  value: string;
13
13
  onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
14
- setValue: (newValue: number | string | undefined) => void;
14
+ onBlur: (event: React.FocusEvent<HTMLInputElement>) => void;
15
15
  rawValue: string | undefined;
16
- }
17
- export declare const usePersianNumberInput: ({ initialValue, separatorCount, separatorChar, locale, showZero, onValueChange, min, max, maxDecimals, inputDecimalSeparator, }?: UsePersianNumberInputProps) => UsePersianNumberInputReturn;
16
+ inputRef: React.RefObject<HTMLInputElement | null>;
17
+ setRawValue: (nextRaw: string) => void;
18
+ };
18
19
  export {};
19
20
  //# sourceMappingURL=usePersianNumberInput.d.ts.map
@@ -1 +1 @@
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;AAMnF,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,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;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;AAED,eAAO,MAAM,qBAAqB,GAAI,kIAWnC,0BAA+B,KAAG,2BA0HpC,CAAC"}
1
+ {"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAE9E,OAAO,EAEL,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAGlC,UAAU,0BACR,SAAQ,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC;IACnD,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,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;CACpD;AAED,eAAO,MAAM,qBAAqB,GAChC,QAAO,0BAA+B;;sBAoDb,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBA0BlD,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;;;2BA9ChC,MAAM;CAmFnB,CAAC"}
@@ -4,114 +4,90 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.usePersianNumberInput = void 0;
7
- // hooks/usePersianNumberInput.ts
8
7
  const react_1 = require("react");
9
8
  const decimal_js_1 = __importDefault(require("decimal.js"));
10
9
  const transformNumber_1 = require("../utils/transformNumber");
11
10
  const digitUtils_1 = require("../utils/digitUtils");
12
- // ۱. تعریف سیگنال منحصر به فرد برای خطای محدوده
13
- const INVALID_RANGE_SIGNAL = Symbol("INVALID_RANGE");
14
- const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar = ',', locale = 'fa', showZero = false, onValueChange, min, max, maxDecimals, inputDecimalSeparator = '.', } = {}) => {
15
- // اسم تابع برای وضوح بیشتر تغییر کرد
16
- const getSanitizedRoundedAndCheckedValue = (0, react_1.useCallback)((val) => {
17
- // ۲. نوع خروجی تابع تغییر کرد
18
- if (val === null || val === undefined)
19
- return undefined;
20
- let sanitized = (0, digitUtils_1.sanitizeNumericInput)(String(val), inputDecimalSeparator);
21
- // اجازه عبور موقت به مقادیر بینابینی
22
- if (sanitized === '-' || sanitized === '.' || sanitized === '-.') {
23
- // در انتها بررسی showZero برای اینها انجام می‌شود
11
+ const usePersianNumberInput = (props = {}) => {
12
+ const { initialValue, separatorCount = 3, separatorChar = ",", locale = "fa", showZero = false, onValueChange, min, max, maxDecimals, onBlur: externalOnBlur, } = props;
13
+ const [rawValue, setRawValue] = (0, react_1.useState)(() => (0, digitUtils_1.sanitizeNumericInput)(initialValue, maxDecimals));
14
+ const inputRef = (0, react_1.useRef)(null);
15
+ const selectionRef = (0, react_1.useRef)(null);
16
+ (0, react_1.useLayoutEffect)(() => {
17
+ if (inputRef.current && selectionRef.current !== null) {
18
+ inputRef.current.setSelectionRange(selectionRef.current, selectionRef.current);
24
19
  }
25
- else if (sanitized) { // اگر رشته خالی یا فقط بینابینی نیست
20
+ });
21
+ const updateValue = (0, react_1.useCallback)((nextRaw) => {
22
+ if (nextRaw !== "" &&
23
+ nextRaw !== "-" &&
24
+ nextRaw !== "." &&
25
+ nextRaw !== "-.") {
26
26
  try {
27
- // تبدیل به Decimal فقط برای بررسی محدوده
28
- const numericValue = new decimal_js_1.default(sanitized);
29
- // ۳. بررسی محدوده و برگرداندن سیگنال در صورت خطا
30
- if (min !== undefined && numericValue.lt(min)) {
31
- console.warn(`Value ${sanitized} is less than min ${min}. Input ignored.`);
32
- return INVALID_RANGE_SIGNAL; // <<< برگرداندن سیگنال
33
- }
34
- if (max !== undefined && numericValue.gt(max)) {
35
- console.warn(`Value ${sanitized} exceeds max ${max}. Input ignored.`);
36
- return INVALID_RANGE_SIGNAL; // <<< برگرداندن سیگنال
37
- }
38
- // اگر در محدوده بود، گرد کردن را اعمال کن
39
- sanitized = (0, digitUtils_1.roundToDecimals)(sanitized, maxDecimals);
27
+ const num = new decimal_js_1.default(nextRaw);
28
+ if (max !== undefined && num.gt(max))
29
+ return;
40
30
  }
41
- catch (error) {
42
- console.warn(`Error processing sanitized value: ${sanitized}`, error);
43
- return undefined; // خطای پردازش به معنی نامعتبر بودن است
31
+ catch (_a) {
32
+ return;
44
33
  }
45
34
  }
46
- else {
47
- // اگر sanitizeNumericInput رشته خالی برگرداند
48
- return undefined;
49
- }
50
- // مدیریت showZero برای مقدار نهایی (بعد از بررسی محدوده و گرد کردن)
51
- if (!showZero) {
52
- // مقادیر بینابینی را حذف کن اگر showZero=false
53
- if (sanitized === '-' || sanitized === '.' || sanitized === '-.') {
54
- return undefined;
55
- }
35
+ setRawValue(nextRaw);
36
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(nextRaw);
37
+ }, [max, onValueChange]);
38
+ const onChange = (event) => {
39
+ const input = event.target;
40
+ const value = input.value;
41
+ const sanitized = (0, digitUtils_1.sanitizeNumericInput)(value, maxDecimals);
42
+ const prevFormatted = (0, transformNumber_1.transformNumber)(rawValue, {
43
+ separatorCount,
44
+ separatorChar,
45
+ locale,
46
+ showZero,
47
+ });
48
+ const nextFormatted = (0, transformNumber_1.transformNumber)(sanitized, {
49
+ separatorCount,
50
+ separatorChar,
51
+ locale,
52
+ showZero,
53
+ });
54
+ let cursor = input.selectionStart || 0;
55
+ const diff = nextFormatted.length - prevFormatted.length;
56
+ selectionRef.current = cursor + diff;
57
+ updateValue(sanitized);
58
+ };
59
+ const onBlur = (0, react_1.useCallback)((event) => {
60
+ if (rawValue &&
61
+ rawValue !== "-" &&
62
+ rawValue !== "." &&
63
+ rawValue !== "-.") {
56
64
  try {
57
- // مقادیر صفر را حذف کن (مگر اینکه نقطه انتهایی داشته باشد)
58
- if (sanitized && new decimal_js_1.default(sanitized).isZero() && !sanitized.endsWith('.')) {
59
- return undefined;
65
+ const num = new decimal_js_1.default(rawValue);
66
+ if (min !== undefined && num.lt(min)) {
67
+ const minStr = String(min);
68
+ setRawValue(minStr);
69
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(minStr);
60
70
  }
61
71
  }
62
- catch ( /* نادیده گرفتن خطا */_a) { /* نادیده گرفتن خطا */ }
72
+ catch (_a) { }
63
73
  }
64
- // در نهایت، اگر رشته خالی شده، undefined برگردان
65
- return sanitized === '' ? undefined : sanitized;
66
- }, [inputDecimalSeparator, min, max, maxDecimals, showZero]);
67
- // ۵. مدیریت سیگنال در مقدار اولیه
68
- const [rawValue, setRawValue] = (0, react_1.useState)(() => {
69
- const initialProcessed = getSanitizedRoundedAndCheckedValue(initialValue);
70
- // اگر مقدار اولیه خارج از محدوده بود، با undefined شروع کن
71
- return initialProcessed === INVALID_RANGE_SIGNAL ? undefined : initialProcessed;
74
+ externalOnBlur === null || externalOnBlur === void 0 ? void 0 : externalOnBlur(event);
75
+ }, [rawValue, min, onValueChange, externalOnBlur]);
76
+ const displayValue = (0, transformNumber_1.transformNumber)(rawValue, {
77
+ separatorCount,
78
+ separatorChar,
79
+ locale,
80
+ showZero,
81
+ maxDecimals,
72
82
  });
73
- // useEffect برای initialValue ممکن است نیاز به بازبینی داشته باشد
74
- const displayValue = (0, react_1.useMemo)(() => {
75
- const options = { separatorCount, separatorChar, locale, showZero, maxDecimals };
76
- return (0, transformNumber_1.transformNumber)(rawValue, options);
77
- }, [rawValue, separatorCount, separatorChar, locale, showZero, maxDecimals]);
78
- // ۴. اصلاح handleChange برای پردازش سیگنال
79
- const handleChange = (0, react_1.useCallback)((event) => {
80
- const inputValue = event.target.value;
81
- // دریافت مقدار پردازش شده یا سیگنال خطا
82
- const processedValue = getSanitizedRoundedAndCheckedValue(inputValue);
83
- // اگر سیگنال خطا دریافت شد، هیچ کاری نکن (مقدار قبلی حفظ می‌شود)
84
- if (processedValue === INVALID_RANGE_SIGNAL) {
85
- // اینجا می‌توانید بازخورد بصری به کاربر بدهید (مثلا لرزش input)
86
- return;
87
- }
88
- // اگر مقدار معتبر بود (رشته یا undefined) و با مقدار فعلی فرق داشت
89
- if (processedValue !== rawValue) {
90
- setRawValue(processedValue);
91
- if (onValueChange) {
92
- onValueChange(processedValue);
93
- }
94
- }
95
- }, [rawValue, getSanitizedRoundedAndCheckedValue, onValueChange] // تابع پردازشگر به وابستگی‌ها اضافه شد
96
- );
97
- // ۴. اصلاح handleSetValue برای پردازش سیگنال
98
- const handleSetValue = (0, react_1.useCallback)((newValue) => {
99
- const processedValue = getSanitizedRoundedAndCheckedValue(newValue);
100
- // اگر مقدار جدید خارج از محدوده است، درخواست را نادیده بگیر
101
- if (processedValue === INVALID_RANGE_SIGNAL) {
102
- console.warn(`setValue ignored: Value ${newValue} is out of range [${min}, ${max}].`);
103
- return;
104
- }
105
- // اگر مقدار معتبر و متفاوت بود، تنظیم کن
106
- if (processedValue !== rawValue) {
107
- setRawValue(processedValue);
108
- if (onValueChange) {
109
- onValueChange(processedValue);
110
- }
111
- }
112
- }, [rawValue, min, max, getSanitizedRoundedAndCheckedValue, onValueChange] // min/max هم برای پیام هشدار اضافه شد
113
- );
114
- return { value: displayValue, onChange: handleChange, setValue: handleSetValue, rawValue };
83
+ return {
84
+ value: displayValue,
85
+ onChange,
86
+ onBlur,
87
+ rawValue,
88
+ inputRef,
89
+ setRawValue: updateValue,
90
+ };
115
91
  };
116
92
  exports.usePersianNumberInput = usePersianNumberInput;
117
93
  //# sourceMappingURL=usePersianNumberInput.js.map
@@ -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":";;;;;;AAAA,iCAA8E;AAC9E,4DAAiC;AACjC,8DAGkC;AAClC,oDAA2D;AAYpD,MAAM,qBAAqB,GAAG,CACnC,QAAoC,EAAE,EACtC,EAAE;IACF,MAAM,EACJ,YAAY,EACZ,cAAc,GAAG,CAAC,EAClB,aAAa,GAAG,GAAG,EACnB,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,KAAK,EAChB,aAAa,EACb,GAAG,EACH,GAAG,EACH,WAAW,EACX,MAAM,EAAE,cAAc,GACvB,GAAG,KAAK,CAAC;IAEV,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,IAAA,gBAAQ,EAAqB,GAAG,EAAE,CAChE,IAAA,iCAAoB,EAAC,YAAY,EAAE,WAAW,CAAC,CAChD,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAmB,IAAI,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAA,cAAM,EAAgB,IAAI,CAAC,CAAC;IAEjD,IAAA,uBAAe,EAAC,GAAG,EAAE;QACnB,IAAI,QAAQ,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACtD,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAChC,YAAY,CAAC,OAAO,EACpB,YAAY,CAAC,OAAO,CACrB,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAA,mBAAW,EAC7B,CAAC,OAAe,EAAE,EAAE;QAClB,IACE,OAAO,KAAK,EAAE;YACd,OAAO,KAAK,GAAG;YACf,OAAO,KAAK,GAAG;YACf,OAAO,KAAK,IAAI,EAChB,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,oBAAO,CAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;oBAAE,OAAO;YAC/C,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO;YACT,CAAC;QACH,CAAC;QACD,WAAW,CAAC,OAAO,CAAC,CAAC;QACrB,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,OAAO,CAAC,CAAC;IAC3B,CAAC,EACD,CAAC,GAAG,EAAE,aAAa,CAAC,CACrB,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,KAA0C,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAA,iCAAoB,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAE3D,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,QAAQ,EAAE;YAC9C,cAAc;YACd,aAAa;YACb,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,SAAS,EAAE;YAC/C,cAAc;YACd,aAAa;YACb,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;QACzD,YAAY,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;QAErC,WAAW,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,CAAC,KAAyC,EAAE,EAAE;QAC5C,IACE,QAAQ;YACR,QAAQ,KAAK,GAAG;YAChB,QAAQ,KAAK,GAAG;YAChB,QAAQ,KAAK,IAAI,EACjB,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,oBAAO,CAAC,QAAQ,CAAC,CAAC;gBAClC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC3B,WAAW,CAAC,MAAM,CAAC,CAAC;oBACpB,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,MAAM,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YAAC,WAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG,KAAK,CAAC,CAAC;IAC1B,CAAC,EACD,CAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,cAAc,CAAC,CAC/C,CAAC;IAEF,MAAM,YAAY,GAAG,IAAA,iCAAe,EAAC,QAAQ,EAAE;QAC7C,cAAc;QACd,aAAa;QACb,MAAM;QACN,QAAQ;QACR,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,YAAY;QACnB,QAAQ;QACR,MAAM;QACN,QAAQ;QACR,QAAQ;QACR,WAAW,EAAE,WAAW;KACzB,CAAC;AACJ,CAAC,CAAC;AApHW,QAAA,qBAAqB,yBAoHhC"}
@@ -1,36 +1,10 @@
1
- /**
2
- * نقشه ارقام محلی برای زبان‌های مختلف.
3
- */
4
- export declare const digitsMap: {
5
- [key: string]: ReadonlyArray<string>;
6
- };
7
- /**
8
- * نقشه جداکننده اعشار برای زبان‌های مختلف (برای نمایش خروجی).
9
- */
10
- export declare const decimalSeparatorMap: {
11
- [key: string]: string;
12
- };
1
+ export declare const digitsMap: Record<string, string[]>;
2
+ export declare const decimalSeparatorMap: Record<string, string>;
3
+ export declare const toEnglishDigits: (str: string) => string;
13
4
  export declare const convertToEnglishDigits: (str: string) => string;
14
- export declare const toLocalizedDigits: (numStr: string, locale: keyof typeof digitsMap) => string;
15
- export declare const localizeDecimalSeparator: (numStr: string, locale: keyof typeof decimalSeparatorMap) => string;
5
+ export declare const toLocalizedDigits: (numStr: string, locale: string) => string;
6
+ export declare const localizeDecimalSeparator: (numStr: string, locale: string) => string;
16
7
  export declare const groupDigits: (numStr: string, separatorCount: number, separatorChar?: string) => string;
17
- /**
18
- * پاک‌سازی ورودی عددی.
19
- * ارقام محلی و جداکننده اعشار محلی (٫) و جداکننده دلخواه ورودی را به انگلیسی تبدیل می‌کند.
20
- * کاراکترهای غیرمجاز را حذف می‌کند.
21
- * فقط یک نقطه اعشار و یک علامت منفی در ابتدا را مجاز می‌داند.
22
- *
23
- * @param value رشته ورودی
24
- * @param inputDecimalSeparator کاراکتر جداکننده اعشار که کاربر در ورودی استفاده می‌کند (پیش‌فرض '.')
25
- * @returns رشته پاک‌شده با ارقام انگلیسی و نقطه استاندارد (.). می‌تواند شامل '-' یا '.' یا '-.' باشد.
26
- */
27
- export declare const sanitizeNumericInput: (value: string | number | null | undefined, inputDecimalSeparator?: string) => string;
28
- /**
29
- * گرد کردن یا محدود کردن تعداد ارقام اعشار یک رشته عددی (انگلیسی).
30
- * مهم: این تابع نقطه انتهایی را حفظ می‌کند اگر ورودی با نقطه تمام شود و maxDecimals صفر نباشد.
31
- * @param value رشته عددی با ارقام انگلیسی و نقطه استاندارد.
32
- * @param maxDecimals حداکثر تعداد اعشار مجاز (undefined یعنی بدون محدودیت).
33
- * @returns رشته گرد شده یا محدود شده.
34
- */
8
+ export declare const sanitizeNumericInput: (value: string | number | null | undefined, maxDecimals?: number) => string;
35
9
  export declare const roundToDecimals: (value: string, maxDecimals?: number) => string;
36
10
  //# 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;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
+ {"version":3,"file":"digitUtils.d.ts","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAG9C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGtD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAK7C,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAPE,MAAM,KAAG,MAOO,CAAC;AAEtD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,MAIlE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,QAAQ,MAAM,EACd,QAAQ,MAAM,KACb,MAKF,CAAC;AAEF,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,gBAAgB,MAAM,EACtB,sBAAmB,KAClB,MAIF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACzC,cAAc,MAAM,KACnB,MA+BF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,OAAO,MAAM,EACb,cAAc,MAAM,KACnB,MAIF,CAAC"}