UNPKG

@wareme/currency-input

Version:

Easily input currencies in Dark applications

4 lines (2 loc) 8.45 kB
import{detectIsArray as Uq,detectIsEmpty as Mq,detectIsNull as hq,detectIsNumber as xq,detectIsString as gq,detectIsUndefined as Bq,illegal as fq}from"@dark-engine/core";var i=(H)=>fq(H,"currency-input"),Hq=(H)=>/\d/gi.test(H);var P=(H)=>{return H.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")},Sq=(H,B=",")=>{let q=new RegExp(P(B),"g");return H.replace(q,"")},nq=(H,B)=>{let q=P(B.join("")),J=new RegExp(`[^\\d${q}]`,"gi");return H.replace(J,"")};var sq={k:1000,m:1e6,b:1e9},vq=(H,B=".")=>{let q=new RegExp(`(\\d+(${P(B)}\\d*)?)([kmb])$`,"i"),J=H.match(q);if(J){let[,Y,,Q]=J,z=sq[Q.toLowerCase()],X=Number(Y.replace(B,"."))*z;return String(X)}return null},t=({value:H,groupSeparator:B=",",decimalSeparator:q=".",allowDecimals:J=!0,decimalsLimit:Y=2,allowNegativeValue:Q=!0,disableAbbreviations:z=!1,prefix:X="",transformRawValue:M=(U)=>U})=>{let U=M(H);if(U==="-")return U;let k=(()=>{if(z)return[];return["k","m","b"]})(),w=new RegExp(`((^|\\D)-\\d)|(-${P(X)})`).test(U),[N,C]=RegExp(`(\\d+)-?${P(X)}`).exec(H)||[],G=(()=>{if(X){if(N)return U.replace(N,"").concat(C);return U.replace(X,"")}return U})(),K=Sq(G,B),L=nq(K,[B,q,...k]),O=L;if(!z){if(k.some((R)=>R===L.toLowerCase().replace(q,"")))return"";let E=vq(L,q);if(gq(E))O=E}let b=(()=>{if(w&&Q)return"-";return""})();if(q&&O.includes(q)){let[E,R]=L.split(q),d=Y&&R?R.slice(0,Y):R,p=J?`${q}${d}`:"";return`${b}${E}${p}`}return`${b}${O}`},Gq=(H,B,q)=>{if(xq(q)&&H.length>1){if(q===0)return H.replace(B,"");if(H.includes(B)){let[z,X]=H.split(B);if(X.length===q)return H;if(X.length>q)return`${z}${B}${X.slice(0,q)}`}let Y=(()=>{if(H.length>q)return new RegExp(`(\\d+)(\\d{${q}})`);return/(\d)(\d+)/})(),Q=H.match(Y);if(Q){let[,z,X]=Q;return`${z}${B}${X}`}}return H},Jq=(H,{groupSeparator:B=",",decimalSeparator:q="."})=>{let J=new RegExp(`\\d([^${P(B)}${P(q)}0-9]+)`),Y=H.match(J);if(Uq(Y))return Y[1];return null},mq={currencySymbol:"",groupSeparator:"",decimalSeparator:"",prefix:"",suffix:""},Kq=(H)=>{let{locale:B,currency:q}=H||{};return(()=>{if(B){if(q)return new Intl.NumberFormat(B,{currency:q,style:"currency"});return new Intl.NumberFormat(B)}return new Intl.NumberFormat})().formatToParts(1000.1).reduce((Q,z,X)=>{if(z.type==="currency")if(X===0)return{...Q,currencySymbol:z.value,prefix:z.value};else return{...Q,currencySymbol:z.value,suffix:z.value};if(z.type==="group")return{...Q,groupSeparator:z.value};if(z.type==="decimal")return{...Q,decimalSeparator:z.value};return Q},mq)},h=(H)=>{let{value:B,decimalSeparator:q,intlConfig:J,decimalScale:Y,prefix:Q,suffix:z=""}=H;if(B===""||Bq(B))return"";if(B==="-")return"-";let M=new RegExp(`^\\d?-${(()=>{if(Mq(Q))return"";return`${P(Q)}?`})()}\\d`).test(B),W=(()=>{if(q!==".")return dq(B,q,M);return B})(),y=(()=>{if(q&&q!=="-"&&W.startsWith(q))return`0${W}`;return W})(),w={minimumFractionDigits:Y||0,maximumFractionDigits:20},C=(J?new Intl.NumberFormat(J.locale,J.currency?{...w,style:"currency",currency:J.currency}:w):new Intl.NumberFormat(void 0,w)).formatToParts(Number(y)),F=pq(C,H),G=Jq(F,{...H}),K=B.slice(-1)===q?q:"",O=(()=>{let S=/\d+\.(\d+)/,b=y.match(S);if(Uq(b)&&b.length>1)return b[1];return null})();if(Mq(Y)&&O&&q)if(F.includes(q))F=F.replace(RegExp(`(\\d+)(${P(q)})(\\d+)`,"g"),`$1$2${O}`);else if(G&&!z)F=F.replace(G,`${q}${O}${G}`);else F=`${F}${q}${O}`;if(z&&K)return`${F}${K}${z}`;if(G&&K)return F.replace(G,`${K}${G}`);if(G&&z)return F.replace(G,`${K}${z}`);return[F,K,z].join("")},dq=(H,B,q)=>{if(B&&B!=="."){let J=H.replace(RegExp(P(B),"g"),".");if(q&&B==="-")return`-${J.slice(1)}`;return J}return H},pq=(H,{prefix:B,groupSeparator:q,decimalSeparator:J,decimalScale:Y,disableGroupSeparators:Q=!1})=>{return H.reduce((z,{type:X,value:M},U)=>{if(U===0&&B){if(X==="minusSign")return[M,B];if(X==="currency")return[...z,B];return[B,M]}if(X==="currency"){if(B)return z;return[...z,M]}if(X==="group"){if(!Q){if(q)return[...z,q];return[...z,M]}return z}if(X==="decimal"){if(Y&&Y===0)return z;if(J)return[...z,J];return[...z,M]}if(X==="fraction"){if(Y)return[...z,M.slice(0,Y)];return[...z,M]}return[...z,M]},[""]).join("")},Tq=(H,B=".",q)=>{if(Bq(q)||H===""||Bq(H))return H;let J=H.match(/\d/g);if(hq(J))return"";let[Y,Q]=H.split(B);if(q===0)return Y;let z=Q||"";if(z.length<q)while(z.length<q)z+="0";else z=z.slice(0,q);return`${Y}${B}${z}`},Wq=({selectionStart:H,value:B,lastKeyStroke:q,stateValue:J,groupSeparator:Y})=>{let Q=H,z=B;if(J&&Q){let X=B.split("");if(q==="Backspace"&&J[Q]===Y)X.splice(Q-1,1),Q-=1;if(q==="Delete"&&J[Q]===Y)X.splice(Q,1),Q+=1;return z=X.join(""),{modifiedValue:z,cursorPosition:Q}}return{modifiedValue:z,cursorPosition:H}};import{component as cq,useState as m,useEffect as Aq,useRef as oq,useMemo as uq,detectIsEmpty as _q,detectIsString as l,detectIsNumber as r,detectIsNull as iq}from"@dark-engine/core";import{detectIsNaN as tq}from"@wareme/utils";import{jsxDEV as Oq}from"@dark-engine/core/jsx-dev-runtime";var lq=cq(({allowDecimals:H=!0,allowNegativeValue:B=!0,id:q,name:J,className:Y,customInput:Q,decimalsLimit:z,defaultValue:X,disabled:M=!1,maxLength:U,value:W,onValueChange:k,fixedDecimalLength:y,placeholder:w,decimalScale:N,prefix:C,suffix:F,intlConfig:G,step:K,min:L,max:O,disableGroupSeparators:S=!1,disableAbbreviations:b=!1,decimalSeparator:E,groupSeparator:R,onInput:d,onFocus:p,onBlur:c,onKeyDown:Qq,onKeyUp:Xq,transformRawValue:kq,formatValueOnBlur:Pq=!0,...Nq})=>{if(E&&Hq(E))i("decimalSeparator cannot be a number");if(R&&Hq(R))i("groupSeparator cannot be a number");let o=uq(()=>Kq(G),[G]),j=E||o.decimalSeparator||"",x=R||o.groupSeparator||"";if(j&&x&&j===x&&S===!1)i("decimalSeparator cannot be the same as groupSeparator");let n={decimalSeparator:j,groupSeparator:x,disableGroupSeparators:S,intlConfig:G,prefix:C||o.prefix,suffix:F},a={decimalSeparator:j,groupSeparator:x,allowDecimals:H,decimalsLimit:z||y||2,allowNegativeValue:B,disableAbbreviations:b,prefix:C||o.prefix,transformRawValue:kq},Eq=()=>{if(l(X))return h({...n,decimalScale:N,value:X});if(l(W))return h({...n,decimalScale:N,value:W});return""},[T,s]=m(Eq()),[e,Rq]=m(!1),[qq,zq]=m(0),[Yq,Iq]=m(0),[Cq,Lq]=m(null),V=oq(null),Zq=(Z,A)=>{Rq(!0);let{modifiedValue:_,cursorPosition:I}=Wq({selectionStart:A,value:Z,lastKeyStroke:Cq,stateValue:T,groupSeparator:x}),$=t({value:_,...a});if(U&&$.replace(/-/g,"").length>U)return;if($===""||$==="-"||$===j){if(k)k(void 0,J,{float:null,formatted:"",value:""});s($),zq(1);return}let D=(()=>{if(j)return $.replace(j,".");return $})(),v=parseFloat(D),f=h({value:$,...n});if(r(I)){let u=(()=>{let Fq=I+(f.length-Z.length);if(Fq<=0){if(C)return C.length;return 0}return Fq})();zq(u),Iq(Yq+1)}if(s(f),k)k($,J,{float:v,formatted:f,value:$})},bq=(Z)=>{let{value:A,selectionStart:_}=Z.target;if(Zq(A,_),d)d(Z)},Dq=(Z)=>{if(p)p(Z);if(T)return T.length;return 0},yq=(Z)=>{let{value:A}=Z.target,_=t({value:A,...a});if(_==="-"||_===j||!_){if(s(""),c)c(Z);return}let I=Gq(_,j,y),g=Tq(I,j,(()=>{if(r(N))return N;return y})()),D=parseFloat(g.replace(j,".")),v=h({...n,value:g});if(k&&Pq)k(g,J,{float:D,formatted:v,value:g});if(s(v),c)c(Z)},wq=(Z)=>{let{key:A}=Z.sourceEvent;if(Lq(A),K&&(A==="ArrowUp"||A==="ArrowDown")){Z.preventDefault(),zq(T.length);let _=()=>{if(l(W))return W.replace(j,".");return t({value:T,...a})},$=(()=>{let u=parseFloat(_());if(tq(u))return 0;return u})(),D=(()=>{if(A==="ArrowUp")return $+K;return $-K})();if(r(L)&&D<L)return;if(r(O)&&D>O)return;let f=(()=>{if(String(K).includes("."))return Number(String(K).split(".")[1].length);return null})();Zq(String((()=>{if(iq(f))return D;return D.toFixed(f)})()).replace(".",j))}if(Qq)Qq(Z)},Vq=(Z)=>{let{key:A}=Z.sourceEvent,{selectionStart:_}=Z.target;if(A!=="ArrowUp"&&A!=="ArrowDown"&&T!=="-"){let I=Jq(T,{groupSeparator:x,decimalSeparator:j});if(I&&_&&_>T.length-I.length){if(V.current){let $=T.length-I.length;V.current.setSelectionRange($,$)}}}if(Xq)Xq(Z)};Aq(()=>{if(_q(W)&&_q(X))s("")},[X,W]),Aq(()=>{if(e&&T!=="-"&&V.current&&document.activeElement===V.current)V.current.setSelectionRange(qq,qq)},[T,qq,V,e,Yq]);let $q={type:"text",inputMode:"decimal",id:q,name:J,className:Y,onInput:bq,onBlur:yq,onFocus:Dq,onKeyDown:wq,onKeyUp:Vq,placeholder:w,disabled:M,value:(()=>{if(l(W)&&T!=="-"&&(!j||T!==j))return h({...n,decimalScale:(()=>{if(e)return null;return N})(),value:W});return T})(),ref:V,...Nq};if(Q)return Oq(Q,{...$q},void 0,!1,void 0,this);return Oq("input",{...$q},void 0,!1,void 0,this)}),rq=lq;export{h as formatValue,rq as CurrencyInput}; //# debugId=2896E9F5AC2F3EBD64756E2164756E21