persian-number-input 4.3.2 → 4.5.0

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.
Files changed (47) hide show
  1. package/README.fa.md +190 -240
  2. package/README.md +152 -230
  3. package/dist/components/PersianNumberInput.d.ts +1 -1
  4. package/dist/components/PersianNumberInput.d.ts.map +1 -1
  5. package/dist/components/PersianNumberInput.js +22 -17
  6. package/dist/components/PersianNumberInput.js.map +1 -1
  7. package/dist/components/PersianNumberInput.test.d.ts +2 -0
  8. package/dist/components/PersianNumberInput.test.d.ts.map +1 -0
  9. package/dist/components/PersianNumberInput.test.js +394 -0
  10. package/dist/components/PersianNumberInput.test.js.map +1 -0
  11. package/dist/hooks/useCursorManager.d.ts +4 -0
  12. package/dist/hooks/useCursorManager.d.ts.map +1 -0
  13. package/dist/hooks/useCursorManager.js +19 -0
  14. package/dist/hooks/useCursorManager.js.map +1 -0
  15. package/dist/hooks/useNumberFormatter.d.ts +18 -0
  16. package/dist/hooks/useNumberFormatter.d.ts.map +1 -0
  17. package/dist/hooks/useNumberFormatter.js +29 -0
  18. package/dist/hooks/useNumberFormatter.js.map +1 -0
  19. package/dist/hooks/useNumberValidation.d.ts +11 -0
  20. package/dist/hooks/useNumberValidation.d.ts.map +1 -0
  21. package/dist/hooks/useNumberValidation.js +22 -0
  22. package/dist/hooks/useNumberValidation.js.map +1 -0
  23. package/dist/hooks/useNumericInputEvents.d.ts +18 -0
  24. package/dist/hooks/useNumericInputEvents.d.ts.map +1 -0
  25. package/dist/hooks/useNumericInputEvents.js +39 -0
  26. package/dist/hooks/useNumericInputEvents.js.map +1 -0
  27. package/dist/hooks/usePersianNumberInput.d.ts +7 -2
  28. package/dist/hooks/usePersianNumberInput.d.ts.map +1 -1
  29. package/dist/hooks/usePersianNumberInput.js +66 -63
  30. package/dist/hooks/usePersianNumberInput.js.map +1 -1
  31. package/dist/test-utils.d.ts +7 -0
  32. package/dist/test-utils.d.ts.map +1 -0
  33. package/dist/test-utils.js +27 -0
  34. package/dist/test-utils.js.map +1 -0
  35. package/dist/utils/digitUtils.d.ts +4 -0
  36. package/dist/utils/digitUtils.d.ts.map +1 -1
  37. package/dist/utils/digitUtils.js +44 -17
  38. package/dist/utils/digitUtils.js.map +1 -1
  39. package/dist/utils/keyFilter.d.ts +16 -0
  40. package/dist/utils/keyFilter.d.ts.map +1 -0
  41. package/dist/utils/keyFilter.js +31 -0
  42. package/dist/utils/keyFilter.js.map +1 -0
  43. package/dist/utils/validation.d.ts +22 -0
  44. package/dist/utils/validation.d.ts.map +1 -0
  45. package/dist/utils/validation.js +85 -0
  46. package/dist/utils/validation.js.map +1 -0
  47. package/package.json +19 -7
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PersianNumberInput.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersianNumberInput.test.d.ts","sourceRoot":"","sources":["../../src/components/PersianNumberInput.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,394 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const vitest_1 = require("vitest");
8
+ const react_1 = require("@testing-library/react");
9
+ const PersianNumberInput_1 = __importDefault(require("./PersianNumberInput"));
10
+ (0, vitest_1.describe)("PersianNumberInput", () => {
11
+ (0, vitest_1.describe)("rendering", () => {
12
+ (0, vitest_1.it)("renders an input element", () => {
13
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
14
+ const input = react_1.screen.getByRole("textbox");
15
+ (0, vitest_1.expect)(input).toBeInTheDocument();
16
+ });
17
+ (0, vitest_1.it)("has type=text", () => {
18
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
19
+ const input = react_1.screen.getByRole("textbox");
20
+ (0, vitest_1.expect)(input).toHaveAttribute("type", "text");
21
+ });
22
+ (0, vitest_1.it)("has inputMode=decimal", () => {
23
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
24
+ const input = react_1.screen.getByRole("textbox");
25
+ (0, vitest_1.expect)(input).toHaveAttribute("inputMode", "decimal");
26
+ });
27
+ (0, vitest_1.it)("has dir=ltr", () => {
28
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
29
+ const input = react_1.screen.getByRole("textbox");
30
+ (0, vitest_1.expect)(input).toHaveAttribute("dir", "ltr");
31
+ });
32
+ (0, vitest_1.it)("renders with empty value by default", () => {
33
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
34
+ const input = react_1.screen.getByRole("textbox");
35
+ (0, vitest_1.expect)(input).toHaveValue("");
36
+ });
37
+ (0, vitest_1.it)("renders with initialValue", () => {
38
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 1234 }));
39
+ const input = react_1.screen.getByRole("textbox");
40
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
41
+ });
42
+ (0, vitest_1.it)("renders with string initialValue", () => {
43
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: "5678.9" }));
44
+ const input = react_1.screen.getByRole("textbox");
45
+ (0, vitest_1.expect)(input).toHaveValue("۵,۶۷۸٫۹");
46
+ });
47
+ });
48
+ (0, vitest_1.describe)("props forwarding", () => {
49
+ (0, vitest_1.it)("forwards placeholder prop", () => {
50
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { placeholder: "Enter number" }));
51
+ const input = react_1.screen.getByRole("textbox");
52
+ (0, vitest_1.expect)(input).toHaveAttribute("placeholder", "Enter number");
53
+ });
54
+ (0, vitest_1.it)("forwards disabled prop", () => {
55
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { disabled: true }));
56
+ const input = react_1.screen.getByRole("textbox");
57
+ (0, vitest_1.expect)(input).toBeDisabled();
58
+ });
59
+ (0, vitest_1.it)("forwards className prop", () => {
60
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { className: "my-class" }));
61
+ const input = react_1.screen.getByRole("textbox");
62
+ (0, vitest_1.expect)(input).toHaveClass("my-class");
63
+ });
64
+ (0, vitest_1.it)("forwards id prop", () => {
65
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { id: "my-input" }));
66
+ const input = react_1.screen.getByRole("textbox");
67
+ (0, vitest_1.expect)(input).toHaveAttribute("id", "my-input");
68
+ });
69
+ (0, vitest_1.it)("forwards style prop", () => {
70
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { style: { color: "red" } }));
71
+ const input = react_1.screen.getByRole("textbox");
72
+ (0, vitest_1.expect)(input).toHaveStyle({ color: "rgb(255, 0, 0)" });
73
+ });
74
+ (0, vitest_1.it)("forwards autoFocus prop", () => {
75
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { autoFocus: true }));
76
+ const input = react_1.screen.getByRole("textbox");
77
+ (0, vitest_1.expect)(input).toHaveFocus();
78
+ });
79
+ });
80
+ (0, vitest_1.describe)("onChange", () => {
81
+ (0, vitest_1.it)("updates display on input", () => {
82
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
83
+ const input = react_1.screen.getByRole("textbox");
84
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
85
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
86
+ });
87
+ (0, vitest_1.it)("handles Persian digits input", () => {
88
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
89
+ const input = react_1.screen.getByRole("textbox");
90
+ react_1.fireEvent.change(input, { target: { value: "۱۲۳۴" } });
91
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
92
+ });
93
+ (0, vitest_1.it)("handles Arabic digits input", () => {
94
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
95
+ const input = react_1.screen.getByRole("textbox");
96
+ react_1.fireEvent.change(input, { target: { value: "١٢٣٤" } });
97
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
98
+ });
99
+ (0, vitest_1.it)("handles decimal input", () => {
100
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
101
+ const input = react_1.screen.getByRole("textbox");
102
+ react_1.fireEvent.change(input, { target: { value: "12.34" } });
103
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫۳۴");
104
+ });
105
+ (0, vitest_1.it)("handles clearing input", () => {
106
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 1234 }));
107
+ const input = react_1.screen.getByRole("textbox");
108
+ react_1.fireEvent.change(input, { target: { value: "" } });
109
+ (0, vitest_1.expect)(input).toHaveValue("");
110
+ });
111
+ (0, vitest_1.it)("handles typing with trailing dot", () => {
112
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
113
+ const input = react_1.screen.getByRole("textbox");
114
+ react_1.fireEvent.change(input, { target: { value: "12." } });
115
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫");
116
+ });
117
+ });
118
+ (0, vitest_1.describe)("onValueChange", () => {
119
+ (0, vitest_1.it)("calls onValueChange with raw value", () => {
120
+ const onValueChange = vitest_1.vi.fn();
121
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { onValueChange: onValueChange }));
122
+ const input = react_1.screen.getByRole("textbox");
123
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
124
+ (0, vitest_1.expect)(onValueChange).toHaveBeenCalledWith("1234");
125
+ });
126
+ (0, vitest_1.it)("calls onValueChange when cleared", () => {
127
+ const onValueChange = vitest_1.vi.fn();
128
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 1234, onValueChange: onValueChange }));
129
+ const input = react_1.screen.getByRole("textbox");
130
+ react_1.fireEvent.change(input, { target: { value: "" } });
131
+ (0, vitest_1.expect)(onValueChange).toHaveBeenCalledWith("");
132
+ });
133
+ });
134
+ (0, vitest_1.describe)("max validation", () => {
135
+ (0, vitest_1.it)("does not block input above max but marks invalid", () => {
136
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { max: 100 }));
137
+ const input = react_1.screen.getByRole("textbox");
138
+ react_1.fireEvent.change(input, { target: { value: "150" } });
139
+ (0, vitest_1.expect)(input).toHaveValue("۱۵۰");
140
+ (0, vitest_1.expect)(input).toHaveAttribute("aria-invalid", "true");
141
+ });
142
+ (0, vitest_1.it)("allows input at max", () => {
143
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { max: 100 }));
144
+ const input = react_1.screen.getByRole("textbox");
145
+ react_1.fireEvent.change(input, { target: { value: "100" } });
146
+ (0, vitest_1.expect)(input).toHaveValue("۱۰۰");
147
+ });
148
+ (0, vitest_1.it)("allows input below max", () => {
149
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { max: 100 }));
150
+ const input = react_1.screen.getByRole("textbox");
151
+ react_1.fireEvent.change(input, { target: { value: "50" } });
152
+ (0, vitest_1.expect)(input).toHaveValue("۵۰");
153
+ });
154
+ (0, vitest_1.it)("clamps to max on blur when value exceeds max", () => {
155
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { max: 100 }));
156
+ const input = react_1.screen.getByRole("textbox");
157
+ react_1.fireEvent.change(input, { target: { value: "150" } });
158
+ (0, vitest_1.expect)(input).toHaveAttribute("aria-invalid", "true");
159
+ react_1.fireEvent.blur(input);
160
+ (0, vitest_1.expect)(input).toHaveValue("۱۰۰");
161
+ (0, vitest_1.expect)(input).not.toHaveAttribute("aria-invalid");
162
+ });
163
+ (0, vitest_1.it)("does not change valid value on blur", () => {
164
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { max: 100 }));
165
+ const input = react_1.screen.getByRole("textbox");
166
+ react_1.fireEvent.change(input, { target: { value: "50" } });
167
+ react_1.fireEvent.blur(input);
168
+ (0, vitest_1.expect)(input).toHaveValue("۵۰");
169
+ (0, vitest_1.expect)(input).not.toHaveAttribute("aria-invalid");
170
+ });
171
+ });
172
+ (0, vitest_1.describe)("min validation (onBlur)", () => {
173
+ (0, vitest_1.it)("clamps to min on blur", () => {
174
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 5, min: 10 }));
175
+ const input = react_1.screen.getByRole("textbox");
176
+ react_1.fireEvent.blur(input);
177
+ (0, vitest_1.expect)(input).toHaveValue("۱۰");
178
+ });
179
+ (0, vitest_1.it)("does not change value above min on blur", () => {
180
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 50, min: 10 }));
181
+ const input = react_1.screen.getByRole("textbox");
182
+ react_1.fireEvent.blur(input);
183
+ (0, vitest_1.expect)(input).toHaveValue("۵۰");
184
+ });
185
+ });
186
+ (0, vitest_1.describe)("maxDecimals", () => {
187
+ (0, vitest_1.it)("truncates decimals to maxDecimals", () => {
188
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { maxDecimals: 2 }));
189
+ const input = react_1.screen.getByRole("textbox");
190
+ react_1.fireEvent.change(input, { target: { value: "12.3456" } });
191
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫۳۴");
192
+ });
193
+ });
194
+ (0, vitest_1.describe)("suffix", () => {
195
+ (0, vitest_1.it)("displays suffix", () => {
196
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { suffix: "\u0645\u062A\u0631" }));
197
+ const input = react_1.screen.getByRole("textbox");
198
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
199
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴ متر");
200
+ });
201
+ });
202
+ (0, vitest_1.describe)("locale", () => {
203
+ (0, vitest_1.it)("formats with English locale", () => {
204
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { locale: "en" }));
205
+ const input = react_1.screen.getByRole("textbox");
206
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
207
+ (0, vitest_1.expect)(input).toHaveValue("1,234");
208
+ });
209
+ (0, vitest_1.it)("keeps dot as decimal separator with English locale", () => {
210
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { locale: "en" }));
211
+ const input = react_1.screen.getByRole("textbox");
212
+ react_1.fireEvent.change(input, { target: { value: "12.34" } });
213
+ (0, vitest_1.expect)(input).toHaveValue("12.34");
214
+ });
215
+ });
216
+ (0, vitest_1.describe)("separator customization", () => {
217
+ (0, vitest_1.it)("uses custom separatorChar", () => {
218
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { separatorChar: "/" }));
219
+ const input = react_1.screen.getByRole("textbox");
220
+ react_1.fireEvent.change(input, { target: { value: "1000000" } });
221
+ (0, vitest_1.expect)(input).toHaveValue("۱/۰۰۰/۰۰۰");
222
+ });
223
+ (0, vitest_1.it)("uses custom separatorCount", () => {
224
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { separatorCount: 2 }));
225
+ const input = react_1.screen.getByRole("textbox");
226
+ react_1.fireEvent.change(input, { target: { value: "10000" } });
227
+ (0, vitest_1.expect)(input).toHaveValue("۱,۰۰,۰۰");
228
+ });
229
+ });
230
+ (0, vitest_1.describe)("showZero", () => {
231
+ (0, vitest_1.it)("shows zero when showZero is true and input is empty", () => {
232
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { showZero: true }));
233
+ const input = react_1.screen.getByRole("textbox");
234
+ (0, vitest_1.expect)(input).toHaveValue("۰");
235
+ });
236
+ (0, vitest_1.it)("shows zero with suffix", () => {
237
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { showZero: true, suffix: "\u0631\u06CC\u0627\u0644" }));
238
+ const input = react_1.screen.getByRole("textbox");
239
+ (0, vitest_1.expect)(input).toHaveValue("۰ ریال");
240
+ });
241
+ });
242
+ (0, vitest_1.describe)("edge cases", () => {
243
+ (0, vitest_1.it)("handles negative numbers", () => {
244
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
245
+ const input = react_1.screen.getByRole("textbox");
246
+ react_1.fireEvent.change(input, { target: { value: "-1234" } });
247
+ (0, vitest_1.expect)(input).toHaveValue("-۱,۲۳۴");
248
+ });
249
+ (0, vitest_1.it)("handles very large numbers", () => {
250
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
251
+ const input = react_1.screen.getByRole("textbox");
252
+ react_1.fireEvent.change(input, { target: { value: "999999999" } });
253
+ (0, vitest_1.expect)(input).toHaveValue("۹۹۹,۹۹۹,۹۹۹");
254
+ });
255
+ (0, vitest_1.it)("handles multiple rapid changes", () => {
256
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
257
+ const input = react_1.screen.getByRole("textbox");
258
+ react_1.fireEvent.change(input, { target: { value: "123" } });
259
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
260
+ react_1.fireEvent.change(input, { target: { value: "12345" } });
261
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
262
+ react_1.fireEvent.change(input, { target: { value: "123" } });
263
+ (0, vitest_1.expect)(input).toHaveValue("۱۲۳");
264
+ });
265
+ (0, vitest_1.it)("handles typing then clearing", () => {
266
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
267
+ const input = react_1.screen.getByRole("textbox");
268
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
269
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
270
+ react_1.fireEvent.change(input, { target: { value: "" } });
271
+ (0, vitest_1.expect)(input).toHaveValue("");
272
+ });
273
+ });
274
+ (0, vitest_1.describe)("ref forwarding", () => {
275
+ (0, vitest_1.it)("forwards ref to input element", () => {
276
+ const ref = vitest_1.vi.fn();
277
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { ref: ref }));
278
+ (0, vitest_1.expect)(ref).toHaveBeenCalled();
279
+ (0, vitest_1.expect)(ref.mock.calls[0][0]).toBeInstanceOf(HTMLInputElement);
280
+ });
281
+ });
282
+ (0, vitest_1.describe)("onBlur callback", () => {
283
+ (0, vitest_1.it)("calls external onBlur", () => {
284
+ const onBlur = vitest_1.vi.fn();
285
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { onBlur: onBlur }));
286
+ const input = react_1.screen.getByRole("textbox");
287
+ react_1.fireEvent.blur(input);
288
+ (0, vitest_1.expect)(onBlur).toHaveBeenCalled();
289
+ });
290
+ });
291
+ (0, vitest_1.describe)("RTL/LTR direction handling", () => {
292
+ (0, vitest_1.it)("respects developer-provided dir override", () => {
293
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { dir: "rtl" }));
294
+ const input = react_1.screen.getByRole("textbox");
295
+ (0, vitest_1.expect)(input).toHaveAttribute("dir", "rtl");
296
+ });
297
+ (0, vitest_1.it)("maintains correct input behavior with ltr direction - typing", () => {
298
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
299
+ const input = react_1.screen.getByRole("textbox");
300
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
301
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
302
+ });
303
+ (0, vitest_1.it)("maintains correct input behavior with ltr direction - deleting last character", () => {
304
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 12345 }));
305
+ const input = react_1.screen.getByRole("textbox");
306
+ (0, vitest_1.expect)(input).toHaveValue("۱۲,۳۴۵");
307
+ react_1.fireEvent.change(input, { target: { value: "۱۲,۳۴" } });
308
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
309
+ (0, vitest_1.expect)(input).toHaveAttribute("dir", "ltr");
310
+ });
311
+ (0, vitest_1.it)("maintains correct input behavior with ltr direction - deleting first character", () => {
312
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 12345 }));
313
+ const input = react_1.screen.getByRole("textbox");
314
+ (0, vitest_1.expect)(input).toHaveValue("۱۲,۳۴۵");
315
+ react_1.fireEvent.change(input, { target: { value: "۲,۳۴۵" } });
316
+ (0, vitest_1.expect)(input).toHaveValue("۲,۳۴۵");
317
+ });
318
+ (0, vitest_1.it)("maintains correct input behavior with ltr direction - deleting middle character", () => {
319
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 123456 }));
320
+ const input = react_1.screen.getByRole("textbox");
321
+ (0, vitest_1.expect)(input).toHaveValue("۱۲۳,۴۵۶");
322
+ react_1.fireEvent.change(input, { target: { value: "۱۲۴,۵۶" } });
323
+ (0, vitest_1.expect)(input).toHaveValue("۱۲,۴۵۶");
324
+ });
325
+ (0, vitest_1.it)("handles decimal deletion correctly in ltr mode", () => {
326
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: "12.34" }));
327
+ const input = react_1.screen.getByRole("textbox");
328
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫۳۴");
329
+ react_1.fireEvent.change(input, { target: { value: "۱۲" } });
330
+ (0, vitest_1.expect)(input).toHaveValue("۱۲");
331
+ });
332
+ (0, vitest_1.it)("handles partial decimal deletion correctly in ltr mode", () => {
333
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: "12.34" }));
334
+ const input = react_1.screen.getByRole("textbox");
335
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫۳۴");
336
+ react_1.fireEvent.change(input, { target: { value: "۱۲٫۳" } });
337
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫۳");
338
+ });
339
+ (0, vitest_1.it)("handles suffix deletion correctly in ltr mode", () => {
340
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { suffix: "\u0645\u062A\u0631" }));
341
+ const input = react_1.screen.getByRole("textbox");
342
+ react_1.fireEvent.change(input, { target: { value: "1234" } });
343
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴ متر");
344
+ react_1.fireEvent.change(input, { target: { value: "۱,۲۳" } });
345
+ (0, vitest_1.expect)(input).toHaveValue("۱۲۳ متر");
346
+ });
347
+ (0, vitest_1.it)("handles rapid character deletion in ltr mode", () => {
348
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 1234567 }));
349
+ const input = react_1.screen.getByRole("textbox");
350
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴,۵۶۷");
351
+ react_1.fireEvent.change(input, { target: { value: "۱,۲۳" } });
352
+ (0, vitest_1.expect)(input).toHaveValue("۱۲۳");
353
+ });
354
+ (0, vitest_1.it)("handles rapid character addition in ltr mode", () => {
355
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: 123 }));
356
+ const input = react_1.screen.getByRole("textbox");
357
+ (0, vitest_1.expect)(input).toHaveValue("۱۲۳");
358
+ react_1.fireEvent.change(input, { target: { value: "۱,۲۳۴,۵۶۷" } });
359
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴,۵۶۷");
360
+ });
361
+ (0, vitest_1.it)("handles mixed Persian/English digits deletion in ltr mode", () => {
362
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
363
+ const input = react_1.screen.getByRole("textbox");
364
+ react_1.fireEvent.change(input, { target: { value: "۱۲3۴" } });
365
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
366
+ react_1.fireEvent.change(input, { target: { value: "۱۲۴" } });
367
+ (0, vitest_1.expect)(input).toHaveValue("۱۲۴");
368
+ });
369
+ (0, vitest_1.it)("handles Arabic digit deletion in ltr mode", () => {
370
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
371
+ const input = react_1.screen.getByRole("textbox");
372
+ react_1.fireEvent.change(input, { target: { value: "١٢٣٤" } });
373
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
374
+ react_1.fireEvent.change(input, { target: { value: "١٢٤" } });
375
+ (0, vitest_1.expect)(input).toHaveValue("۱۲۴");
376
+ });
377
+ (0, vitest_1.it)("handles decimal point deletion from end in ltr mode", () => {
378
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
379
+ const input = react_1.screen.getByRole("textbox");
380
+ react_1.fireEvent.change(input, { target: { value: "12.34" } });
381
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫۳۴");
382
+ react_1.fireEvent.change(input, { target: { value: "۱۲." } });
383
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫");
384
+ });
385
+ (0, vitest_1.it)("handles decimal point deletion from middle in ltr mode", () => {
386
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { initialValue: "12.34" }));
387
+ const input = react_1.screen.getByRole("textbox");
388
+ (0, vitest_1.expect)(input).toHaveValue("۱۲٫۳۴");
389
+ react_1.fireEvent.change(input, { target: { value: "۱۲۳۴" } });
390
+ (0, vitest_1.expect)(input).toHaveValue("۱,۲۳۴");
391
+ });
392
+ });
393
+ });
394
+ //# sourceMappingURL=PersianNumberInput.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersianNumberInput.test.js","sourceRoot":"","sources":["../../src/components/PersianNumberInput.test.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const useCursorManager: (inputRef: React.RefObject<HTMLInputElement | null>, trigger: number) => {
2
+ setCursor: (pos: number) => void;
3
+ };
4
+ //# sourceMappingURL=useCursorManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCursorManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useCursorManager.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,GAC3B,UAAU,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,EAClD,SAAS,MAAM;qBAIqB,MAAM;CAe3C,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCursorManager = void 0;
4
+ const react_1 = require("react");
5
+ const useCursorManager = (inputRef, trigger) => {
6
+ const cursorRef = (0, react_1.useRef)(null);
7
+ const setCursor = (0, react_1.useCallback)((pos) => {
8
+ cursorRef.current = pos;
9
+ }, []);
10
+ (0, react_1.useLayoutEffect)(() => {
11
+ if (inputRef.current && cursorRef.current !== null) {
12
+ inputRef.current.setSelectionRange(cursorRef.current, cursorRef.current);
13
+ cursorRef.current = null;
14
+ }
15
+ }, [trigger, inputRef]);
16
+ return { setCursor };
17
+ };
18
+ exports.useCursorManager = useCursorManager;
19
+ //# sourceMappingURL=useCursorManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCursorManager.js","sourceRoot":"","sources":["../../src/hooks/useCursorManager.ts"],"names":[],"mappings":";;;AAAA,iCAA6D;AAEtD,MAAM,gBAAgB,GAAG,CAC9B,QAAkD,EAClD,OAAe,EACf,EAAE;IACF,MAAM,SAAS,GAAG,IAAA,cAAM,EAAgB,IAAI,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,CAAC,GAAW,EAAE,EAAE;QAC5C,SAAS,CAAC,OAAO,GAAG,GAAG,CAAC;IAC1B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAA,uBAAe,EAAC,GAAG,EAAE;QACnB,IAAI,QAAQ,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACnD,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAChC,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,OAAO,CAClB,CAAC;YACF,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExB,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC,CAAC;AArBW,QAAA,gBAAgB,oBAqB3B"}
@@ -0,0 +1,18 @@
1
+ import { TransformNumberOptions } from "../utils/transformNumber";
2
+ type FormatterOptions = Omit<TransformNumberOptions, "maxDecimals"> & {
3
+ maxDecimals?: number;
4
+ };
5
+ export declare const useNumberFormatter: (rawValue: string | undefined, options: FormatterOptions) => {
6
+ displayValue: string;
7
+ transformOpts: {
8
+ separatorCount: number;
9
+ separatorChar: string;
10
+ decimalChar: string | undefined;
11
+ suffix: string | undefined;
12
+ locale: string;
13
+ showZero: boolean;
14
+ maxDecimals: number | undefined;
15
+ };
16
+ };
17
+ export {};
18
+ //# sourceMappingURL=useNumberFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNumberFormatter.d.ts","sourceRoot":"","sources":["../../src/hooks/useNumberFormatter.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAElC,KAAK,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,GAAG;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,GAAG,SAAS,EAC5B,SAAS,gBAAgB;;;;;;;;;;;CAoC1B,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useNumberFormatter = void 0;
4
+ const react_1 = require("react");
5
+ const transformNumber_1 = require("../utils/transformNumber");
6
+ const useNumberFormatter = (rawValue, options) => {
7
+ const { separatorCount = 3, separatorChar = ",", decimalChar, suffix, locale = "fa", showZero = false, maxDecimals, } = options;
8
+ const transformOpts = (0, react_1.useMemo)(() => ({
9
+ separatorCount,
10
+ separatorChar,
11
+ decimalChar,
12
+ suffix,
13
+ locale,
14
+ showZero,
15
+ maxDecimals,
16
+ }), [
17
+ separatorCount,
18
+ separatorChar,
19
+ decimalChar,
20
+ suffix,
21
+ locale,
22
+ showZero,
23
+ maxDecimals,
24
+ ]);
25
+ const displayValue = (0, transformNumber_1.transformNumber)(rawValue, transformOpts);
26
+ return { displayValue, transformOpts };
27
+ };
28
+ exports.useNumberFormatter = useNumberFormatter;
29
+ //# sourceMappingURL=useNumberFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNumberFormatter.js","sourceRoot":"","sources":["../../src/hooks/useNumberFormatter.ts"],"names":[],"mappings":";;;AAAA,iCAAgC;AAChC,8DAGkC;AAM3B,MAAM,kBAAkB,GAAG,CAChC,QAA4B,EAC5B,OAAyB,EACzB,EAAE;IACF,MAAM,EACJ,cAAc,GAAG,CAAC,EAClB,aAAa,GAAG,GAAG,EACnB,WAAW,EACX,MAAM,EACN,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,KAAK,EAChB,WAAW,GACZ,GAAG,OAAO,CAAC;IAEZ,MAAM,aAAa,GAAG,IAAA,eAAO,EAC3B,GAAG,EAAE,CAAC,CAAC;QACL,cAAc;QACd,aAAa;QACb,WAAW;QACX,MAAM;QACN,MAAM;QACN,QAAQ;QACR,WAAW;KACZ,CAAC,EACF;QACE,cAAc;QACd,aAAa;QACb,WAAW;QACX,MAAM;QACN,MAAM;QACN,QAAQ;QACR,WAAW;KACZ,CACF,CAAC;IAEF,MAAM,YAAY,GAAG,IAAA,iCAAe,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAE9D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AACzC,CAAC,CAAC;AAtCW,QAAA,kBAAkB,sBAsC7B"}
@@ -0,0 +1,11 @@
1
+ import { ValidationResult } from "../utils/validation";
2
+ interface ValidationOptions {
3
+ min?: number;
4
+ max?: number;
5
+ }
6
+ export declare const useNumberValidation: (options: ValidationOptions) => {
7
+ validateOnChange: (nextRaw: string) => boolean;
8
+ validateOnBlur: (rawValue: string) => ValidationResult;
9
+ };
10
+ export {};
11
+ //# sourceMappingURL=useNumberValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNumberValidation.d.ts","sourceRoot":"","sources":["../../src/hooks/useNumberValidation.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAE7B,UAAU,iBAAiB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,mBAAmB,GAAI,SAAS,iBAAiB;gCAYhD,MAAM,KAAG,OAAO;+BAQf,MAAM,KAAG,gBAAgB;CAOvC,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useNumberValidation = void 0;
4
+ const react_1 = require("react");
5
+ const validation_1 = require("../utils/validation");
6
+ const useNumberValidation = (options) => {
7
+ const engine = (0, react_1.useMemo)(() => (0, validation_1.createValidationEngine)([
8
+ (0, validation_1.createMaxRule)(options.max, validation_1.ValidationTiming.OnChange),
9
+ (0, validation_1.createMaxRule)(options.max, validation_1.ValidationTiming.OnBlur),
10
+ (0, validation_1.createMinRule)(options.min),
11
+ ]), [options.max, options.min]);
12
+ const validateOnChange = (0, react_1.useCallback)((nextRaw) => {
13
+ const result = engine.validate(validation_1.ValidationTiming.OnChange, nextRaw);
14
+ return result.valid;
15
+ }, [engine]);
16
+ const validateOnBlur = (0, react_1.useCallback)((rawValue) => {
17
+ return engine.validate(validation_1.ValidationTiming.OnBlur, rawValue);
18
+ }, [engine]);
19
+ return { validateOnChange, validateOnBlur };
20
+ };
21
+ exports.useNumberValidation = useNumberValidation;
22
+ //# sourceMappingURL=useNumberValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNumberValidation.js","sourceRoot":"","sources":["../../src/hooks/useNumberValidation.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAC7C,oDAM6B;AAOtB,MAAM,mBAAmB,GAAG,CAAC,OAA0B,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,IAAA,eAAO,EACpB,GAAG,EAAE,CACH,IAAA,mCAAsB,EAAC;QACrB,IAAA,0BAAa,EAAC,OAAO,CAAC,GAAG,EAAE,6BAAgB,CAAC,QAAQ,CAAC;QACrD,IAAA,0BAAa,EAAC,OAAO,CAAC,GAAG,EAAE,6BAAgB,CAAC,MAAM,CAAC;QACnD,IAAA,0BAAa,EAAC,OAAO,CAAC,GAAG,CAAC;KAC3B,CAAC,EACJ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAC3B,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAClC,CAAC,OAAe,EAAW,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,6BAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,cAAc,GAAG,IAAA,mBAAW,EAChC,CAAC,QAAgB,EAAoB,EAAE;QACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,6BAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;AAC9C,CAAC,CAAC;AA3BW,QAAA,mBAAmB,uBA2B9B"}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { KeyFilter } from "../utils/keyFilter";
3
+ interface EventOptions {
4
+ keyFilter: KeyFilter;
5
+ suffix?: string;
6
+ rawValue: string;
7
+ maxDecimals?: number;
8
+ decimalChar?: string;
9
+ updateValue: (value: string) => void;
10
+ onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
11
+ onPaste?: React.ClipboardEventHandler<HTMLInputElement>;
12
+ }
13
+ export declare const useNumericInputEvents: (options: EventOptions) => {
14
+ onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void;
15
+ onPaste: (e: React.ClipboardEvent<HTMLInputElement>) => void;
16
+ };
17
+ export {};
18
+ //# sourceMappingURL=useNumericInputEvents.d.ts.map
@@ -0,0 +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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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;mBAanD,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC;iBA+BrC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;CAY7C,CAAC"}