persian-number-input 4.1.0 → 4.2.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.
@@ -1 +1 @@
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,kGA+CtB,CAAC;AAIH,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,kGAiDtB,CAAC;AAIH,eAAe,kBAAkB,CAAC"}
@@ -15,12 +15,13 @@ const jsx_runtime_1 = require("react/jsx-runtime");
15
15
  const react_1 = require("react");
16
16
  const usePersianNumberInput_1 = require("../hooks/usePersianNumberInput");
17
17
  const PersianNumberInput = (0, react_1.forwardRef)((props, ref) => {
18
- const { initialValue, separatorCount, separatorChar, decimalChar, locale, showZero, onValueChange, min, max, maxDecimals, onBlur: propsOnBlur } = props, rest = __rest(props, ["initialValue", "separatorCount", "separatorChar", "decimalChar", "locale", "showZero", "onValueChange", "min", "max", "maxDecimals", "onBlur"]);
18
+ const { initialValue, separatorCount, separatorChar, decimalChar, suffix, locale, showZero, onValueChange, min, max, maxDecimals, onBlur: propsOnBlur } = props, rest = __rest(props, ["initialValue", "separatorCount", "separatorChar", "decimalChar", "suffix", "locale", "showZero", "onValueChange", "min", "max", "maxDecimals", "onBlur"]);
19
19
  const { value, onChange, onBlur, inputRef } = (0, usePersianNumberInput_1.usePersianNumberInput)({
20
20
  initialValue,
21
21
  separatorCount,
22
22
  separatorChar,
23
23
  decimalChar,
24
+ suffix,
24
25
  locale,
25
26
  showZero,
26
27
  onValueChange,
@@ -1 +1 @@
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,WAAW,EACX,MAAM,EACN,QAAQ,EACR,aAAa,EACb,GAAG,EACH,GAAG,EACH,WAAW,EACX,MAAM,EAAE,WAAW,KAEjB,KAAK,EADJ,IAAI,UACL,KAAK,EAbH,gJAaL,CAAQ,CAAC;IAEV,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,6CAAqB,EAAC;QAClE,YAAY;QACZ,cAAc;QACd,aAAa;QACb,WAAW;QACX,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
+ {"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,WAAW,EACX,MAAM,EACN,MAAM,EACN,QAAQ,EACR,aAAa,EACb,GAAG,EACH,GAAG,EACH,WAAW,EACX,MAAM,EAAE,WAAW,KAEjB,KAAK,EADJ,IAAI,UACL,KAAK,EAdH,0JAcL,CAAQ,CAAC;IAEV,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,6CAAqB,EAAC;QAClE,YAAY;QACZ,cAAc;QACd,aAAa;QACb,WAAW;QACX,MAAM;QACN,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"}
@@ -0,0 +1,2 @@
1
+ import "@testing-library/jest-dom";
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":"AAIA,OAAO,2BAA2B,CAAC"}
@@ -0,0 +1,37 @@
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 react_1 = require("@testing-library/react");
8
+ const vitest_1 = require("vitest");
9
+ const PersianNumberInput_1 = __importDefault(require("./PersianNumberInput"));
10
+ require("@testing-library/jest-dom");
11
+ (0, vitest_1.describe)("PersianNumberInput Component", () => {
12
+ (0, vitest_1.it)("should not allow typing negative signs", () => {
13
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, {}));
14
+ const input = react_1.screen.getByRole("textbox");
15
+ react_1.fireEvent.change(input, { target: { value: "-500" } });
16
+ (0, vitest_1.expect)(input.value).toBe("۵۰۰");
17
+ });
18
+ (0, vitest_1.it)("should fix leading zeros on change", () => {
19
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { locale: "en" }));
20
+ const input = react_1.screen.getByRole("textbox");
21
+ react_1.fireEvent.change(input, { target: { value: "000123" } });
22
+ (0, vitest_1.expect)(input.value).toBe("123");
23
+ });
24
+ (0, vitest_1.it)("should show suffix correctly", () => {
25
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { suffix: "\u062A\u0648\u0645\u0627\u0646", locale: "en" }));
26
+ const input = react_1.screen.getByRole("textbox");
27
+ react_1.fireEvent.change(input, { target: { value: "2000" } });
28
+ (0, vitest_1.expect)(input.value).toBe("2,000 تومان");
29
+ });
30
+ (0, vitest_1.it)("should use custom decimal character", () => {
31
+ (0, react_1.render)((0, jsx_runtime_1.jsx)(PersianNumberInput_1.default, { decimalChar: "/", locale: "en" }));
32
+ const input = react_1.screen.getByRole("textbox");
33
+ react_1.fireEvent.change(input, { target: { value: "10/5" } });
34
+ (0, vitest_1.expect)(input.value).toBe("10/5");
35
+ });
36
+ });
37
+ //# sourceMappingURL=PersianNumberInput.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PersianNumberInput.test.js","sourceRoot":"","sources":["../../src/components/PersianNumberInput.test.tsx"],"names":[],"mappings":";;;;;;AACA,kDAAmE;AACnE,mCAA8C;AAC9C,8EAAsD;AACtD,qCAAmC;AAEnC,IAAA,iBAAQ,EAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,IAAA,cAAM,EAAC,uBAAC,4BAAkB,KAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,cAAM,CAAC,SAAS,CAAC,SAAS,CAAqB,CAAC;QAE9D,iBAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACvD,IAAA,eAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,IAAA,cAAM,EAAC,uBAAC,4BAAkB,IAAC,MAAM,EAAC,IAAI,GAAG,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,cAAM,CAAC,SAAS,CAAC,SAAS,CAAqB,CAAC;QAE9D,iBAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzD,IAAA,eAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,IAAA,cAAM,EAAC,uBAAC,4BAAkB,IAAC,MAAM,EAAC,gCAAO,EAAC,MAAM,EAAC,IAAI,GAAG,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,cAAM,CAAC,SAAS,CAAC,SAAS,CAAqB,CAAC;QAE9D,iBAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACvD,IAAA,eAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,IAAA,cAAM,EAAC,uBAAC,4BAAkB,IAAC,WAAW,EAAC,GAAG,EAAC,MAAM,EAAC,IAAI,GAAG,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,cAAM,CAAC,SAAS,CAAC,SAAS,CAAqB,CAAC;QAE9D,iBAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACvD,IAAA,eAAM,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
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;;sBAgDb,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBA4BlD,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;;;2BA3ChC,MAAM;CA4EnB,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;;sBAiDb,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBA8BlD,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;;;2BA7ChC,MAAM;CA+EnB,CAAC"}
@@ -9,7 +9,7 @@ const decimal_js_1 = __importDefault(require("decimal.js"));
9
9
  const transformNumber_1 = require("../utils/transformNumber");
10
10
  const digitUtils_1 = require("../utils/digitUtils");
11
11
  const usePersianNumberInput = (props = {}) => {
12
- const { initialValue, separatorCount = 3, separatorChar = ",", decimalChar, locale = "fa", showZero = false, onValueChange, min, max, maxDecimals, onBlur: externalOnBlur, } = props;
12
+ const { initialValue, separatorCount = 3, separatorChar = ",", decimalChar, suffix, locale = "fa", showZero = false, onValueChange, min, max, maxDecimals, onBlur: externalOnBlur, } = props;
13
13
  const [rawValue, setRawValue] = (0, react_1.useState)(() => (0, digitUtils_1.sanitizeNumericInput)(initialValue, maxDecimals, decimalChar));
14
14
  const inputRef = (0, react_1.useRef)(null);
15
15
  const selectionRef = (0, react_1.useRef)(null);
@@ -40,6 +40,7 @@ const usePersianNumberInput = (props = {}) => {
40
40
  separatorCount,
41
41
  separatorChar,
42
42
  decimalChar,
43
+ suffix,
43
44
  locale,
44
45
  showZero,
45
46
  });
@@ -47,6 +48,7 @@ const usePersianNumberInput = (props = {}) => {
47
48
  separatorCount,
48
49
  separatorChar,
49
50
  decimalChar,
51
+ suffix,
50
52
  locale,
51
53
  showZero,
52
54
  });
@@ -73,6 +75,7 @@ const usePersianNumberInput = (props = {}) => {
73
75
  separatorCount,
74
76
  separatorChar,
75
77
  decimalChar,
78
+ suffix,
76
79
  locale,
77
80
  showZero,
78
81
  maxDecimals,
@@ -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,WAAW,EACX,MAAM,EACN,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,EAAE,WAAW,CAAC,CAC7D,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,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YACtC,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,EAAE,WAAW,CAAC,CAAC;QAExE,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,QAAQ,EAAE;YAC9C,cAAc;YACd,aAAa;YACb,WAAW;YACX,MAAM;YACN,MAAM;YACN,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,IAAA,iCAAe,EAAC,SAAS,EAAE;YAC/C,cAAc;YACd,aAAa;YACb,WAAW;YACX,MAAM;YACN,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,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACjC,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,WAAW;QACX,MAAM;QACN,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;AAlHW,QAAA,qBAAqB,yBAkHhC"}
@@ -2,6 +2,7 @@ export interface TransformNumberOptions {
2
2
  separatorCount?: number;
3
3
  separatorChar?: string;
4
4
  decimalChar?: string;
5
+ suffix?: string;
5
6
  locale?: "fa" | "en" | "ar" | string;
6
7
  maxDecimals?: number;
7
8
  showZero?: boolean;
@@ -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,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,MAyCF,CAAC"}
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,MAkDF,CAAC"}
@@ -3,15 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.transformNumber = void 0;
4
4
  const digitUtils_1 = require("./digitUtils");
5
5
  const transformNumber = (rawValue, options) => {
6
- const { separatorCount = 3, separatorChar = ",", decimalChar, locale = "fa", showZero = false, } = options || {};
6
+ const { separatorCount = 3, separatorChar = ",", decimalChar, suffix, locale = "fa", showZero = false, } = options || {};
7
7
  if (rawValue === null || rawValue === undefined || rawValue === "") {
8
- return showZero ? (0, digitUtils_1.toLocalizedDigits)("0", locale) : "";
8
+ const zeroVal = showZero ? (0, digitUtils_1.toLocalizedDigits)("0", locale) : "";
9
+ if (zeroVal && suffix)
10
+ return `${zeroVal} ${suffix}`;
11
+ return zeroVal;
9
12
  }
10
13
  let [integerPart, fractionalPart] = rawValue.split(".");
11
14
  const hasTrailingDot = rawValue.endsWith(".");
12
15
  const absIntPart = integerPart || (hasTrailingDot || fractionalPart !== undefined ? "0" : "");
13
16
  if (absIntPart === "" && !hasTrailingDot && fractionalPart === undefined) {
14
- return showZero ? (0, digitUtils_1.toLocalizedDigits)("0", locale) : "";
17
+ const zeroVal = showZero ? (0, digitUtils_1.toLocalizedDigits)("0", locale) : "";
18
+ if (zeroVal && suffix)
19
+ return `${zeroVal} ${suffix}`;
20
+ return zeroVal;
15
21
  }
16
22
  const groupedInt = (0, digitUtils_1.groupDigits)(absIntPart, separatorCount, separatorChar);
17
23
  let finalStr = groupedInt;
@@ -27,6 +33,9 @@ const transformNumber = (rawValue, options) => {
27
33
  if (locale !== "en") {
28
34
  finalStr = (0, digitUtils_1.toLocalizedDigits)(finalStr, locale);
29
35
  }
36
+ if (suffix) {
37
+ finalStr = `${finalStr} ${suffix}`;
38
+ }
30
39
  return finalStr;
31
40
  };
32
41
  exports.transformNumber = transformNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"transformNumber.js","sourceRoot":"","sources":["../../src/utils/transformNumber.ts"],"names":[],"mappings":";;;AAAA,6CAIsB;AAWf,MAAM,eAAe,GAAG,CAC7B,QAA4B,EAC5B,OAAgC,EACxB,EAAE;IACV,MAAM,EACJ,cAAc,GAAG,CAAC,EAClB,aAAa,GAAG,GAAG,EACnB,WAAW,EACX,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;AA5CW,QAAA,eAAe,mBA4C1B"}
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,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,8BAAiB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,OAAO,IAAI,MAAM;YAAE,OAAO,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,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,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,8BAAiB,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,OAAO,IAAI,MAAM;YAAE,OAAO,GAAG,OAAO,IAAI,MAAM,EAAE,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,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,EAAE,CAAC;QACX,QAAQ,GAAG,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AArDW,QAAA,eAAe,mBAqD1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "persian-number-input",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "description": "React component for Persian, Indic, or English localized number input with customizable digit grouping",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -12,7 +12,9 @@
12
12
  ],
13
13
  "scripts": {
14
14
  "build": "tsc",
15
- "prepublishOnly": "npm run build"
15
+ "prepublishOnly": "npm run build",
16
+ "test": "vitest",
17
+ "prepare": "husky"
16
18
  },
17
19
  "keywords": [
18
20
  "react",
@@ -37,10 +39,18 @@
37
39
  "react": "^16.8 || ^17 || ^18 || ^19"
38
40
  },
39
41
  "devDependencies": {
42
+ "@commitlint/cli": "^20.2.0",
43
+ "@commitlint/config-conventional": "^20.2.0",
44
+ "@testing-library/jest-dom": "^6.9.1",
45
+ "@testing-library/react": "^16.3.1",
40
46
  "@types/prop-types": "^15.7.15",
41
47
  "@types/react": "^19.2.7",
42
48
  "@types/react-dom": "^19.2.3",
43
- "typescript": "^5.9.3"
49
+ "husky": "^9.1.7",
50
+ "jsdom": "^27.3.0",
51
+ "lint-staged": "^16.2.7",
52
+ "typescript": "^5.9.3",
53
+ "vitest": "^4.0.16"
44
54
  },
45
55
  "dependencies": {
46
56
  "decimal.js": "^10.6.0"