@nexusui/components
Version:
These are custom components specially-developed for NexusUI applications. They will make your life easier by giving you out-of-the-box implementations for various high-level UI elements that you can drop directly into your application.
2 lines (1 loc) • 1.5 kB
JavaScript
import{useNumberFormatterContext as i}from"./NumberFormatter.context.js";const t=i=>/[1-9]+/.test(i)?i:i.replace(/^-0/,"0"),a=(i,a={})=>{const{notation:e="standard",decimalPlaces:o,showTrailingZeros:n}=a;let r=new Intl.NumberFormat(void 0,{maximumFractionDigits:20,minimumFractionDigits:0});if("auto"===e){const t=a,{scientificThresholds:e}=t,n=e?.above,s=e?.below,m=void 0!==n&&Math.abs(i)>=n||void 0!==s&&Math.abs(i)<=s;if("number"==typeof o)r=new Intl.NumberFormat(void 0,{minimumFractionDigits:Number.isNaN(o)?0:Math.max(o,0),maximumFractionDigits:Number.isNaN(o)?20:Math.min(o,20),notation:m?"scientific":"standard"});else if(void 0===o)return r=new Intl.NumberFormat(void 0,{minimumFractionDigits:0,maximumFractionDigits:20,notation:m?"scientific":"standard"}),r.format(i)}else r=new Intl.NumberFormat(void 0,{minimumFractionDigits:Number.isNaN(o??NaN)?0:Math.max(o,0),maximumFractionDigits:Number.isNaN(o??NaN)?20:Math.min(o,20),notation:e});const s=r.format(i);return n?t(s):(i=>{let a=i.replace(/(\d+\.\d*?)0*$/,((i,t)=>t)).replace(/(\d+\.\d*?)0*(E\d+)/,((i,t,a)=>`${t}${a}`));return a=a.replace(/\.$/,"").replace(/\.E/,"E"),t(a)})(s)},e=t=>{const{children:e,...o}=t,n=parseFloat(e.toString()),{options:r}=i(),{notation:s=r.notation,decimalPlaces:m=r.decimalPlaces,scientificThresholds:c=r.scientificThresholds,showTrailingZeros:l=r.showTrailingZeros,...d}=o;return a(n,{notation:s,decimalPlaces:m,scientificThresholds:c,showTrailingZeros:l,...d})};export{e as default,a as formatNumber};