persian-number-input 5.0.0 → 5.0.1
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/README.fa.md +48 -24
- package/README.md +49 -24
- package/dist/hooks/useNumericInputEvents.d.ts +1 -0
- package/dist/hooks/useNumericInputEvents.d.ts.map +1 -1
- package/dist/hooks/useNumericInputEvents.js +23 -5
- package/dist/hooks/useNumericInputEvents.js.map +1 -1
- package/dist/hooks/usePersianNumberInput.d.ts.map +1 -1
- package/dist/hooks/usePersianNumberInput.js +21 -9
- package/dist/hooks/usePersianNumberInput.js.map +1 -1
- package/dist/utils/digitUtils.js +1 -1
- package/dist/utils/digitUtils.js.map +1 -1
- package/dist/utils/keyFilter.d.ts +3 -0
- package/dist/utils/keyFilter.d.ts.map +1 -1
- package/dist/utils/keyFilter.js +14 -2
- package/dist/utils/keyFilter.js.map +1 -1
- package/dist/utils/transformNumber.d.ts.map +1 -1
- package/dist/utils/transformNumber.js +2 -0
- package/dist/utils/transformNumber.js.map +1 -1
- package/dist/utils/validation.js +2 -2
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
package/README.fa.md
CHANGED
|
@@ -38,7 +38,7 @@ English | [فارسی](./README.fa.md)
|
|
|
38
38
|
- 🔢 **تبدیل خودکار ارقام** — فارسی (۰-۹) و عربی (٠-٩) به انگلیسی و برعکس
|
|
39
39
|
- 🌍 **چند زبانه** — فارسی (`fa`)، عربی (`ar`)، انگلیسی (`en`)
|
|
40
40
|
- 📊 **جداکننده هزارگان** — قابل تنظیم با هر کاراکتری
|
|
41
|
-
- 💰 **آماده برای ارز** — پشتیبانی از پسوند (تومان، ریال، ر.س)
|
|
41
|
+
- 💰 **آماده برای ارز** — پشتیبانی از پسوند (تومان، ریال، ر.س) به صورت overlay بصری مجزا از مقدار ورودی
|
|
42
42
|
- ⚡ **فقط ~۱ کیلوبایت** — بدون هیچ dependency اضافه
|
|
43
43
|
- 🎯 **TypeScript** — تعریف تایپ کامل
|
|
44
44
|
- 🔄 **حفظ موقعیت cursor** — بدون جهش هنگام فرمتدهی
|
|
@@ -97,7 +97,8 @@ function App() {
|
|
|
97
97
|
/>
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
خروجی نمایشی: `۵,۰۰۰,۰۰۰` با `تومان` به صورت overlay بصری در کنار input.
|
|
101
|
+
پسوند خارج از مقدار ورودی رندر میشود — هرگز با موقعیت cursor یا کلید Backspace تداخل ندارد.
|
|
101
102
|
|
|
102
103
|
---
|
|
103
104
|
|
|
@@ -115,6 +116,8 @@ function App() {
|
|
|
115
116
|
/>
|
|
116
117
|
```
|
|
117
118
|
|
|
119
|
+
خروجی نمایشی: `۰` با `ریال` به صورت overlay بصری.
|
|
120
|
+
|
|
118
121
|
---
|
|
119
122
|
|
|
120
123
|
### عدد اعشاری با جداکننده فارسی
|
|
@@ -146,7 +149,7 @@ function App() {
|
|
|
146
149
|
/>
|
|
147
150
|
```
|
|
148
151
|
|
|
149
|
-
|
|
152
|
+
خروجی نمایشی: `٩٨٧,٦٥٤` با `ر.س` به صورت overlay بصری.
|
|
150
153
|
|
|
151
154
|
---
|
|
152
155
|
|
|
@@ -188,30 +191,50 @@ function ProductForm() {
|
|
|
188
191
|
import { usePersianNumberInput } from "persian-number-input";
|
|
189
192
|
|
|
190
193
|
function CustomInput() {
|
|
191
|
-
const { value, onChange, onBlur, rawValue } =
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
194
|
+
const { value, onChange, onBlur, rawValue, isInvalid } =
|
|
195
|
+
usePersianNumberInput({
|
|
196
|
+
initialValue: 1000,
|
|
197
|
+
locale: "fa",
|
|
198
|
+
suffix: "تومان",
|
|
199
|
+
maxDecimals: 2,
|
|
200
|
+
min: 0,
|
|
201
|
+
max: 1000000,
|
|
202
|
+
onValueChange: (val) => console.log("مقدار انگلیسی:", val),
|
|
203
|
+
});
|
|
200
204
|
|
|
201
205
|
return (
|
|
202
|
-
<
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
<div>
|
|
207
|
+
<div style={{ position: "relative", display: "inline-flex", alignItems: "center" }}>
|
|
208
|
+
<input
|
|
209
|
+
type="text"
|
|
210
|
+
value={value}
|
|
211
|
+
onChange={onChange}
|
|
212
|
+
onBlur={onBlur}
|
|
213
|
+
onPaste={onPaste}
|
|
214
|
+
dir="ltr"
|
|
215
|
+
aria-invalid={isInvalid || undefined}
|
|
216
|
+
/>
|
|
217
|
+
<span
|
|
218
|
+
style={{
|
|
219
|
+
position: "absolute",
|
|
220
|
+
pointerEvents: "none",
|
|
221
|
+
right: 0,
|
|
222
|
+
top: 0,
|
|
223
|
+
bottom: 0,
|
|
224
|
+
display: "flex",
|
|
225
|
+
alignItems: "center",
|
|
226
|
+
}}
|
|
227
|
+
>
|
|
228
|
+
تومان
|
|
229
|
+
</span>
|
|
230
|
+
</div>
|
|
231
|
+
<p>مقدار خام: {rawValue}</p>
|
|
232
|
+
</div>
|
|
210
233
|
);
|
|
211
234
|
}
|
|
212
235
|
```
|
|
213
236
|
|
|
214
|
-
|
|
237
|
+
وقتی از هوک با `suffix` استفاده میکنید، `<input>` رو در یک کانتینر `relative` بپیچید و پسوند را به صورت `<span>` با `pointer-events: none` رندر کنید. این کار تضمین میکند پسوند هرگز با موقعیت cursor یا کلید Backspace تداخل نداشته باشد. برای جلوگیری از همپوشانی متن، `paddingRight` مناسب به input اضافه کنید.
|
|
215
238
|
|
|
216
239
|
---
|
|
217
240
|
|
|
@@ -267,7 +290,7 @@ function LoanCalculator() {
|
|
|
267
290
|
| `separatorCount` | `number` | `3` | تعداد ارقام بین جداکنندهها (۳ = هزارگان) |
|
|
268
291
|
| `separatorChar` | `string` | `","` | کاراکتر جداکننده هزارگان |
|
|
269
292
|
| `decimalChar` | `string` | خودکار | جداکننده اعشار (`٫` برای fa، `.` برای en) |
|
|
270
|
-
| `suffix` | `string` | `undefined` | پسوند — مثل `تومان`، `ریال`
|
|
293
|
+
| `suffix` | `string` | `undefined` | پسوند بصری خارج از مقدار ورودی — هرگز با cursor، انتخاب متن یا Backspace تداخل ندارد (مثل `تومان`، `ریال`) |
|
|
271
294
|
| `maxDecimals` | `number` | `undefined` | حداکثر رقم اعشار مجاز |
|
|
272
295
|
| `min` | `number` | `undefined` | کمترین مقدار مجاز |
|
|
273
296
|
| `max` | `number` | `undefined` | بیشترین مقدار مجاز — اعتبارسنجی نرم (علامتگذاری invalid، اعمال در blur) |
|
|
@@ -292,11 +315,12 @@ transformNumber("1234567.89", {
|
|
|
292
315
|
separatorCount: 3,
|
|
293
316
|
separatorChar: ",",
|
|
294
317
|
maxDecimals: 2,
|
|
295
|
-
suffix: "تومان",
|
|
296
318
|
});
|
|
297
|
-
//
|
|
319
|
+
// → "۱,۲۳۴,۵۶۷٫۸۹"
|
|
298
320
|
```
|
|
299
321
|
|
|
322
|
+
> نکته: `suffix` یک ویژگی صرفاً UI در کامپوننت و هوک است. تابع `transformNumber` پسوند را به خروجی اضافه نمیکند — برای نمایش پسوند از کامپوننت `PersianNumberInput` یا هوک `usePersianNumberInput` استفاده کنید.
|
|
323
|
+
|
|
300
324
|
#### `toEnglishDigits(str, decimalChar?)`
|
|
301
325
|
|
|
302
326
|
تبدیل ارقام فارسی یا عربی به انگلیسی:
|
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ Form receives: "1234567"
|
|
|
38
38
|
- 🔢 **Automatic digit conversion** — Persian (۰-۹) and Arabic (٠-٩) to English and back
|
|
39
39
|
- 🌍 **Multi-locale** — `fa` (Farsi/Persian), `ar` (Arabic), `en` (English)
|
|
40
40
|
- 📊 **Thousand separator formatting** — customizable separator character and group size
|
|
41
|
-
- 💰 **Currency-ready** — add
|
|
41
|
+
- 💰 **Currency-ready** — add suffix (e.g. تومان, ریال, ر.س) as a visual-only overlay, and custom decimal separator
|
|
42
42
|
- ⚡ **~1KB gzipped** — zero extra dependencies, pure TypeScript
|
|
43
43
|
- 🎯 **TypeScript** — full type definitions included
|
|
44
44
|
- 🔄 **Cursor-position preservation** — no jump on re-format
|
|
@@ -98,7 +98,9 @@ Output displayed to user: `۱,۲۳۴,۵۶۷`
|
|
|
98
98
|
/>
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
Displayed:
|
|
101
|
+
Displayed to user: `۵,۰۰۰,۰۰۰` with `تومان` rendered as a visual-only overlay next to the input.
|
|
102
|
+
|
|
103
|
+
The suffix is rendered outside the input's value — it never interferes with cursor position, selection, or backspace behavior.
|
|
102
104
|
|
|
103
105
|
---
|
|
104
106
|
|
|
@@ -114,7 +116,7 @@ Displayed: `۵,۰۰۰,۰۰۰ تومان`
|
|
|
114
116
|
/>
|
|
115
117
|
```
|
|
116
118
|
|
|
117
|
-
Displayed:
|
|
119
|
+
Displayed to user: `٩٨٧,٦٥٤` with `ر.س` rendered as a visual-only overlay.
|
|
118
120
|
|
|
119
121
|
---
|
|
120
122
|
|
|
@@ -149,6 +151,8 @@ Displayed: `۱,۲۳۴٫۵۶`
|
|
|
149
151
|
/>
|
|
150
152
|
```
|
|
151
153
|
|
|
154
|
+
Displayed to user: `۰` with `ریال` rendered as visual-only overlay.
|
|
155
|
+
|
|
152
156
|
---
|
|
153
157
|
|
|
154
158
|
### With React Hook Form
|
|
@@ -189,30 +193,50 @@ function ProductForm() {
|
|
|
189
193
|
import { usePersianNumberInput } from "persian-number-input";
|
|
190
194
|
|
|
191
195
|
function CustomInput() {
|
|
192
|
-
const { value, onChange, onBlur, rawValue } =
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
196
|
+
const { value, onChange, onBlur, rawValue, isInvalid } =
|
|
197
|
+
usePersianNumberInput({
|
|
198
|
+
initialValue: 1000,
|
|
199
|
+
locale: "fa",
|
|
200
|
+
suffix: "تومان",
|
|
201
|
+
maxDecimals: 2,
|
|
202
|
+
min: 0,
|
|
203
|
+
max: 1000000,
|
|
204
|
+
onValueChange: (val) => console.log("English value:", val),
|
|
205
|
+
});
|
|
201
206
|
|
|
202
207
|
return (
|
|
203
|
-
<
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
208
|
+
<div>
|
|
209
|
+
<div style={{ position: "relative", display: "inline-flex", alignItems: "center" }}>
|
|
210
|
+
<input
|
|
211
|
+
type="text"
|
|
212
|
+
value={value}
|
|
213
|
+
onChange={onChange}
|
|
214
|
+
onBlur={onBlur}
|
|
215
|
+
onPaste={onPaste}
|
|
216
|
+
dir="ltr"
|
|
217
|
+
aria-invalid={isInvalid || undefined}
|
|
218
|
+
/>
|
|
219
|
+
<span
|
|
220
|
+
style={{
|
|
221
|
+
position: "absolute",
|
|
222
|
+
pointerEvents: "none",
|
|
223
|
+
right: 0,
|
|
224
|
+
top: 0,
|
|
225
|
+
bottom: 0,
|
|
226
|
+
display: "flex",
|
|
227
|
+
alignItems: "center",
|
|
228
|
+
}}
|
|
229
|
+
>
|
|
230
|
+
تومان
|
|
231
|
+
</span>
|
|
232
|
+
</div>
|
|
233
|
+
<p>Raw value: {rawValue}</p>
|
|
234
|
+
</div>
|
|
211
235
|
);
|
|
212
236
|
}
|
|
213
237
|
```
|
|
214
238
|
|
|
215
|
-
|
|
239
|
+
When using a suffix with the hook, wrap the `<input>` in a relative container and render the suffix as an absolutely-positioned `<span>` with `pointer-events: none`. This ensures the suffix never interferes with cursor positioning or backspace behavior. Add `paddingRight` to the input to prevent text from overlapping the suffix overlay.
|
|
216
240
|
|
|
217
241
|
---
|
|
218
242
|
|
|
@@ -227,7 +251,7 @@ The hook also returns `isInvalid` (boolean) when the value exceeds `max`, and `o
|
|
|
227
251
|
| `separatorCount` | `number` | `3` | Digits per group (3 = thousand separator) |
|
|
228
252
|
| `separatorChar` | `string` | `","` | Thousand separator character |
|
|
229
253
|
| `decimalChar` | `string` | Auto | Decimal separator (`٫` for fa, `.` for en) |
|
|
230
|
-
| `suffix` | `string` | `undefined` |
|
|
254
|
+
| `suffix` | `string` | `undefined` | Visual-only suffix rendered outside the input value — never affects cursor, selection, or backspace (e.g. `تومان`, `ریال`) |
|
|
231
255
|
| `maxDecimals` | `number` | `undefined` | Maximum allowed decimal places |
|
|
232
256
|
| `min` | `number` | `undefined` | Minimum allowed value |
|
|
233
257
|
| `max` | `number` | `undefined` | Maximum allowed value — soft validation (marks invalid, clamps on blur) |
|
|
@@ -252,11 +276,12 @@ transformNumber("1234567.89", {
|
|
|
252
276
|
separatorCount: 3,
|
|
253
277
|
separatorChar: ",",
|
|
254
278
|
maxDecimals: 2,
|
|
255
|
-
suffix: "تومان",
|
|
256
279
|
});
|
|
257
|
-
// → "۱,۲۳۴,۵۶۷٫۸۹
|
|
280
|
+
// → "۱,۲۳۴,۵۶۷٫۸۹"
|
|
258
281
|
```
|
|
259
282
|
|
|
283
|
+
> Note: `suffix` is a UI-only feature of the component and hook. The `transformNumber` utility does not append suffix — use the `PersianNumberInput` component or `usePersianNumberInput` hook for suffix rendering.
|
|
284
|
+
|
|
260
285
|
#### `toEnglishDigits(str, decimalChar?)`
|
|
261
286
|
|
|
262
287
|
Convert Persian or Arabic digits to English.
|
|
@@ -5,6 +5,7 @@ interface EventOptions {
|
|
|
5
5
|
rawValue: string;
|
|
6
6
|
maxDecimals?: number;
|
|
7
7
|
decimalChar?: string;
|
|
8
|
+
separatorChar: string;
|
|
8
9
|
updateValue: (value: string) => void;
|
|
9
10
|
onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
|
|
10
11
|
onPaste?: React.ClipboardEventHandler<HTMLInputElement>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNumericInputEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useNumericInputEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,UAAU,YAAY;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;CACzD;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,YAAY;
|
|
1
|
+
{"version":3,"file":"useNumericInputEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useNumericInputEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,UAAU,YAAY;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;CACzD;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,YAAY;mBAanD,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC;iBAoBrC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;CA4B7C,CAAC"}
|
|
@@ -4,25 +4,43 @@ exports.useNumericInputEvents = void 0;
|
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const digitUtils_1 = require("../utils/digitUtils");
|
|
6
6
|
const useNumericInputEvents = (options) => {
|
|
7
|
-
const { keyFilter, rawValue, maxDecimals, decimalChar, updateValue, onKeyDown: externalOnKeyDown, onPaste: externalOnPaste, } = options;
|
|
7
|
+
const { keyFilter, rawValue, maxDecimals, decimalChar, separatorChar, updateValue, onKeyDown: externalOnKeyDown, onPaste: externalOnPaste, } = options;
|
|
8
8
|
const onKeyDown = (0, react_1.useCallback)((e) => {
|
|
9
9
|
if (!keyFilter({
|
|
10
10
|
key: e.key,
|
|
11
11
|
ctrlKey: e.ctrlKey,
|
|
12
12
|
metaKey: e.metaKey,
|
|
13
13
|
altKey: e.altKey,
|
|
14
|
+
currentValue: e.currentTarget.value,
|
|
15
|
+
selectionStart: e.currentTarget.selectionStart ?? 0,
|
|
14
16
|
})) {
|
|
15
17
|
e.preventDefault();
|
|
16
18
|
}
|
|
17
19
|
externalOnKeyDown?.(e);
|
|
18
|
-
}, [keyFilter,
|
|
20
|
+
}, [keyFilter, externalOnKeyDown]);
|
|
19
21
|
const onPaste = (0, react_1.useCallback)((e) => {
|
|
20
22
|
e.preventDefault();
|
|
23
|
+
const input = e.currentTarget;
|
|
24
|
+
const selStart = input.selectionStart ?? 0;
|
|
25
|
+
const selEnd = input.selectionEnd ?? 0;
|
|
21
26
|
const pasted = e.clipboardData.getData("text");
|
|
22
|
-
const
|
|
23
|
-
|
|
27
|
+
const currentFormatted = input.value;
|
|
28
|
+
let rawStart = 0;
|
|
29
|
+
for (let i = 0; i < selStart && i < currentFormatted.length; i++) {
|
|
30
|
+
if (currentFormatted[i] !== separatorChar)
|
|
31
|
+
rawStart++;
|
|
32
|
+
}
|
|
33
|
+
let rawEnd = rawStart;
|
|
34
|
+
for (let i = selStart; i < selEnd && i < currentFormatted.length; i++) {
|
|
35
|
+
if (currentFormatted[i] !== separatorChar)
|
|
36
|
+
rawEnd++;
|
|
37
|
+
}
|
|
38
|
+
const sanitizedPaste = (0, digitUtils_1.sanitizeNumericInput)(pasted, maxDecimals, decimalChar);
|
|
39
|
+
const newRaw = rawValue.slice(0, rawStart) + sanitizedPaste + rawValue.slice(rawEnd);
|
|
40
|
+
const finalRaw = (0, digitUtils_1.sanitizeNumericInput)(newRaw, maxDecimals, decimalChar);
|
|
41
|
+
updateValue(finalRaw);
|
|
24
42
|
externalOnPaste?.(e);
|
|
25
|
-
}, [maxDecimals, decimalChar, updateValue, externalOnPaste]);
|
|
43
|
+
}, [rawValue, maxDecimals, decimalChar, updateValue, externalOnPaste, separatorChar]);
|
|
26
44
|
return { onKeyDown, onPaste };
|
|
27
45
|
};
|
|
28
46
|
exports.useNumericInputEvents = useNumericInputEvents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNumericInputEvents.js","sourceRoot":"","sources":["../../src/hooks/useNumericInputEvents.ts"],"names":[],"mappings":";;;AAAA,iCAA2C;AAE3C,oDAA2D;
|
|
1
|
+
{"version":3,"file":"useNumericInputEvents.js","sourceRoot":"","sources":["../../src/hooks/useNumericInputEvents.ts"],"names":[],"mappings":";;;AAAA,iCAA2C;AAE3C,oDAA2D;AAapD,MAAM,qBAAqB,GAAG,CAAC,OAAqB,EAAE,EAAE;IAC7D,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,eAAe,GACzB,GAAG,OAAO,CAAC;IAEZ,MAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,CAAC,CAAwC,EAAE,EAAE;QAC3C,IACE,CAAC,SAAS,CAAC;YACT,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,YAAY,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK;YACnC,cAAc,EAAE,CAAC,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC;SACpD,CAAC,EACF,CAAC;YACD,CAAC,CAAC,cAAc,EAAE,CAAC;QACrB,CAAC;QAED,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,EACD,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAC/B,CAAC;IAEF,MAAM,OAAO,GAAG,IAAA,mBAAW,EACzB,CAAC,CAAyC,EAAE,EAAE;QAC5C,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,CAAC,CAAC,aAAa,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC;QACrC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjE,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,aAAa;gBAAE,QAAQ,EAAE,CAAC;QACxD,CAAC;QACD,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtE,IAAI,gBAAgB,CAAC,CAAC,CAAC,KAAK,aAAa;gBAAE,MAAM,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,cAAc,GAAG,IAAA,iCAAoB,EAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,cAAc,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAA,iCAAoB,EAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QACxE,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEtB,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,CAAC,CAClF,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC,CAAC;AA7DW,QAAA,qBAAqB,yBA6DhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"usePersianNumberInput.d.ts","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwC,MAAM,OAAO,CAAC;AAC7D,OAAO,EAEL,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,0BACf,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,QAAQ,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACtD,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;CACzD;AAED,eAAO,MAAM,qBAAqB,GAChC,QAAO,0BAA+B;;sBAoEb,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC;;;oBAoClD,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;;;2BA5DhC,MAAM;;CAmFnB,CAAC"}
|
|
@@ -13,13 +13,9 @@ const usePersianNumberInput = (props = {}) => {
|
|
|
13
13
|
const { initialValue, separatorCount = 3, separatorChar = ",", decimalChar, locale = "fa", showZero = false, onValueChange, min, max, maxDecimals, onChange: externalOnChange, onBlur: externalOnBlur, onKeyDown: externalOnKeyDown, onPaste: externalOnPaste, } = props;
|
|
14
14
|
const [rawValue, setRawValue] = (0, react_1.useState)(() => (0, digitUtils_1.sanitizeNumericInput)(initialValue, maxDecimals, decimalChar));
|
|
15
15
|
const [isInvalid, setIsInvalid] = (0, react_1.useState)(false);
|
|
16
|
-
(0, react_1.useEffect)(() => {
|
|
17
|
-
setRawValue((0, digitUtils_1.sanitizeNumericInput)(initialValue, maxDecimals, decimalChar));
|
|
18
|
-
setIsInvalid(false);
|
|
19
|
-
}, [initialValue, maxDecimals, decimalChar]);
|
|
20
16
|
const inputRef = (0, react_1.useRef)(null);
|
|
21
|
-
const
|
|
22
|
-
const { setCursor } = (0, useCursorManager_1.useCursorManager)(inputRef,
|
|
17
|
+
const cursorTrigger = (0, react_1.useRef)(0);
|
|
18
|
+
const { setCursor } = (0, useCursorManager_1.useCursorManager)(inputRef, cursorTrigger.current);
|
|
23
19
|
const { displayValue, transformOpts } = (0, useNumberFormatter_1.useNumberFormatter)(rawValue ?? "", {
|
|
24
20
|
separatorCount,
|
|
25
21
|
separatorChar,
|
|
@@ -46,6 +42,7 @@ const usePersianNumberInput = (props = {}) => {
|
|
|
46
42
|
rawValue: rawValue ?? "",
|
|
47
43
|
maxDecimals,
|
|
48
44
|
decimalChar,
|
|
45
|
+
separatorChar,
|
|
49
46
|
updateValue,
|
|
50
47
|
onKeyDown: externalOnKeyDown,
|
|
51
48
|
onPaste: externalOnPaste,
|
|
@@ -59,9 +56,24 @@ const usePersianNumberInput = (props = {}) => {
|
|
|
59
56
|
setIsInvalid(!valid);
|
|
60
57
|
const prevFormatted = (0, transformNumber_1.transformNumber)(rawValue, transformOpts);
|
|
61
58
|
const nextFormatted = (0, transformNumber_1.transformNumber)(sanitized, transformOpts);
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
|
|
59
|
+
cursorTrigger.current += 1;
|
|
60
|
+
const formattedCursor = input.selectionStart ?? 0;
|
|
61
|
+
let rawCursor = 0;
|
|
62
|
+
for (let i = 0; i < formattedCursor && i < prevFormatted.length; i++) {
|
|
63
|
+
if (prevFormatted[i] !== separatorChar)
|
|
64
|
+
rawCursor++;
|
|
65
|
+
}
|
|
66
|
+
let newFormattedCursor = nextFormatted.length;
|
|
67
|
+
let rawCount = 0;
|
|
68
|
+
for (let i = 0; i < nextFormatted.length; i++) {
|
|
69
|
+
if (rawCount >= rawCursor) {
|
|
70
|
+
newFormattedCursor = i;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
if (nextFormatted[i] !== separatorChar)
|
|
74
|
+
rawCount++;
|
|
75
|
+
}
|
|
76
|
+
setCursor(newFormattedCursor);
|
|
65
77
|
setRawValue(sanitized);
|
|
66
78
|
if (valid) {
|
|
67
79
|
onValueChange?.(sanitized);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePersianNumberInput.js","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"usePersianNumberInput.js","sourceRoot":"","sources":["../../src/hooks/usePersianNumberInput.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/digitUtils.js
CHANGED
|
@@ -97,7 +97,7 @@ const sanitizeNumericInput = (value, maxDecimals, decimalChar) => {
|
|
|
97
97
|
const isNegative = str.startsWith("-");
|
|
98
98
|
str = (0, exports.stripNonNumeric)(str);
|
|
99
99
|
str = (0, exports.normalizeDecimals)(str);
|
|
100
|
-
if (isNegative
|
|
100
|
+
if (isNegative) {
|
|
101
101
|
str = "-" + str;
|
|
102
102
|
}
|
|
103
103
|
str = (0, exports.stripLeadingZeros)(str);
|
|
@@ -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":"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"}
|
|
@@ -3,10 +3,13 @@ export interface KeyFilterEvent {
|
|
|
3
3
|
ctrlKey: boolean;
|
|
4
4
|
metaKey: boolean;
|
|
5
5
|
altKey: boolean;
|
|
6
|
+
currentValue?: string;
|
|
7
|
+
selectionStart?: number;
|
|
6
8
|
}
|
|
7
9
|
export interface KeyFilterRule {
|
|
8
10
|
pattern?: RegExp;
|
|
9
11
|
key?: string;
|
|
12
|
+
validate?: (e: KeyFilterEvent) => boolean;
|
|
10
13
|
description?: string;
|
|
11
14
|
}
|
|
12
15
|
export type KeyFilter = (e: KeyFilterEvent) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyFilter.d.ts","sourceRoot":"","sources":["../../src/utils/keyFilter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"keyFilter.d.ts","sourceRoot":"","sources":["../../src/utils/keyFilter.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC;AAEvD,eAAO,MAAM,eAAe,GAAI,OAAO,aAAa,EAAE,KAAG,SAUxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,aAAa,EAUhD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,aAAY,aAAa,EAAO,KAC/B,SAaF,CAAC"}
|
package/dist/utils/keyFilter.js
CHANGED
|
@@ -10,6 +10,8 @@ const createKeyFilter = (rules) => {
|
|
|
10
10
|
return true;
|
|
11
11
|
if (rule.pattern?.test(e.key))
|
|
12
12
|
return true;
|
|
13
|
+
if (rule.validate?.(e))
|
|
14
|
+
return true;
|
|
13
15
|
}
|
|
14
16
|
return false;
|
|
15
17
|
};
|
|
@@ -23,9 +25,19 @@ exports.DEFAULT_NUMERIC_RULES = [
|
|
|
23
25
|
{ key: "Home" },
|
|
24
26
|
{ key: "End" },
|
|
25
27
|
{ pattern: /^Arrow/ },
|
|
26
|
-
{ pattern: /^[0-9
|
|
28
|
+
{ pattern: /^[0-9.]$/ },
|
|
27
29
|
{ pattern: /^[\u0660-\u0669\u06F0-\u06F9]$/ },
|
|
28
30
|
];
|
|
29
|
-
const createNumericKeyFilter = (extraRules = []) =>
|
|
31
|
+
const createNumericKeyFilter = (extraRules = []) => {
|
|
32
|
+
const baseRules = exports.DEFAULT_NUMERIC_RULES.filter(r => r.pattern?.source !== "^[0-9.]$");
|
|
33
|
+
const digitRule = { pattern: /^[0-9.]$/ };
|
|
34
|
+
const negativeRule = {
|
|
35
|
+
description: "minus only at start",
|
|
36
|
+
validate: (e) => e.key === "-" &&
|
|
37
|
+
(e.selectionStart ?? 1) === 0 &&
|
|
38
|
+
!(e.currentValue ?? "").startsWith("-"),
|
|
39
|
+
};
|
|
40
|
+
return (0, exports.createKeyFilter)([...baseRules, digitRule, negativeRule, ...extraRules]);
|
|
41
|
+
};
|
|
30
42
|
exports.createNumericKeyFilter = createNumericKeyFilter;
|
|
31
43
|
//# sourceMappingURL=keyFilter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyFilter.js","sourceRoot":"","sources":["../../src/utils/keyFilter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"keyFilter.js","sourceRoot":"","sources":["../../src/utils/keyFilter.ts"],"names":[],"mappings":";;;AAkBO,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAa,EAAE;IACnE,OAAO,CAAC,CAAC,EAAE,EAAE;QACX,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YAChD,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACtC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B;AAEW,QAAA,qBAAqB,GAAoB;IACpD,EAAE,GAAG,EAAE,WAAW,EAAE;IACpB,EAAE,GAAG,EAAE,QAAQ,EAAE;IACjB,EAAE,GAAG,EAAE,KAAK,EAAE;IACd,EAAE,GAAG,EAAE,OAAO,EAAE;IAChB,EAAE,GAAG,EAAE,MAAM,EAAE;IACf,EAAE,GAAG,EAAE,KAAK,EAAE;IACd,EAAE,OAAO,EAAE,QAAQ,EAAE;IACrB,EAAE,OAAO,EAAE,UAAU,EAAE;IACvB,EAAE,OAAO,EAAE,gCAAgC,EAAE;CAC9C,CAAC;AAEK,MAAM,sBAAsB,GAAG,CACpC,aAA8B,EAAE,EACrB,EAAE;IACb,MAAM,SAAS,GAAG,6BAAqB,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,UAAU,CACtC,CAAC;IACF,MAAM,SAAS,GAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACzD,MAAM,YAAY,GAAkB;QAClC,WAAW,EAAE,qBAAqB;QAClC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,CAAC,CAAC,GAAG,KAAK,GAAG;YACb,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;KAC1C,CAAC;IACF,OAAO,IAAA,uBAAe,EAAC,CAAC,GAAG,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;AACjF,CAAC,CAAC;AAfW,QAAA,sBAAsB,0BAejC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformNumber.d.ts","sourceRoot":"","sources":["../../src/utils/transformNumber.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,GAAG,SAAS,EAC5B,UAAU,sBAAsB,KAC/B,
|
|
1
|
+
{"version":3,"file":"transformNumber.d.ts","sourceRoot":"","sources":["../../src/utils/transformNumber.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,GAAG,SAAS,EAC5B,UAAU,sBAAsB,KAC/B,MA4CF,CAAC"}
|
|
@@ -27,6 +27,8 @@ const transformNumber = (rawValue, options) => {
|
|
|
27
27
|
if (locale !== "en") {
|
|
28
28
|
finalStr = (0, digitUtils_1.toLocalizedDigits)(finalStr, locale);
|
|
29
29
|
}
|
|
30
|
+
if (suffix)
|
|
31
|
+
finalStr = `${finalStr}${suffix}`;
|
|
30
32
|
return finalStr;
|
|
31
33
|
};
|
|
32
34
|
exports.transformNumber = transformNumber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformNumber.js","sourceRoot":"","sources":["../../src/utils/transformNumber.ts"],"names":[],"mappings":";;;AAAA,6CAIsB;AAYf,MAAM,eAAe,GAAG,CAC7B,QAA4B,EAC5B,OAAgC,EACxB,EAAE;IACV,MAAM,EACJ,cAAc,GAAG,CAAC,EAClB,aAAa,GAAG,GAAG,EACnB,WAAW,EACX,MAAM,EACN,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,KAAK,GACjB,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACnE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAA,8BAAiB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE9C,MAAM,UAAU,GACd,WAAW,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE7E,IAAI,UAAU,KAAK,EAAE,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAA,8BAAiB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,wBAAW,EAAC,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IAE1E,IAAI,QAAQ,GAAG,UAAU,CAAC;IAC1B,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,GAAG,GAAG,UAAU,IAAI,cAAc,EAAE,CAAC;IAC/C,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,QAAQ,GAAG,GAAG,UAAU,GAAG,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACnC,QAAQ,GAAG,IAAA,qCAAwB,EAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,QAAQ,GAAG,IAAA,8BAAiB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"transformNumber.js","sourceRoot":"","sources":["../../src/utils/transformNumber.ts"],"names":[],"mappings":";;;AAAA,6CAIsB;AAYf,MAAM,eAAe,GAAG,CAC7B,QAA4B,EAC5B,OAAgC,EACxB,EAAE;IACV,MAAM,EACJ,cAAc,GAAG,CAAC,EAClB,aAAa,GAAG,GAAG,EACnB,WAAW,EACX,MAAM,EACN,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,KAAK,GACjB,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACnE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAA,8BAAiB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE9C,MAAM,UAAU,GACd,WAAW,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE7E,IAAI,UAAU,KAAK,EAAE,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAA,8BAAiB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,GAAG,IAAA,wBAAW,EAAC,UAAU,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IAE1E,IAAI,QAAQ,GAAG,UAAU,CAAC;IAC1B,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,GAAG,GAAG,UAAU,IAAI,cAAc,EAAE,CAAC;IAC/C,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,QAAQ,GAAG,GAAG,UAAU,GAAG,CAAC;IAC9B,CAAC;IAED,IAAI,WAAW,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACnC,QAAQ,GAAG,IAAA,qCAAwB,EAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,QAAQ,GAAG,IAAA,8BAAiB,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,MAAM;QAAE,QAAQ,GAAG,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC;IAE9C,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AA/CW,QAAA,eAAe,mBA+C1B"}
|
package/dist/utils/validation.js
CHANGED
|
@@ -41,7 +41,7 @@ function compareNumericStrings(a, b) {
|
|
|
41
41
|
const createMaxRule = (max, timing = ValidationTiming.OnChange) => ({
|
|
42
42
|
timing,
|
|
43
43
|
validate: (rawValue) => {
|
|
44
|
-
if (rawValue === "" || rawValue === "." || max === undefined) {
|
|
44
|
+
if (rawValue === "" || rawValue === "." || rawValue === "-" || max === undefined) {
|
|
45
45
|
return { valid: true };
|
|
46
46
|
}
|
|
47
47
|
const maxStr = String(max);
|
|
@@ -58,7 +58,7 @@ exports.createMaxRule = createMaxRule;
|
|
|
58
58
|
const createMinRule = (min) => ({
|
|
59
59
|
timing: ValidationTiming.OnBlur,
|
|
60
60
|
validate: (rawValue) => {
|
|
61
|
-
if (!rawValue || rawValue === "." || min === undefined) {
|
|
61
|
+
if (!rawValue || rawValue === "." || rawValue === "-" || min === undefined) {
|
|
62
62
|
return { valid: true };
|
|
63
63
|
}
|
|
64
64
|
const minStr = String(min);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED