@stackmeister/unit v0.2.5
@stackmeister/unit
Unit conversion library
Usage
Basic unit parsing and conversion
import { cssSystem, createTag } from '@stackmeister/unit'
const css = createTag(cssSystem)
css`2rem`
.with({ rootFontSize: 16 })
.px
.toString()
//> "32px"Calculator for units
It's equally simple as the CSS calc() function, but can be used with any system.
import { lengthSystem, createCalculator } from '@stackmeister/unit'
const calc = createCalculator(lengthSystem)
calc`12km - 200m`.cm.toString()
//> "1180000cm"Convert between systems
import { lengthSystem, cssSystem, createTag } from '@stackmeister/unit'
const len = createTag(lengthSystem)
len`12km`
.toSystem(cssSystem, 'cm')
.with({ pixelRatio: 2 })
.px
.toString()
//> "90708662.4px"Supported Standard Systems
CSS System
Configurable based on the screen and surroundings. This is a full example (All values are optional).
Supported units: px, vw/vh/vmin/vmax (through viewWidth/viewHeight), rem/em, mm/cm, % (through width), in, pt, pc, ch (through zeroWidth)
import { createCssSystem, createCalculator } from '@stackmeister/unit'
const myCssSystem = createCssSystem({
rootFontSize: 18,
fontSize: 18,
width: 0,
height: 0,
viewWidth: 1920,
viewHeight: 1080,
pixelRatio: 1,
zeroWidth: 16,
}}
const calc = createCalculator(myCssSystem)
calc`20px - 1rem`.toString()
//> "2px"Amount of Substance (Mol)
Units: All SI Units
import { amountOfSubstanceSystem, createCalculator } from '@stackmeister/unit'
const calc = createCalculator(amountOfSubstanceSystem)
calc`12mol - 100mmol`.toString()
//> "11.9mol"Electric Current (Ampere)
Units: All SI Units
import { electricCurrentSystem, createCalculator } from '@stackmeister/unit'
const calc = createCalculator(electricCurrentSystem)
calc`12A - 100mA`.toString()
//> "11.9A"Length (Meter)
Units: All SI Units, all imperial units, astronomical units (ae etc.)
import { lengthSystem, createCalculator } from '@stackmeister/unit'
const calc = createCalculator(lengthSystem)
calc`12m - 100mm`.toString()
//> "11.9m"Luminous Intensity (Candela)
Units: All SI Units
import { luminousIntensitySystem, createCalculator } from '@stackmeister/unit'
const calc = createCalculator(luminousIntensitySystem)
calc`12cd - 100mcd`.toString()
//> "11.9cd"Mass System (Gram)
Units: All SI Units
import { luminousIntensitySystem, createCalculator } from '@stackmeister/unit'
const calc = createCalculator(luminousIntensitySystem)
calc`12cd - 100mcd`.toString()
//> "11.9cd"Temperature System (Kelvin)
Units: All SI Units, Celsius, Fahrenheit
import { temperatureSystem, createCalculator } from '@stackmeister/unit'
const calc = createCalculator(temperatureSystem)
calc`12K - 100°C`.toString()
//> "-361.15K"Time System (Seconds)
Units: All SI Units, m (Minute), h (Hour), d (Days), w (Weeks), M (Months), y (Years)
Notice the calculations are simple conversions, no calendar is used. Don't build anything critical
on the result of M and y here, but for e.g. a "x time ago" display for chat messages would be suitable.
import { timeSystem, createCalculator } from '@stackmeister/unit'
const calc = createCalculator(timeSystem)
calc`12w - 13d`.d.toString()
//> "71d"Create a custom system
import { createSystem } from '@stackmeister/unit'
const mySystem = createSystem({
baseUnit: 'flux',
from: {
foo: value => value * 42.42,
},
to: {
foo: value => value / 42.42,
}
})
const calc = createCalculator(mySystem)
calc`12flux * 2foo`.toString()
//> "1018.08flux"