persian-number-input 3.0.9 → 3.1.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.
@@ -9,7 +9,7 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
- import React, { useCallback } from 'react';
12
+ import React, { useCallback, useState } from 'react';
13
13
  import { toLocalizedDigits, groupDigits, convertToEnglishDigits } from '../utils/digitUtils';
14
14
  // استایل پایه برای input
15
15
  const baseInputStyle = {
@@ -18,9 +18,12 @@ const baseInputStyle = {
18
18
  };
19
19
  const PersianNumberInput = (_a) => {
20
20
  var { initialValue = '', separatorCount = 0, separatorChar = ',', lang = 'fa', onChangeValue, style } = _a, rest = __rest(_a, ["initialValue", "separatorCount", "separatorChar", "lang", "onChangeValue", "style"]);
21
- const [value, setValue] = React.useState(() => convertToEnglishDigits(initialValue).replace(/\D/g, ''));
21
+ // تابع برای اعتبارسنجی ورودی و جلوگیری از کاراکترهای غیرمجاز
22
+ const sanitizeInput = (input) => input.replace(/[^\d,]/g, '');
23
+ const [value, setValue] = useState(() => convertToEnglishDigits(initialValue).replace(/\D/g, ''));
22
24
  const handleChange = useCallback((e) => {
23
- const input = convertToEnglishDigits(e.target.value).replace(/\D/g, '');
25
+ // فیلتر کردن ورودی‌های غیرمجاز
26
+ const input = sanitizeInput(convertToEnglishDigits(e.target.value));
24
27
  setValue(input);
25
28
  if (onChangeValue)
26
29
  onChangeValue(input);
@@ -28,7 +31,7 @@ const PersianNumberInput = (_a) => {
28
31
  const formattedValue = groupDigits(value, separatorCount, separatorChar);
29
32
  const displayValue = lang === 'en' ? formattedValue : toLocalizedDigits(formattedValue, lang);
30
33
  const mergedStyle = Object.assign(Object.assign({}, baseInputStyle), style);
31
- return React.createElement("input", Object.assign({ value: displayValue, onChange: handleChange, style: mergedStyle }, rest));
34
+ return (React.createElement("input", Object.assign({ value: displayValue, onChange: handleChange, style: mergedStyle }, rest)));
32
35
  };
33
36
  export default PersianNumberInput;
34
37
  //# sourceMappingURL=PersianNumberInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PersianNumberInput.js","sourceRoot":"","sources":["../../src/components/PersianNumberInput.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA4C7F,yBAAyB;AACzB,MAAM,cAAc,GAAwB;IACxC,MAAM,EAAE,gBAAgB;IACxB,YAAY,EAAE,KAAK;CACtB,CAAC;AAKF,MAAM,kBAAkB,GAAsC,CAAC,EAQ9D,EAAE,EAAE;QAR0D,EAC3D,YAAY,GAAG,EAAE,EACjB,cAAc,GAAG,CAAC,EAClB,aAAa,GAAG,GAAG,EACnB,IAAI,GAAG,IAAI,EACX,aAAa,EACb,KAAK,OAER,EADM,IAAI,cAPoD,qFAQ9D,CADU;IAEP,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAExG,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAsC,EAAE,EAAE;QACxE,MAAM,KAAK,GAAG,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,IAAI,aAAa;YAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAE9F,MAAM,WAAW,mCAAQ,cAAc,GAAK,KAAK,CAAE,CAAC;IAEpD,OAAO,6CACH,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,WAAW,IACd,IAAI,EACV,CAAC;AACP,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"PersianNumberInput.js","sourceRoot":"","sources":["../../src/components/PersianNumberInput.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA0C7F,yBAAyB;AACzB,MAAM,cAAc,GAAwB;IACxC,MAAM,EAAE,gBAAgB;IACxB,YAAY,EAAE,KAAK;CACtB,CAAC;AAIF,MAAM,kBAAkB,GAAsC,CAAC,EAQ9D,EAAE,EAAE;QAR0D,EAC3D,YAAY,GAAG,EAAE,EACjB,cAAc,GAAG,CAAC,EAClB,aAAa,GAAG,GAAG,EACnB,IAAI,GAAG,IAAI,EACX,aAAa,EACb,KAAK,OAER,EADM,IAAI,cAPoD,qFAQ9D,CADU;IAEP,6DAA6D;IAC7D,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEtE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAElG,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAsC,EAAE,EAAE;QACxE,+BAA+B;QAC/B,MAAM,KAAK,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChB,IAAI,aAAa;YAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAE9F,MAAM,WAAW,mCAAQ,cAAc,GAAK,KAAK,CAAE,CAAC;IAEpD,OAAO,CACH,6CACI,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,WAAW,IACd,IAAI,EACV,CACL,CAAC;AACN,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -2,16 +2,19 @@ export const digitsMap = {
2
2
  fa: ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"],
3
3
  in: ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९"],
4
4
  };
5
+ // تبدیل اعداد به اعداد محلی با استفاده از نقشه
5
6
  export const toLocalizedDigits = (numStr, locale) => {
6
7
  const digits = digitsMap[locale];
7
8
  return numStr.replace(/\d/g, (digit) => digits[parseInt(digit)]);
8
9
  };
10
+ // گروه‌بندی اعداد با استفاده از جداکننده
9
11
  export const groupDigits = (numStr, separatorCount, separatorChar = ",") => {
10
12
  if (separatorCount && separatorCount > 0) {
11
13
  return numStr.replace(new RegExp(`\\B(?=(\\d{${separatorCount}})+(?!\\d))`, "g"), separatorChar);
12
14
  }
13
15
  return numStr;
14
16
  };
17
+ // تبدیل اعداد محلی به اعداد انگلیسی
15
18
  export const convertToEnglishDigits = (str) => {
16
19
  const map = {
17
20
  "۰": "0",
@@ -1 +1 @@
1
- {"version":3,"file":"digitUtils.js","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAgC;IACpD,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACtD,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CACvD,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,MAAmB,EAAE,EAAE;IACvE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,MAAc,EACd,cAAsB,EACtB,aAAa,GAAG,GAAG,EACnB,EAAE;IACF,IAAI,cAAc,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,OAAO,CACnB,IAAI,MAAM,CAAC,cAAc,cAAc,aAAa,EAAE,GAAG,CAAC,EAC1D,aAAa,CACd,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAW,EAAE,EAAE;IACpD,MAAM,GAAG,GAA8B;QACrC,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;KACT,CAAC;IACF,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC"}
1
+ {"version":3,"file":"digitUtils.js","sourceRoot":"","sources":["../../src/utils/digitUtils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAgC;IACpD,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACtD,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CACvD,CAAC;AAEF,+CAA+C;AAC/C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,MAAmB,EAAE,EAAE;IACvE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,MAAc,EACd,cAAsB,EACtB,aAAa,GAAG,GAAG,EACnB,EAAE;IACF,IAAI,cAAc,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,OAAO,CACnB,IAAI,MAAM,CAAC,cAAc,cAAc,aAAa,EAAE,GAAG,CAAC,EAC1D,aAAa,CACd,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,oCAAoC;AACpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAW,EAAE,EAAE;IACpD,MAAM,GAAG,GAA8B;QACrC,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,GAAG;KACT,CAAC;IACF,OAAO,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,48 +1,49 @@
1
- {
2
- "name": "persian-number-input",
3
- "version": "3.0.9",
4
- "description": "React component for Persian, Indic, or English localized number input with customizable digit grouping",
5
- "main": "dist/index.js",
6
- "module": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "typings": "dist/index.d.ts",
9
- "sideEffects": false,
10
- "files": [
11
- "dist"
12
- ],
13
- "scripts": {
14
- "build": "tsc",
15
- "prepublishOnly": "npm run build",
16
- "test": "jest"
17
- },
18
- "keywords": [
19
- "react",
20
- "persian",
21
- "indic",
22
- "number",
23
- "input",
24
- "localization",
25
- "digit-grouping"
26
- ],
27
- "author": "Your Name",
28
- "license": "MIT",
29
- "repository": {
30
- "type": "git",
31
- "url": "https://github.com/javadSharifi/persian-number-input"
32
- },
33
- "bugs": {
34
- "url": "https://github.com/javadSharifi/persian-number-input/issues"
35
- },
36
- "homepage": "https://github.com/javadSharifi/persian-number-input#readme",
37
- "peerDependencies": {
38
- "react": "^16.8 || ^17 || ^18 || ^19"
39
- },
40
- "devDependencies": {
41
- "@types/react": "^19.0.0",
42
- "@types/react-dom": "^19.0.0",
43
- "typescript": "^5.0.0",
44
- "jest": "^29.0.0",
45
- "@types/jest": "^29.0.0",
46
- "ts-jest": "^29.0.0"
47
- }
48
- }
1
+ {
2
+ "name": "persian-number-input",
3
+ "version": "3.1.0",
4
+ "description": "React component for Persian, Indic, or English localized number input with customizable digit grouping",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "typings": "dist/index.d.ts",
9
+ "sideEffects": false,
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "prepublishOnly": "npm run build",
16
+ "test": "jest"
17
+ },
18
+ "keywords": [
19
+ "react",
20
+ "persian",
21
+ "indic",
22
+ "number",
23
+ "input",
24
+ "localization",
25
+ "digit-grouping"
26
+ ],
27
+ "author": "Your Name",
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/javadSharifi/persian-number-input"
32
+ },
33
+ "bugs": {
34
+ "url": "https://github.com/javadSharifi/persian-number-input/issues"
35
+ },
36
+ "homepage": "https://github.com/javadSharifi/persian-number-input#readme",
37
+ "peerDependencies": {
38
+ "react": "^16.8 || ^17 || ^18 || ^19"
39
+ },
40
+ "devDependencies": {
41
+ "@types/jest": "^29.5.14",
42
+ "@types/prop-types": "^15.7.14",
43
+ "@types/react": "^19.1.2",
44
+ "@types/react-dom": "^19.1.2",
45
+ "jest": "^29.7.0",
46
+ "ts-jest": "^29.3.2",
47
+ "typescript": "^5.8.3"
48
+ }
49
+ }