UNPKG

primereact

Version:

PrimeReact is an open source UI library for React featuring a rich set of 80+ 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) 6.97 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,classNames as c,DomHandler 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=e.memo(e.forwardRef((function(i,s){var f=e.useRef(s),v=e.useRef(null),m=e.useRef(0),g=e.useRef([]),p=e.useRef([]),d=e.useRef(0),h=e.useRef(null),b=e.useRef(!1),y=e.useRef(null),k=e.useRef(null),C=e.useRef(null),R=e.useRef(null),E=e.useRef(null),x=e.useRef(!1),O=function(e,r){var n,t,u,c=f.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())))},A=function(){for(var e=v.current;e<=m.current;e++)if(g.current[e]&&p.current[e]===P(e))return!1;return!0},P=e.useCallback((function(e){return i.slotChar.charAt(e<i.slotChar.length?e:0)}),[i.slotChar]),T=function(){return i.unmask?M():f.current&&f.current.value},j=function(e){for(;++e<d.current&&!g.current[e];);return e},I=function(e){for(;--e>=0&&!g.current[e];);return e},S=function(e,r){var n,t;if(!(e<0)){for(n=e,t=j(r);n<d.current;n++)if(g.current[n]){if(!(t<d.current&&g.current[n].test(p.current[t])))break;p.current[n]=p.current[t],p.current[t]=P(t),t=j(t)}B(),O(Math.max(v.current,e))}},w=function(e){var r,n,t,u;for(r=e,n=P(e);r<d.current;r++)if(g.current[r]){if(t=j(r),u=p.current[r],p.current[r]=n,!(t<d.current&&g.current[t].test(u)))break;n=u}},D=function(e){var r=f.current.value,n=O();if(h.current.length&&h.current.length>r.length){for(F(!0);n.begin>0&&!g.current[n.begin-1];)n.begin--;if(0===n.begin)for(;n.begin<v.current&&!g.current[n.begin];)n.begin++;O(n.begin,n.begin)}else{for(F(!0);n.begin<d.current&&!g.current[n.begin];)n.begin++;O(n.begin,n.begin)}i.onComplete&&A()&&i.onComplete({originalEvent:e,value:T()}),N(e)},K=function(e){if(b.current=!1,F(),N(e),q(),i.onBlur&&i.onBlur(e),f.current.value!==y.current){var r=document.createEvent("HTMLEvents");r.initEvent("change",!0,!1),f.current.dispatchEvent(r)}},z=function(e,r){var n;for(n=e;n<r&&n<d.current;n++)g.current[n]&&(p.current[n]=P(n))},B=function(){f.current.value=p.current.join("")},F=function(e){k.current=!0;var r,n,t,u=f.current.value,c=-1;for(r=0,t=0;r<d.current;r++)if(g.current[r]){for(p.current[r]=P(r);t++<u.length;)if(n=u.charAt(t-1),g.current[r].test(n)){p.current[r]=n,c=r;break}if(t>u.length){z(r+1,d.current);break}}else p.current[r]===u.charAt(t)&&t++,r<C.current&&(c=r);return e?B():c+1<C.current?i.autoClear||p.current.join("")===R.current?(f.current.value&&(f.current.value=""),z(0,d.current)):B():(B(),f.current.value=f.current.value.substring(0,c+1)),C.current?r:v.current},L=function(e){if(!i.readOnly){var r=F(!0);O(r),N(e),i.onComplete&&A()&&i.onComplete({originalEvent:e,value:T()})}},M=e.useCallback((function(){for(var e=[],r=0;r<p.current.length;r++){var n=p.current[r];g.current[r]&&n!==P(r)&&e.push(n)}return e.join("")}),[P]),N=function(e){if(i.onChange){var r=i.unmask?M():e&&e.target.value;i.onChange({originalEvent:e,value:R.current!==r?r:"",stopPropagation:function(){},preventDefault:function(){},target:{name:i.name,id:i.id,value:R.current!==r?r:""}})}},q=function(){f.current&&f.current.value&&f.current.value.length>0?a.addClass(f.current,"p-filled"):a.removeClass(f.current,"p-filled")},U=function(e){var r;return f.current&&(null==i.value?f.current.value="":(f.current.value=i.value,r=F(e),setTimeout((function(){if(f.current)return B(),F(e)}),10)),y.current=f.current.value),q(),r},_=e.useCallback((function(){return i.unmask?i.value!==M():R.current!==f.current.value&&f.current.value!==i.value}),[i.unmask,i.value,M]),H=function(){if(i.mask){g.current=[],C.current=i.mask.length,d.current=i.mask.length,v.current=null;var e={9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},r=a.getUserAgent();x.current=/chrome/i.test(r)&&/android/i.test(r);for(var n=i.mask.split(""),t=0;t<n.length;t++){var u=n[t];"?"===u?(d.current--,C.current=t):e[u]?(g.current.push(new RegExp(e[u])),null===v.current&&(v.current=g.current.length-1),t<C.current&&(m.current=g.current.length-1)):g.current.push(null)}p.current=[];for(var c=0;c<n.length;c++){var l=n[c];"?"!==l&&p.current.push(e[l]?P(c):l)}R.current=p.current.join("")}};e.useImperativeHandle(s,(function(){return{props:i,getElement:function(){return f.current}}})),e.useEffect((function(){u.combinedRefs(f,s)}),[f,s]),r((function(){H(),U()})),n((function(){H(),O(U(!0)),i.unmask&&N()}),[i.mask]),n((function(){_()&&U()}),[_]);var Z=u.findDiffKeys(i,o.defaultProps),Y=c("p-inputmask",i.className);return e.createElement(t,l({ref:f,id:i.id,type:i.type,name:i.name,style:i.style,className:Y},Z,{placeholder:i.placeholder,size:i.size,maxLength:i.maxLength,tabIndex:i.tabIndex,disabled:i.disabled,readOnly:i.readOnly,onFocus:function(e){var r;i.readOnly||(b.current=!0,clearTimeout(E.current),y.current=f.current.value,r=F(),E.current=setTimeout((function(){f.current===document.activeElement&&(B(),r===i.mask.replace("?","").length?O(0,r):O(r),q())}),10),i.onFocus&&i.onFocus(e))},onBlur:K,onKeyDown:function(e){if(!i.readOnly){var r,n,t,u=e.which||e.keyCode,c=/iphone/i.test(a.getUserAgent());h.current=f.current.value,8===u||46===u||c&&127===u?((t=(r=O()).end)-(n=r.begin)==0&&(n=46!==u?I(n):t=j(n-1),t=46===u?j(t):t),z(n,t),S(n,t-1),N(e),e.preventDefault()):13===u?(K(e),N(e)):27===u&&(f.current.value=y.current,O(0,F()),N(e),e.preventDefault())}},onKeyPress:function(e){if(!i.readOnly){var r,n,t,u,c=e.which||e.keyCode,l=O();if(!(e.ctrlKey||e.altKey||e.metaKey||c<32)){if(c&&13!==c){if(l.end-l.begin!=0&&(z(l.begin,l.end),S(l.begin,l.end-1)),(r=j(l.begin-1))<d.current&&(n=String.fromCharCode(c),g.current[r].test(n))){if(w(r),p.current[r]=n,B(),t=j(r),/android/i.test(a.getUserAgent())){setTimeout((function(){O(t)}),0)}else O(t);l.begin<=m.current&&(u=A())}e.preventDefault()}N(e),i.onComplete&&u&&i.onComplete({originalEvent:e,value:T()})}}},onInput:function(e){x.current?D(e):L(e)},onPaste:L,required:i.required,tooltip:i.tooltip,tooltipOptions:i.tooltipOptions}))})));o.displayName="InputMask",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};export{o as InputMask};