UNPKG

number-suffix

Version:

Turns a number to a fixed string with a metric or abbreviation suffix

2 lines (1 loc) 2.34 kB
var l={metric:["k","M","G","T","P","E"],abbreviation:["K","M","B","T","q","Q"]},p={thousand:1e3,million:1e6,billion:1e9,trillion:1e12,quadrillion:1e15,quintillion:1e18},y=["thousand","million","billion","trillion","quadrillion","quintillion"],f={};var S=class{constructor(t){this.symbols=t,this.symbolsMap=y.reduce((r,o,i)=>(r[o]=t[i]||l.metric[i],r),{})}getSymbol(t){return this.symbolsMap[t]}},a=S;var d=class{constructor(){this.styles={metric:new a(l.metric),abbreviation:new a(l.abbreviation)},this.default="metric"}add(t,r){return this.styles[t]=new a(r),this}get(t){return this.styles[t]}getSymbol(t,r=this.default){return this.get(r).getSymbol(t)}setDefault(t){return this.default=t,this}getDefault(){return this.default}};d.Style=a;var m=d;var n=new m,U=(e,t)=>{n.add(e,t)},x=e=>n.get(e);var P=e=>Math.trunc(Math.log10(Math.abs(e))+1),g=P;var R=e=>{let t=g(e)-1;return t<3?p.thousand:t>12?p.trillion:Math.pow(10,~~(t/3)*3)},b=R;var M=e=>p[e],D=M;var w=e=>typeof e=="string"?D(e.toLowerCase()):b(e),c=w;var I=(e,t=0)=>{let r=Math.pow(10,t),i=(Math.floor(Number(e)*r)/r).toFixed(t);return i.includes(".")?i.replace(/\.?0+$/,""):i},u=I;var T=e=>{let t=g(b(e))-1;return y[t/3-1]},O=T;var L=e=>{let t=String(e),[r,o]=t.split("."),i=r.replace(/\B(?=(\d{3})+(?!\d))/g,",");return o?`${i}.${o}`:i},v=L;var N=(e,t=f)=>{let r=e/c(t.measurement?t.measurement:e),o=v(u(r,t.precision||0)),i=t.collection instanceof m?t.collection:n,C=t.measurement?i.getSymbol(t.measurement):i.getSymbol(O(e),t.style);return o+C},h=N;var s=class{constructor(t={}){this.styleCollection=new m,this.precision=t.precision||0,this.measurement=t.measurement,t.style&&this.styleCollection.setDefault(t.style)}format(t,r){let o={style:this.styleCollection.getDefault(),precision:this.precision,measurement:this.measurement,collection:this.styleCollection,...r};return h(t,o)}addStyle(...t){return this.styleCollection.add(...t),this}setDefaultStyle(t){return this.styleCollection.setDefault(t),this}setOptions(t){let{precision:r,measurement:o,style:i}=t||f;this.precision=r||this.precision||0,this.measurement=o||this.measurement,i&&this.styleCollection.setDefault(i)}};s.addStyle=U,s.getStyle=x,s.getDivider=c,s.format=h,s.styles=n,s.toFixed=u;var F=s;var vt=F;export{U as addStyle,vt as default,h as format,c as getDivider,x as getStyle,n as styles,u as toFixed};