UNPKG

primereact

Version:

PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime

2 lines (1 loc) 7.09 kB
import*as e from"react";import{useMountEffect as r,useUpdateEffect as n}from"primereact/hooks";import{InputText as t}from"primereact/inputtext";import{ObjectUtils as u,DomHandler as c,classNames as a}from"primereact/utils";function l(){return l=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])}return e},l.apply(this,arguments)}var o={defaultProps:{__TYPE:"InputMask",id:null,value:null,type:"text",mask:null,slotChar:"_",autoClear:!0,unmask:!1,style:null,className:null,placeholder:null,size:null,maxLength:null,tabIndex:null,disabled:!1,readOnly:!1,name:null,required:!1,tooltip:null,tooltipOptions:null,onComplete:null,onChange:null,onFocus:null,onBlur:null,children:void 0},getProps:function(e){return u.getMergedProps(e,o.defaultProps)},getOtherProps:function(e){return u.getDiffProps(e,o.defaultProps)}},i=e.memo(e.forwardRef((function(i,s){var f=o.getProps(i),v=e.useRef(s),p=e.useRef(null),g=e.useRef(0),m=e.useRef([]),d=e.useRef([]),h=e.useRef(0),b=e.useRef(null),k=e.useRef(!1),y=e.useRef(null),C=e.useRef(null),R=e.useRef(null),E=e.useRef(null),O=e.useRef(null),P=e.useRef(!1),x=function(e,r){var n,t,u,c=v.current;if(c&&c.offsetParent&&c===document.activeElement)return"number"!=typeof e?(c.setSelectionRange?(t=c.selectionStart,u=c.selectionEnd):document.selection&&document.selection.createRange&&(u=(t=0-(n=document.selection.createRange()).duplicate().moveStart("character",-1e5))+n.text.length),{begin:t,end:u}):(t=e,u="number"==typeof r?r:t,void(c.setSelectionRange?c.setSelectionRange(t,u):c.createTextRange&&((n=c.createTextRange()).collapse(!0),n.moveEnd("character",u),n.moveStart("character",t),n.select())))},I=function(){for(var e=p.current;e<=g.current;e++)if(m.current[e]&&d.current[e]===S(e))return!1;return!0},S=e.useCallback((function(e){return f.slotChar.charAt(e<f.slotChar.length?e:0)}),[f.slotChar]),T=function(){return f.unmask?N():v.current&&v.current.value},j=function(e){for(;++e<h.current&&!m.current[e];);return e},A=function(e){for(;--e>=0&&!m.current[e];);return e},w=function(e,r){var n,t;if(!(e<0)){for(n=e,t=j(r);n<h.current;n++)if(m.current[n]){if(!(t<h.current&&m.current[n].test(d.current[t])))break;d.current[n]=d.current[t],d.current[t]=S(t),t=j(t)}B(),x(Math.max(p.current,e))}},D=function(e){var r,n,t,u;for(r=e,n=S(e);r<h.current;r++)if(m.current[r]){if(t=j(r),u=d.current[r],d.current[r]=n,!(t<h.current&&m.current[t].test(u)))break;n=u}},z=function(e){var r=v.current.value,n=x();if(b.current.length&&b.current.length>r.length){for(F(!0);n.begin>0&&!m.current[n.begin-1];)n.begin--;if(0===n.begin)for(;n.begin<p.current&&!m.current[n.begin];)n.begin++;x(n.begin,n.begin)}else{for(F(!0);n.begin<h.current&&!m.current[n.begin];)n.begin++;x(n.begin,n.begin)}f.onComplete&&I()&&f.onComplete({originalEvent:e,value:T()}),q(e)},K=function(e){if(k.current=!1,F(),q(e),_(),f.onBlur&&f.onBlur(e),v.current.value!==y.current){var r=document.createEvent("HTMLEvents");r.initEvent("change",!0,!1),v.current.dispatchEvent(r)}},M=function(e,r){var n;for(n=e;n<r&&n<h.current;n++)m.current[n]&&(d.current[n]=S(n))},B=function(){v.current.value=d.current.join("")},F=function(e){C.current=!0;var r,n,t,u=v.current.value,c=-1;for(r=0,t=0;r<h.current;r++)if(m.current[r]){for(d.current[r]=S(r);t++<u.length;)if(n=u.charAt(t-1),m.current[r].test(n)){d.current[r]=n,c=r;break}if(t>u.length){M(r+1,h.current);break}}else d.current[r]===u.charAt(t)&&t++,r<R.current&&(c=r);return e?B():c+1<R.current?f.autoClear||d.current.join("")===E.current?(v.current.value&&(v.current.value=""),M(0,h.current)):B():(B(),v.current.value=v.current.value.substring(0,c+1)),R.current?r:p.current},L=function(e){if(!f.readOnly){var r=F(!0);x(r),q(e),f.onComplete&&I()&&f.onComplete({originalEvent:e,value:T()})}},N=e.useCallback((function(){for(var e=[],r=0;r<d.current.length;r++){var n=d.current[r];m.current[r]&&n!==S(r)&&e.push(n)}return e.join("")}),[S]),q=function(e){if(f.onChange){var r=f.unmask?N():e&&e.target.value;f.onChange({originalEvent:e,value:E.current!==r?r:"",stopPropagation:function(){},preventDefault:function(){},target:{name:f.name,id:f.id,value:E.current!==r?r:""}})}},_=function(){v.current&&v.current.value&&v.current.value.length>0?c.addClass(v.current,"p-filled"):c.removeClass(v.current,"p-filled")},H=function(e){var r;return v.current&&(null==f.value?v.current.value="":(v.current.value=f.value,r=F(e),setTimeout((function(){if(v.current)return B(),F(e)}),10)),y.current=v.current.value),_(),r},Z=e.useCallback((function(){return f.unmask?f.value!==N():E.current!==v.current.value&&v.current.value!==f.value}),[f.unmask,f.value,N]),Y=function(){if(f.mask){m.current=[],R.current=f.mask.length,h.current=f.mask.length,p.current=null;var e={9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"};P.current=c.isChrome()&&c.isAndroid();for(var r=f.mask.split(""),n=0;n<r.length;n++){var t=r[n];"?"===t?(h.current--,R.current=n):e[t]?(m.current.push(new RegExp(e[t])),null===p.current&&(p.current=m.current.length-1),n<R.current&&(g.current=m.current.length-1)):m.current.push(null)}d.current=[];for(var u=0;u<r.length;u++){var a=r[u];"?"!==a&&d.current.push(e[a]?S(u):a)}E.current=d.current.join("")}};e.useImperativeHandle(s,(function(){return{props:f,focus:function(){return c.focus(v.current)},getElement:function(){return v.current}}})),e.useEffect((function(){u.combinedRefs(v,s)}),[v,s]),r((function(){Y(),H()})),n((function(){Y(),x(H(!0)),f.unmask&&q()}),[f.mask]),n((function(){Z()&&H()}),[Z]);var G=o.getOtherProps(f),J=a("p-inputmask",f.className);return e.createElement(t,l({ref:v,id:f.id,type:f.type,name:f.name,style:f.style,className:J},G,{placeholder:f.placeholder,size:f.size,maxLength:f.maxLength,tabIndex:f.tabIndex,disabled:f.disabled,readOnly:f.readOnly,onFocus:function(e){var r;f.readOnly||(k.current=!0,clearTimeout(O.current),y.current=v.current.value,r=F(),O.current=setTimeout((function(){v.current===document.activeElement&&(B(),r===f.mask.replace("?","").length?x(0,r):x(r),_())}),10),f.onFocus&&f.onFocus(e))},onBlur:K,onKeyDown:function(e){if(!f.readOnly){var r,n,t,u=e.which||e.keyCode;b.current=v.current.value,8===u||46===u||c.isIOS()&&127===u?((t=(r=x()).end)-(n=r.begin)==0&&(n=46!==u?A(n):t=j(n-1),t=46===u?j(t):t),M(n,t),w(n,t-1),q(e),e.preventDefault()):13===u?(K(e),q(e)):27===u&&(v.current.value=y.current,x(0,F()),q(e),e.preventDefault())}},onKeyPress:function(e){if(!f.readOnly){var r,n,t,u,a=e.which||e.keyCode,l=x();if(!(e.ctrlKey||e.altKey||e.metaKey||a<32)){if(a&&13!==a){if(l.end-l.begin!=0&&(M(l.begin,l.end),w(l.begin,l.end-1)),(r=j(l.begin-1))<h.current&&(n=String.fromCharCode(a),m.current[r].test(n))){if(D(r),d.current[r]=n,B(),t=j(r),c.isAndroid()){setTimeout((function(){x(t)}),0)}else x(t);l.begin<=g.current&&(u=I())}e.preventDefault()}q(e),f.onComplete&&u&&f.onComplete({originalEvent:e,value:T()})}}},onInput:function(e){P.current?z(e):L(e)},onPaste:L,required:f.required,tooltip:f.tooltip,tooltipOptions:f.tooltipOptions}))})));i.displayName="InputMask";export{i as InputMask};