UNPKG

siegel

Version:

Web application development ecosystem

1 lines 4.42 kB
import e,{useState as t,useRef as r}from"react";import a from"../../hooks/did_update.js";import l from"../../../common/math/floats_arifmetic/index.js";import n from"../../../common/is/exists/index.js";import s from"../_internals/resolve_tag_attributes.js";import o from"../_internals/apply_classname.js";import i from"../_internals/component.js";import*as m from"../_internals/key_codes.js";import u from"../_internals/ref_apply.js";import p from"../_internals/label.js";import d,{getDefaultState as c}from"../Input/index.js";import{setCaretPos as f}from"../Input/utils.js";import{buildInputRegexp as _,getInputString as b,getValuePrecision as v,getStepButtons as g,adjustWithRanges as h,pretifyInputString as x,isValidNumberString as F,isValidNumberMissingDigits as N}from"./helpers/index.js";import j from"./styles.sass";let P,E="-ui-number_picker";function V(e,t,r,a){let l=F(e.value)?t:void 0;return{prevValidNumber:l,stringValue:b({props:e,numberValue:t,numberMask:r,isFocused:a,prevValidNumber:l})}}let y=i(E,{className:j.root,theme:{root:P,label_wrapper:P,label_text:P,controls:P,value_decrement_icon:P,value_increment_icon:P,button__disabled:P,_error:P,_disabled_all:P,_focused:P},inputTheme:{},min:-1/0,max:1/0,focusedValueOutsideUpdate:!0},i=>{let j,P,E,{theme:y,disabled:D,step:T,precision:k,disabledInput:I,className:w,focusedValueOutsideUpdate:B,value:M,regexp:U,label:O,payload:S,inputStore:q,errorMsg:A,placeholder:C,inputAttributes:K,rootTagAttributes:L,inputRootAttributes:W,children:$,debounceMs:z,suffix:G,prefix:H,autofocus:J,mask:Q,inputTheme:R,inputMemoDeps:X,inputClassName:Y,onChange:Z,onFocus:ee,onBlur:et,onKeyDown:er,onStringChange:ea}=i,{min:el,max:en}=i;el>en&&([el,en]=[en,el]);let es="number"==typeof M?M:parseFloat(M),eo=n(M),ei=_(el,en,k,U),em=r(null),eu=q||t(c()),[{isFocused:ep},ed]=eu,[ec,ef]=t(()=>V(i,es,ei,ep)),{prevValidNumber:e_,stringValue:eb}=ec;a(()=>{(D||!ep||B&&es!=+eb)&&ef(V(i,es,ei,document.activeElement?.nodeName=="INPUT"&&ep))},[B,ep,M,D]);let ev=e=>{e.stopPropagation();let{relatedTarget:t}=e.nativeEvent;t&&em.current.contains(t)||(et?.(e),e.defaultPrevented||ed({isFocused:!1,isTouched:!0}),eo&&(ec.stringValue=b({props:i,numberValue:es,numberMask:ei,prevValidNumber:e_,isFocused:!1})))},eg=e=>{e.stopPropagation(),ee?.(e),e.defaultPrevented||ed({isFocused:!0,isTouched:!0}),eo&&(ec.stringValue=b({props:i,numberValue:es,numberMask:ei,prevValidNumber:e_,isFocused:!0}))};D||(ep?P=ev:j=eg);let eh={ref:em,onKeyDown:er,onFocus:j,onBlur:P,className:o(w,[[y._disabled_all,D],[y._focused,ep],[y._error,n(A)]])};I&&!D&&(eh.tabIndex=0,ep?eh.onBlur=ev:eh.onFocus=eg),u(eh,i);let ex=(e,t,r)=>{let a;if(isNaN(es))a=r<0?isFinite(en)?en:isFinite(el)?el:0:isFinite(el)?el:isFinite(en)?en:0;else{let e=v(r),t=v(es);a=h(a=e||t?l(Math.max(e,t),es,r):es+r,el,en)}n(k)&&(a=a.toFixed(k)),Z({event:e,isKeyboardArrowUp:t,payload:S,numberValue:+a}),"click"==e.type&&e.defaultPrevented||(ec.stringValue=`${a}`,ef({...ec}))};if(!D&&n(T)){let{isDisabledDown:e,isDisabledUp:t,stepperElement:r}=g({props:i,min:el,max:en,numberValue:es,onStepChange:ex,onPickerBlur:P,onPickerFocus:j});E=r,ep&&(eh.onKeyDown=r=>{if(er?.(r),!r.defaultPrevented){let a=r.key;if(a==m.DELETE)ec.stringValue="",ef({...ec}),G&&f({current:r.currentTarget.querySelector("input")},H?.length||0);else{let l=a==m.UP,n=a==m.DOWN;if(l&&!t||n&&!e){let e=T;l||(e*=-1),ex(r,l,e)}}}})}eh=s(eh,L);let eF=e.createElement(d,{children:$,errorMsg:A,placeholder:C,inputAttributes:K,mask:Q,suffix:G,prefix:H,debounceMs:z,autofocus:J,theme:R,memoDeps:X,className:Y,rootTagAttributes:W,regexp:ei,value:eb,store:eu,disabled:D||I,onBlur(e){let{relatedTarget:t}=e.nativeEvent;if(t&&em.current.contains(t))e.stopPropagation(),e.preventDefault();else if(!e.defaultPrevented){let t,r=!0;if(isNaN(es))eo&&(t=el<=0&&0<=en?0:Math.abs(el)>Math.abs(en)?en:el);else{let e=h(es,el,en);e!=es||N(eb)?t=e:r=!1}r&&Z({event:e,payload:S,numberValue:t})}},onChange(e,t){let r=x(e);if(eb!=r){let a=parseFloat(e),l=h(a,el,en),s=F(r);s&&l==a&&Z({event:t,payload:S,numberValue:a}),ea?.({value:e,event:t,isValidStringNumber:s,payload:S}),t.defaultPrevented||0===k&&n(en)&&a>en||(ec.stringValue=r,ef({...ec}))}}});return e.createElement("div",{...eh},O?p(e.createElement("div",{className:y.input_wrapper},eF,E),{className:y.label_wrapper},{className:y.label_text,children:O}):e.createElement(e.Fragment,null,eF,E))});export default y;export{E as componentID};