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