siegel
Version:
Web application development ecosystem
1 lines • 4.42 kB
JavaScript
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 o from"../_internals/resolve_tag_attributes.js";import s 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 d from"../_internals/label.js";import p,{getDefaultState as c}from"../Input/index.js";import{setCaretPos as f}from"../Input/utils.js";import{buildInputRegexp as _,getInputString as v,getValuePrecision as b,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=void 0,E="-ui-number_picker";function V(e,t,r,a){let l=F(e.value)?t:void 0;return{prevValidNumber:l,stringValue:v({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 eo="number"==typeof M?M:parseFloat(M),es=n(M),ei=_(el,en,k,U),em=r(null),eu=q||t(c()),[{isFocused:ed},ep]=eu,[ec,ef]=t(()=>V(i,eo,ei,ed)),{prevValidNumber:e_,stringValue:ev}=ec;a(()=>{(!ed||B&&eo!=+ev)&&ef(V(i,eo,ei,document.activeElement?.nodeName=="INPUT"&&ed))},[B,ed,M]);let eb=e=>{e.stopPropagation();let{relatedTarget:t}=e.nativeEvent;t&&em.current.contains(t)||(et?.(e),e.defaultPrevented||ep({isFocused:!1,isTouched:!0}),es&&(ec.stringValue=v({props:i,numberValue:eo,numberMask:ei,prevValidNumber:e_,isFocused:!1})))},eg=e=>{e.stopPropagation(),ee?.(e),e.defaultPrevented||ep({isFocused:!0,isTouched:!0}),es&&(ec.stringValue=v({props:i,numberValue:eo,numberMask:ei,prevValidNumber:e_,isFocused:!0}))};D||(ed?P=eb:j=eg);let eh={ref:em,onKeyDown:er,onFocus:j,onBlur:P,className:s(w,[[y._disabled_all,D],[y._focused,ed],[y._error,n(A)]])};I&&!D&&(eh.tabIndex=0,ed?eh.onBlur=eb:eh.onFocus=eg),u(eh,i);let ex=(e,t,r)=>{let a;if(isNaN(eo))a=r<0?isFinite(en)?en:isFinite(el)?el:0:isFinite(el)?el:isFinite(en)?en:0;else{let e=b(r),t=b(eo);a=h(a=e||t?l(Math.max(e,t),eo,r):eo+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:eo,onStepChange:ex,onPickerBlur:P,onPickerFocus:j});E=r,ed&&(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=o(eh,L);let eF=e.createElement(p,{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:ev,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(eo))es&&(t=el<=0&&0<=en?0:Math.abs(el)>Math.abs(en)?en:el);else{let e=h(eo,el,en);e!=eo||N(ev)?t=e:r=!1}r&&Z({event:e,payload:S,numberValue:t})}},onChange(e,t){let r=x(e);if(ev!=r){let a=parseFloat(e),l=h(a,el,en),o=F(r);o&&l==a&&Z({event:t,payload:S,numberValue:a}),ea?.({value:e,event:t,isValidStringNumber:o,payload:S}),t.defaultPrevented||0===k&&n(en)&&a>en||(ec.stringValue=r,ef({...ec}))}}});return e.createElement("div",{...eh},O?d(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};