UNPKG

@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) 2.5 kB
import{jsx as t}from"react/jsx-runtime";import{forwardRef as e,useRef as n,useState as r,useMemo as u,useCallback as i,useImperativeHandle as a,useEffect as o}from"react";import c from"./UnitLibs/index.js";import{unitDisplayStringMapGenerator as s,isFraction as l,fractionToDecimal as m,handleUnitValue as p,getValidUnit as d}from"./helper.js";import{UnitFormatter as $}from"./UnitFormatter.container.js";const v=/^-?\d+(\.\d+)?$/;var N=e(((e,N)=>{const{initialValue:f,unitPlacement:b="start",unitType:S="CustomUnit",units:g=[],onChange:h,disabled:y,startAdornment:E,endAdornment:F,...j}=e,A=n(v.test(`${f?.value}`)?Number(f?.value):0),U=n(f?.unit||""),[V,x]=r(v.test(`${f?.value}`)?Number(f?.value):""),[I,C]=r(f?.unit||""),T=u((()=>({value:V,unit:I})),[V,I]),_=u((()=>{if("CustomUnit"===S){const t={};return g.forEach((e=>{t[e.type]=e})),t}return c[S]}),[g,S]),D=u((()=>s(_)),[_]),G=u((()=>_[I]||{type:I,minValue:0,placeholder:""}),[_,I]),M=i(((t,e)=>{const{current:n}=U,{current:r}=A,u=l(t)?m(t):parseFloat(t);e===n&&u===r||(A.current=u,U.current=e,h?.({value:u,unit:e}))}),[h]),O=i(((t,e=!1)=>{const n=U.current,r=A.current,u=p(String(t));u?P(u,n,r,e):O(`${r} ${n}`,e)}),[M,G.minValue,_,D]),P=(t,e,n,r=!1)=>{const u=d(t.unit,D)||e;let i=v.test(String(t.value))?t.value:n;if(i=Number(i)<=(G.minValue??Number.MIN_SAFE_INTEGER)?G.minValue??Number.MIN_SAFE_INTEGER:i,!u)return;const{valueFormatter:a}=_[u]||{};i=a?a(String(i)):i,x(r?`${i} ${u}`:i),C(u),M(String(i),u)},R=t=>{const{current:e}=A,{current:n}=U,r=G.minValue??0;let u=Number(e||0)+("up"===t?1:-1);u=u<=r?r:u,O(`${u} ${n}`,"input"===b)},k=i((t=>{const{value:e}=t;O(String(e),"input"===b)}),[b,O]),w=i((t=>{const{current:e}=U,{current:n}=A;t!==e&&(C(t),O(`${n} ${t}`))}),[O]),B=i((t=>{const{value:e,unit:n}=t;x(e),w(n)}),[w]),L=i((t=>{const{value:e,unit:n}=t||{};x(e||""),C(n||_[0].displayName)}),[_]);return a(N,(()=>({reset:L})),[L]),o((()=>{const{current:t}=U,{current:e}=A;O(`${e} ${t}`,"input"===b)}),[O,b]),o((()=>{const{current:t}=U,{current:e}=A;if(!d(t,D)&&Object.keys(_).length>0){const[t]=Object.entries(_).filter((([,t])=>t.isDefault)),[n]=t||["",{type:""}];U.current=n,O(`${e} ${n}`,"input"===b)}}),[_,D,b,O]),t($,{"data-testid":"NexusSimpleUnitFormatter-root",className:"NexusSimpleUnitFormatter-root",placeholder:G.placeholder,unitPlacement:b,unitType:S,units:g,value:T,startAdornment:E,endAdornment:F,disabled:y,...j,onChange:B,onBlur:k,onStepDecrement:()=>R("down"),onStepIncrement:()=>R("up")})}));export{N as default};