Skip to content

Usage Guide

Learn how to use ts-numbers effectively in your projects.

Basic Usage

Creating a Number Formatter

js
import { Numbers } from 'ts-numbers'

// Create a formatter instance
const formatter = new Numbers('#my-input', {
  decimalPlaces: 2,
  digitGroupSeparator: ',',
})

// Set a value
formatter.set(1234.56) // Displays as "1,234.56"

// Get the numeric value
const value = formatter.getNumber() // Returns 1234.56

Working with DOM Elements

ts-numbers can be attached to any element that can display text:

js
// With a CSS selector
const price = new Numbers('#price-display', { currencySymbol: '$' })

// With a direct DOM element reference
const element = document.getElementById('total')
const total = new Numbers(element, { currencySymbol: '€' })

// With an input element (enables user interaction)
const input = new Numbers('input.currency', {
  currencySymbol: '$',
  selectOnFocus: true,
})

Formatting Options

Currency Formatting

js
// US Dollar
const dollar = new Numbers('#dollar', {
  currencySymbol: '$',
  currencySymbolPlacement: 'p', // prefix
  decimalPlaces: 2,
})

// Euro
const euro = new Numbers('#euro', {
  currencySymbol: '€',
  currencySymbolPlacement: 's', // suffix
  decimalCharacter: ',',
  digitGroupSeparator: '.',
})

Using Presets

js
import { Numbers } from 'ts-numbers'
import { dollar, euro, integer, percentage } from 'ts-numbers/presets'

// Quickly apply predefined formats
const price = new Numbers('#price', dollar)
const quantity = new Numbers('#quantity', integer)
const discount = new Numbers('#discount', percentage)

Handling User Input

js
const input = new Numbers('#user-input', {
  decimalPlaces: 2,
  minimumValue: '0', // Prevent negative values
  maximumValue: '1000', // Set maximum value
  selectOnFocus: true, // Select content on focus
  caretPositionOnFocus: 'end', // Position cursor at the end
})

// Listen for events
const element = input.getElement()
element.addEventListener('numbers:change', (e) => {
  console.log('Value changed:', e.detail.value)
})

Specialized Formatting

Phone Numbers

js
const phone = new Numbers('#phone-input', {
  isSpecializedType: 'phone',
  specializedOptions: {
    phoneFormat: '(###) ###-####',
    countryCode: 'US',
  },
})

phone.set('1234567890') // Displays as "(123) 456-7890"

Temperature with Conversion

js
const temp = new Numbers('#temperature', {
  isSpecializedType: 'temperature',
  specializedOptions: {
    temperatureUnit: 'C', // Input in Celsius
    convertTempTo: 'F', // Display as Fahrenheit
  },
  suffixText: '°F',
})

temp.set(20) // Displays as "68°F" (20°C converted to Fahrenheit)

Internationalization

js
// German format
const german = new Numbers('#german', {
  locale: 'de-DE',
  useGrouping: true,
  currencySymbol: '€',
})

german.set(1234.56) // Displays as "1.234,56 €"

// Arabic format with RTL support
const arabic = new Numbers('#arabic', {
  locale: 'ar-EG',
  useGrouping: true,
  currencySymbol: 'ج.م',
})

Advanced Usage

Dynamic Configuration Updates

js
const dynamicFormat = new Numbers('#dynamic', {
  decimalPlaces: 2,
})

// Change configuration on the fly
document.querySelector('#increase-precision').addEventListener('click', () => {
  dynamicFormat.update({ decimalPlaces: 4 })
})

// Switch to currency format
document.querySelector('#show-as-currency').addEventListener('click', () => {
  dynamicFormat.update({
    currencySymbol: '$',
    currencySymbolPlacement: 'p',
  })
})

Integration with Frameworks

ts-numbers can be easily integrated with popular frameworks:

React Example

jsx
import React, { useEffect, useRef } from 'react'
import { Numbers } from 'ts-numbers'

function CurrencyInput({ value, onChange }) {
  const inputRef = useRef(null)
  const numbersRef = useRef(null)

  useEffect(() => {
    // Initialize ts-numbers when component mounts
    if (inputRef.current && !numbersRef.current) {
      numbersRef.current = new Numbers(inputRef.current, {
        currencySymbol: '$',
        decimalPlaces: 2,
      })

      // Set up event listener
      const handleChange = (e) => {
        onChange(numbersRef.current.getNumber())
      }

      inputRef.current.addEventListener('numbers:change', handleChange)

      return () => {
        // Clean up when component unmounts
        if (inputRef.current) {
          inputRef.current.removeEventListener('numbers:change', handleChange)
        }

        if (numbersRef.current) {
          numbersRef.current.remove()
        }
      }
    }
  }, [])

  // Update the value when props change
  useEffect(() => {
    if (numbersRef.current && value !== undefined) {
      numbersRef.current.set(value)
    }
  }, [value])

  return <input ref={inputRef} />
}

For more detailed examples, refer to the specific feature pages in the documentation.

Released under the MIT License.