persian-number-input 4.0.1 → 4.0.2
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/hooks/usePersianNumberInput.d.ts +0 -4
- package/dist/hooks/usePersianNumberInput.d.ts.map +1 -1
- package/dist/hooks/usePersianNumberInput.js +19 -32
- package/dist/hooks/usePersianNumberInput.js.map +1 -1
- package/dist/utils/digitUtils.d.ts +4 -4
- package/dist/utils/digitUtils.d.ts.map +1 -1
- package/dist/utils/digitUtils.js +28 -21
- package/dist/utils/digitUtils.js.map +1 -1
- package/package.json +1 -1
|
@@ -7,13 +7,9 @@ interface UsePersianNumberInputProps extends TransformNumberOptions {
|
|
|
7
7
|
max?: number;
|
|
8
8
|
}
|
|
9
9
|
interface UsePersianNumberInputReturn {
|
|
10
|
-
/** مقدار فرمت شده برای نمایش در input. */
|
|
11
10
|
value: string;
|
|
12
|
-
/** تابع onChange برای اتصال به input. */
|
|
13
11
|
onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
14
|
-
/** تابع برای تنظیم مقدار به صورت برنامه نویسی (مقدار عددی تمیز). */
|
|
15
12
|
setValue: (newValue: number | string | undefined) => void;
|
|
16
|
-
/** مقدار عددی خام (رشته انگلیسی تمیز شده) */
|
|
17
13
|
rawValue: string | undefined;
|
|
18
14
|
}
|
|
19
15
|
export declare const usePersianNumberInput: ({ initialValue, separatorCount, separatorChar, locale, maxDecimals, showZero, onValueChange, min, max, }?: UsePersianNumberInputProps) => UsePersianNumberInputReturn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AAAA,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,
|
|
1
|
+
{"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AAAA,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,2BA0HpC,CAAC"}
|
|
@@ -11,49 +11,41 @@ const digitUtils_1 = require("../utils/digitUtils");
|
|
|
11
11
|
// تابع کمکی برای گرد کردن مقدار به تعداد اعشار مشخص
|
|
12
12
|
const roundToDecimals = (value, maxDecimals) => {
|
|
13
13
|
if (!value || !value.includes('.'))
|
|
14
|
-
return value;
|
|
14
|
+
return value;
|
|
15
15
|
const [integerPart, fractionalPart] = value.split('.');
|
|
16
16
|
if (maxDecimals === 0)
|
|
17
|
-
return integerPart;
|
|
17
|
+
return integerPart;
|
|
18
18
|
const trimmedFractional = fractionalPart.slice(0, maxDecimals);
|
|
19
19
|
return trimmedFractional ? `${integerPart}.${trimmedFractional}` : integerPart;
|
|
20
20
|
};
|
|
21
21
|
const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar = ',', locale = 'fa', maxDecimals = 0, showZero = false, onValueChange, min, max, } = {}) => {
|
|
22
|
-
// State
|
|
22
|
+
// State برای نگه داشتن مقدار عددی تمیز شده (ارقام انگلیسی)
|
|
23
23
|
const [rawValue, setRawValue] = (0, react_1.useState)(() => {
|
|
24
24
|
if (initialValue === null || initialValue === undefined)
|
|
25
25
|
return undefined;
|
|
26
|
-
// مقدار اولیه را پاکسازی کن
|
|
27
26
|
let sanitized = (0, digitUtils_1.sanitizeNumericInput)(String(initialValue));
|
|
28
|
-
|
|
29
|
-
if (parseFloat(sanitized) === 0 &&
|
|
30
|
-
!showZero &&
|
|
31
|
-
initialValue !== 0 &&
|
|
32
|
-
initialValue !== '0') {
|
|
27
|
+
if (parseFloat(sanitized) === 0 && !showZero && initialValue !== 0 && initialValue !== '0') {
|
|
33
28
|
return undefined;
|
|
34
29
|
}
|
|
35
|
-
// گرد کردن به تعداد اعشار مجاز
|
|
36
30
|
sanitized = roundToDecimals(sanitized, maxDecimals);
|
|
37
|
-
// بررسی min و max برای مقدار اولیه
|
|
38
31
|
if (sanitized) {
|
|
39
32
|
try {
|
|
40
33
|
const numericValue = new decimal_js_1.default(sanitized);
|
|
41
34
|
if ((min !== undefined && numericValue.lt(min)) ||
|
|
42
35
|
(max !== undefined && numericValue.gt(max))) {
|
|
43
|
-
return undefined;
|
|
36
|
+
return undefined;
|
|
44
37
|
}
|
|
45
38
|
}
|
|
46
39
|
catch (error) {
|
|
47
40
|
console.warn(`Invalid initial value: ${sanitized}`, error);
|
|
48
|
-
return undefined;
|
|
41
|
+
return undefined;
|
|
49
42
|
}
|
|
50
43
|
}
|
|
51
|
-
return sanitized || undefined;
|
|
44
|
+
return sanitized || undefined;
|
|
52
45
|
});
|
|
53
|
-
//
|
|
46
|
+
// مقدار نمایشی فرمتشده با استفاده از transformNumber
|
|
54
47
|
const displayValue = (0, react_1.useMemo)(() => {
|
|
55
48
|
const options = { separatorCount, separatorChar, locale, maxDecimals, showZero };
|
|
56
|
-
// اگر rawValue تعریف نشده باشد، "" برگردان
|
|
57
49
|
if (rawValue === undefined) {
|
|
58
50
|
return showZero ? (0, transformNumber_1.transformNumber)('0', options) : '';
|
|
59
51
|
}
|
|
@@ -61,27 +53,24 @@ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar
|
|
|
61
53
|
}, [rawValue, separatorCount, separatorChar, locale, maxDecimals, showZero]);
|
|
62
54
|
const handleChange = (0, react_1.useCallback)((event) => {
|
|
63
55
|
const inputValue = event.target.value;
|
|
64
|
-
let sanitizedValue = (0, digitUtils_1.sanitizeNumericInput)(inputValue);
|
|
65
|
-
// اگر مقدار پاکسازی شده با مقدار خام فعلی متفاوت بود، آپدیت کن
|
|
56
|
+
let sanitizedValue = (0, digitUtils_1.sanitizeNumericInput)(inputValue);
|
|
66
57
|
if (sanitizedValue !== rawValue) {
|
|
67
|
-
// گرد کردن به تعداد اعشار مجاز
|
|
68
58
|
sanitizedValue = roundToDecimals(sanitizedValue, maxDecimals);
|
|
69
|
-
// بررسی min و max
|
|
70
59
|
let valueToSet = sanitizedValue;
|
|
71
60
|
if (sanitizedValue) {
|
|
72
61
|
try {
|
|
73
62
|
const numericValue = new decimal_js_1.default(sanitizedValue);
|
|
74
63
|
if ((min !== undefined && numericValue.lt(min)) ||
|
|
75
64
|
(max !== undefined && numericValue.gt(max))) {
|
|
76
|
-
return; //
|
|
65
|
+
return; // مقدار خارج از محدوده را نادیده بگیر
|
|
77
66
|
}
|
|
78
67
|
}
|
|
79
68
|
catch (error) {
|
|
80
69
|
console.warn(`Invalid input value: ${sanitizedValue}`, error);
|
|
81
|
-
return;
|
|
70
|
+
return;
|
|
82
71
|
}
|
|
83
72
|
}
|
|
84
|
-
//
|
|
73
|
+
// مدیریت صفر برای showZero
|
|
85
74
|
valueToSet =
|
|
86
75
|
parseFloat(sanitizedValue) === 0 &&
|
|
87
76
|
!showZero &&
|
|
@@ -90,7 +79,7 @@ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar
|
|
|
90
79
|
: sanitizedValue;
|
|
91
80
|
setRawValue(valueToSet);
|
|
92
81
|
if (onValueChange) {
|
|
93
|
-
onValueChange(valueToSet);
|
|
82
|
+
onValueChange(valueToSet);
|
|
94
83
|
}
|
|
95
84
|
}
|
|
96
85
|
}, [rawValue, onValueChange, showZero, min, max, maxDecimals]);
|
|
@@ -102,20 +91,18 @@ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar
|
|
|
102
91
|
return;
|
|
103
92
|
}
|
|
104
93
|
let sanitizedValue = (0, digitUtils_1.sanitizeNumericInput)(String(newValue));
|
|
105
|
-
// گرد کردن به تعداد اعشار مجاز
|
|
106
94
|
sanitizedValue = roundToDecimals(sanitizedValue, maxDecimals);
|
|
107
|
-
// بررسی min و max
|
|
108
95
|
if (sanitizedValue) {
|
|
109
96
|
try {
|
|
110
97
|
const numericValue = new decimal_js_1.default(sanitizedValue);
|
|
111
98
|
if ((min !== undefined && numericValue.lt(min)) ||
|
|
112
99
|
(max !== undefined && numericValue.gt(max))) {
|
|
113
|
-
return; //
|
|
100
|
+
return; // مقدار خارج از محدوده را نادیده بگیر
|
|
114
101
|
}
|
|
115
102
|
}
|
|
116
103
|
catch (error) {
|
|
117
104
|
console.warn(`Invalid set value: ${sanitizedValue}`, error);
|
|
118
|
-
return;
|
|
105
|
+
return;
|
|
119
106
|
}
|
|
120
107
|
}
|
|
121
108
|
const valueToSet = parseFloat(sanitizedValue) === 0 &&
|
|
@@ -129,10 +116,10 @@ const usePersianNumberInput = ({ initialValue, separatorCount = 3, separatorChar
|
|
|
129
116
|
}
|
|
130
117
|
}, [onValueChange, showZero, min, max, maxDecimals]);
|
|
131
118
|
return {
|
|
132
|
-
value: displayValue,
|
|
133
|
-
onChange: handleChange,
|
|
134
|
-
setValue: handleSetValue,
|
|
135
|
-
rawValue
|
|
119
|
+
value: displayValue,
|
|
120
|
+
onChange: handleChange,
|
|
121
|
+
setValue: handleSetValue,
|
|
122
|
+
rawValue,
|
|
136
123
|
};
|
|
137
124
|
};
|
|
138
125
|
exports.usePersianNumberInput = usePersianNumberInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePersianNumberInput.js","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":";;;;;;AAAA,iCAA8D;AAC9D,4DAAiC;AACjC,8DAAmF;AACnF,oDAA2D;
|
|
1
|
+
{"version":3,"file":"usePersianNumberInput.js","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,10 +39,10 @@ export declare const localizeDecimalSeparator: (numStr: string, locale: keyof ty
|
|
|
39
39
|
*/
|
|
40
40
|
export declare const groupDigits: (numStr: string, separatorCount: number, separatorChar?: string) => string;
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @param value
|
|
45
|
-
* @returns
|
|
42
|
+
* Sanitizes a string input to allow only valid numeric characters (digits, decimal point, and negative sign).
|
|
43
|
+
* Removes leading zeros (except for decimal numbers like 0.5) and ensures only one decimal point.
|
|
44
|
+
* @param value - The input string to sanitize.
|
|
45
|
+
* @returns A sanitized string containing only valid numeric characters.
|
|
46
46
|
*/
|
|
47
47
|
export declare const sanitizeNumericInput: (value: string) => string;
|
|
48
48
|
//# 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;AAaF;;;;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,MAOF,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;AAaF;;;;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,MAOF,CAAC;AAIF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MAgCpD,CAAC"}
|
package/dist/utils/digitUtils.js
CHANGED
|
@@ -79,30 +79,37 @@ const groupDigits = (numStr, separatorCount, separatorChar = ",") => {
|
|
|
79
79
|
return numStr.replace(regex, separatorChar);
|
|
80
80
|
};
|
|
81
81
|
exports.groupDigits = groupDigits;
|
|
82
|
+
// utils/digitUtils.ts
|
|
82
83
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* @param value
|
|
86
|
-
* @returns
|
|
84
|
+
* Sanitizes a string input to allow only valid numeric characters (digits, decimal point, and negative sign).
|
|
85
|
+
* Removes leading zeros (except for decimal numbers like 0.5) and ensures only one decimal point.
|
|
86
|
+
* @param value - The input string to sanitize.
|
|
87
|
+
* @returns A sanitized string containing only valid numeric characters.
|
|
87
88
|
*/
|
|
88
89
|
const sanitizeNumericInput = (value) => {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
90
|
+
// فقط ارقام (0-9)، نقطه اعشار (.) و علامت منفی (-) را نگه میداریم
|
|
91
|
+
let sanitized = value.replace(/[^0-9.-]/g, '');
|
|
92
|
+
// حذف صفرهای ابتدایی، مگر در اعداد اعشاری (مثل 0.5) یا صفر تنها
|
|
93
|
+
if (sanitized.startsWith('0') && !sanitized.startsWith('0.') && sanitized.length > 1) {
|
|
94
|
+
sanitized = sanitized.replace(/^0+/, '');
|
|
95
|
+
}
|
|
96
|
+
// اگر ورودی فقط صفر است، آن را نگه میداریم
|
|
97
|
+
if (sanitized === '0') {
|
|
98
|
+
return sanitized;
|
|
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 === '.') {
|
|
112
|
+
return '';
|
|
106
113
|
}
|
|
107
114
|
return sanitized;
|
|
108
115
|
};
|
|
@@ -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,8BAA8B;CAC/B,CAAC;AAEF,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;AAED,iDAAiD;AACjD,MAAM,oBAAoB,GAAG,IAAI,MAAM,CAAC,IAAI,kBAAkB,GAAG,EAAE,GAAG,CAAC,CAAC;AAExE;;;;GAIG;AACI,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;AAEF;;;;;GAKG;AACI,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,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAJW,QAAA,iBAAiB,qBAI5B;AAEF;;;;;GAKG;AACI,MAAM,wBAAwB,GAAG,CAAC,MAAc,EAAE,MAAwC,EAAU,EAAE;IAC3G,MAAM,SAAS,GAAG,2BAAmB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,qDAAqD;IACpF,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC;AAJW,QAAA,wBAAwB,4BAInC;AAEF;;;;;;GAMG;AACI,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;AAEF;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"digitUtils.js","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED