siegel
Version:
Web application development ecosystem
1 lines • 4.38 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 p from"../_internals/label.js";import c,{getDefaultState as d}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 E=void 0,V="-ui-number_picker";function P(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(V,{className:j.root,theme:{root:E,label_wrapper:E,label_text:E,controls:E,value_decrement_icon:E,value_increment_icon:E,button__disabled:E,_error:E,_disabled_all:E,_focused:E},inputTheme:{},min:-1/0,max:1/0,focusedValueOutsideUpdate:!0},i=>{let j,E,V,{theme:y,disabled:D,step:T,precision:I,disabledInput:k,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,onClick:ea,onStringChange:el}=i,{min:en,max:eo}=i;en>eo&&([en,eo]=[eo,en]);let es="number"==typeof M?M:parseFloat(M),ei=n(M),em=_(en,eo,I,U),eu=r(null),ep=q||t(d()),[{isFocused:ec},ed]=ep,[ef,e_]=t(()=>P(i,es,em,ec)),{prevValidNumber:eb,stringValue:ev}=ef;a(()=>{(!ec||B&&es!=+ev)&&e_(P(i,es,em,document.activeElement?.nodeName=="INPUT"&&ec))},[B,ec,M]);let eg=e=>{e.stopPropagation();let{relatedTarget:t}=e.nativeEvent;t&&eu.current.contains(t)||(et?.(e),e.defaultPrevented||ed({isFocused:!1,isTouched:!0}),ei&&(ef.stringValue=b({props:i,numberValue:es,numberMask:em,prevValidNumber:eb,isFocused:!1})))},eh=e=>{e.stopPropagation(),ee?.(e),e.defaultPrevented||ed({isFocused:!0,isTouched:!0}),ei&&(ef.stringValue=b({props:i,numberValue:es,numberMask:em,prevValidNumber:eb,isFocused:!0}))};D||(ec?E=eg:j=eh);let ex={ref:eu,onKeyDown:er,onClick:ea,onFocus:j,onBlur:E,className:s(w,[[y._disabled_all,D],[y._focused,ec],[y._error,n(A)]])};k&&!D&&(ex.tabIndex=0,ec?ex.onBlur=eg:ex.onFocus=eh),u(ex,i);let eF=(e,t,r)=>{let a;if(isNaN(es))a=r<0?isFinite(eo)?eo:isFinite(en)?en:0:isFinite(en)?en:isFinite(eo)?eo:0;else{let e=v(r),t=v(es);a=h(a=e||t?l(Math.max(e,t),es,r):es+r,en,eo)}n(I)&&(a=a.toFixed(I)),Z({event:e,isKeyboardArrowUp:t,payload:S,numberValue:+a}),ef.stringValue=`${a}`,e_({...ef})};if(!D&&n(T)){let{isDisabledDown:e,isDisabledUp:t,stepperElement:r}=g({props:i,min:en,max:eo,numberValue:es,onStepChange:eF,onPickerBlur:E,onPickerFocus:j});V=r,ec&&(ex.onKeyDown=r=>{if(er?.(r),!r.defaultPrevented){let a=r.key;if(a==m.DELETE)ef.stringValue="",e_({...ef}),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){r.preventDefault();let e=T;l||(e*=-1),eF(r,l,e)}}}})}ex=o(ex,L);let eN=e.createElement(c,{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:em,value:ev,store:ep,disabled:D||k,onBlur(e){let{relatedTarget:t}=e.nativeEvent;if(t&&eu.current.contains(t))e.stopPropagation(),e.preventDefault();else if(!e.defaultPrevented){let t,r=!0;if(isNaN(es))ei&&(t=en<=0&&0<=eo?0:Math.abs(en)>Math.abs(eo)?eo:en);else{let e=h(es,en,eo);e!=es||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,en,eo),n=F(r);n&&l==a&&Z({event:t,payload:S,numberValue:a}),el?.({value:e,event:t,isValidStringNumber:n,payload:S}),ef.stringValue=r,e_({...ef})}}});return e.createElement("div",{...ex},O?p(e.createElement("div",{className:y.input_wrapper},eN,V),{className:y.label_wrapper},{className:y.label_text,children:O}):e.createElement(e.Fragment,null,eN,V))});export default y;export{V as componentID};