# Price Separator (جداکننده قیمت و تبدیل به حروف فارسی و انگلیسی)

این لایبرری ساده به شما کمک می‌کند:

- قیمت‌ها را سه رقم سه رقم جدا کنید (مثلاً 1234567 → 1,234,567)
- عدد قیمت را به حروف فارسی + واحد پولی تبدیل کنید (مثلاً 50000 → پنجاه هزار تومان)
- عدد قیمت را به حروف انگلیسی + واحد پولی تبدیل کنید (مثلاً 50000 → fifty thousand USD)
- حروف فارسی را به عدد تبدیل کنید (مثلاً پنجاه هزار تومان → 50000)
- حروف انگلیسی را به عدد تبدیل کنید (مثلاً fifty thousand → 50000)

## نصب و استفاده

کافیست فایل `src/price-separator.js` را در پروژه خود وارد کنید یا آن را به عنوان ماژول import/require نمایید.

---

## استفاده در HTML ساده

```html
<script src="src/price-separator.js"></script>
<script>
  // جدا کردن سه رقمی
  document.write(separatePrice(1234567)); // خروجی: 1,234,567
  document.write("<br>");
  // تبدیل به حروف فارسی
  document.write(priceToPersianWords(1234567)); // خروجی: یک میلیون و دویست و سی و چهار هزار و پانصد و شصت و هفت تومان
</script>
```

## استفاده در Node.js

```js
const { 
  separatePrice, 
  priceToPersianWords,
  priceToEnglishWords,
  persianWordsToNumber,
  englishWordsToNumber 
} = require("./src/price-separator");

// جدا کردن سه رقمی
console.log(separatePrice(50000)); // 50,000

// تبدیل به حروف فارسی
console.log(priceToPersianWords(50000)); // پنجاه هزار تومان
console.log(priceToPersianWords(50000, 'ریال')); // پنجاه هزار ریال

// تبدیل به حروف انگلیسی
console.log(priceToEnglishWords(50000)); // fifty thousand USD
console.log(priceToEnglishWords(50000, 'EUR')); // fifty thousand EUR

// تبدیل حروف به عدد
console.log(persianWordsToNumber('پنجاه هزار تومان')); // 50000
console.log(englishWordsToNumber('fifty thousand dollars')); // 50000
```

## استفاده در React

```jsx
import { 
  separatePrice, 
  priceToPersianWords, 
  priceToEnglishWords,
  persianWordsToNumber,
  englishWordsToNumber 
} from "./src/price-separator";

export default function PriceComponent({ price, text }) {
  // تبدیل متن به عدد (اگر متن وارد شده باشد)
  const numberFromText = text ? 
    (text.includes('thousand') ? englishWordsToNumber(text) : persianWordsToNumber(text)) : 0;
  
  return (
    <>
      <div>قیمت: {separatePrice(price)}</div>
      <div>فارسی: {priceToPersianWords(price)}</div>
      <div>انگلیسی: {priceToEnglishWords(price)}</div>
      {text && <div>تبدیل متن به عدد: {numberFromText}</div>}
    </>
  );
}
```

## استفاده در Vue

```vue
<template>
  <div>
    <div>قیمت: {{ separated }}</div>
    <div>فارسی: {{ persian }}</div>
    <div>انگلیسی: {{ english }}</div>
    <div v-if="textInput">
      <input v-model="textInput" placeholder="متن به حروف" />
      <div>تبدیل به عدد: {{ numberFromText }}</div>
    </div>
  </div>
</template>
<script>
import { 
  separatePrice, 
  priceToPersianWords, 
  priceToEnglishWords,
  persianWordsToNumber,
  englishWordsToNumber 
} from "./src/price-separator";

export default {
  props: ["price"],
  data() {
    return {
      textInput: "",
      currency: "تومان"
    };
  },
  computed: {
    separated() {
      return separatePrice(this.price);
    },
    persian() {
      return priceToPersianWords(this.price, this.currency);
    },
    english() {
      return priceToEnglishWords(this.price, "USD");
    },
    numberFromText() {
      if (!this.textInput) return 0;
      return this.textInput.includes('thousand') ? 
        englishWordsToNumber(this.textInput) : 
        persianWordsToNumber(this.textInput);
    }
  },
};
</script>
```

## استفاده در Angular

```typescript
import { 
  separatePrice, 
  priceToPersianWords, 
  priceToEnglishWords,
  persianWordsToNumber,
  englishWordsToNumber 
} from "./src/price-separator";

@Component({
  selector: "app-price",
  template: `
    <div>قیمت: {{ separated }}</div>
    <div>فارسی: {{ persian }}</div>
    <div>انگلیسی: {{ english }}</div>
    <div>
      <input [(ngModel)]="textInput" placeholder="متن به حروف" />
      <div *ngIf="textInput">تبدیل به عدد: {{ numberFromText }}</div>
    </div>
  `,
})
export class PriceComponent {
  price = 1234567;
  textInput = '';
  currency = 'تومان';
  
  get separated() {
    return separatePrice(this.price);
  }
  
  get persian() {
    return priceToPersianWords(this.price, this.currency);
  }
  
  get english() {
    return priceToEnglishWords(this.price, 'USD');
  }
  
  get numberFromText() {
    if (!this.textInput) return 0;
    return this.textInput.includes('thousand') ? 
      englishWordsToNumber(this.textInput) : 
      persianWordsToNumber(this.textInput);
  }
}
```

---

## مثال برای نمایش زیر اینپوت (HTML)

```html
<input id="priceInput" type="text" />
<div id="priceText"></div>
<script src="src/price-separator.js"></script>
<script>
  document.getElementById("priceInput").addEventListener("input", function (e) {
    document.getElementById("priceText").innerText = priceToPersianWords(
      e.target.value
    );
  });
</script>
```

## مثال برای نمایش همزمان عدد جداشده و حروف (HTML)

```html
<input id="priceInput2" type="text" />
<div>عدد: <span id="priceNum"></span></div>
<div>فارسی: <span id="persianWords"></span></div>
<div>انگلیسی: <span id="englishWords"></span></div>
<script src="src/price-separator.js"></script>
<script>
  document
    .getElementById("priceInput2")
    .addEventListener("input", function (e) {
      document.getElementById("priceNum").innerText = separatePrice(
        e.target.value
      );
      document.getElementById("persianWords").innerText = priceToPersianWords(
        e.target.value
      );
      document.getElementById("englishWords").innerText = priceToEnglishWords(
        e.target.value
      );
    });
</script>
```

## مثال برای تبدیل متن به عدد (HTML)

```html
<input id="textInput" type="text" placeholder="متن به حروف (فارسی یا انگلیسی)" />
<div>عدد: <span id="numberResult"></span></div>
<script src="src/price-separator.js"></script>
<script>
  document
    .getElementById("textInput")
    .addEventListener("input", function (e) {
      const text = e.target.value;
      let result = 0;
      
      if (text.includes('thousand') || 
          text.includes('hundred') || 
          text.includes('million')) {
        // متن انگلیسی
        result = englishWordsToNumber(text);
      } else {
        // متن فارسی
        result = persianWordsToNumber(text);
      }
      
      document.getElementById("numberResult").innerText = 
        result >= 0 ? separatePrice(result) : "نامعتبر";
    });
</script>
```

---

## قابلیت‌ها

- بدون وابستگی به فریمورک خاص
- قابل استفاده در همه پروژه‌های فرانت‌اند و بک‌اند
- سبک و سریع
- پشتیبانی از ورودی رشته‌ای و عددی
- قابل استفاده به صورت ماژول CommonJS و ESModule و همچنین بارگذاری مستقیم در HTML
- پشتیبانی از TypeScript با تعاریف تایپ
- پشتیبانی از تبدیل عدد به حروف فارسی و انگلیسی
- پشتیبانی از تبدیل حروف فارسی و انگلیسی به عدد
- پشتیبانی از واحدهای پولی مختلف (تومان، ریال، دلار، یورو و ...)
- دارای تست‌های واحد برای اطمینان از صحت عملکرد

## نصب از طریق npm

```bash
npm install price-seprator
```

یا با استفاده از yarn:

```bash
yarn add price-seprator
```
