UNPKG

svelte-formup

Version:
3 lines (2 loc) 5.64 kB
import{getContext as ya,setContext as za}from"svelte";import{writable as r,derived as w,get as N}from"svelte/store";import{identity as O,run_all as Aa,listen as P,prevent_default as aa,subscribe as s,query_selector_all as Ba,toggle_class as Ca,noop as ba,blank_object as ca}from"svelte/internal";const Q=a=>typeof a==="string",D=a=>a.tagName==="FORM",da=a=>{a&&Aa(a.filter(Boolean))},B=a=>Array.isArray(a)?a:a?[a]:[],R=a=>Q(a)&&a,Da=a=>a==null?void 0:a.split(/\s+/g).map(b=>E(document.getElementById(b))).find(O),E=a=>{var b;return a&&!D(a)&&(R((b=a.dataset)==null?void 0:b.pathAt)||R(a.name)||Da(a.htmlFor)||R(a.id))},ea=(a,b,c=E(a))=>{if(c)return b(c)},F=(a,b,c)=>B(b).map(e=>P(a,e,c)),fa=new WeakSet(),ga=new WeakSet(),G=(a,b)=>c=>{a.has(c)||(a.add(c),b(c))},ha=a=>b=>ea(b.target,a);function Ea(a,b,c){let e;const l=()=>da(e),m=(j={})=>{l(),Q(j)&&(j={at:j});const{at:q=E(b),debounce:g=a.debounce,validateOn:h=j.on||a.validateOn,dirtyOn:J=j.on||j.validateOn||a.dirtyOn}=j,x=n=>a.validateAt(n,{debounce:g}),p=n=>a.setDirtyAt(n);q?e=B(q).flatMap(n=>[...F(b,h,G(fa,()=>x(n))),...F(b,J,G(ga,()=>p(n)))]):(D(b)&&(b.noValidate=!0,b.autocomplete=a.autocomplete,b.role||(b.role="form"),e=[P(b,"submit",aa(a.submit)),P(b,"reset",aa(a.reset))]),e=[...F(b,h,G(fa,ha(x))),...F(b,J,G(ga,ha(p)))]),e.push(a.validity(b,j).destroy)};return m(c),{update:m,destroy:l}}let ia=Object.assign;const ja=(a,b,c,e,l)=>ea(a,m=>e(a,b,c,m),l),H=(a,b,c,e,l)=>s(e,m=>ja(b,c,m,l,a)),I=(a,b,c,e,l)=>s(c,m=>l(a,b,Ba("input,select,textarea,[contenteditable],output,object,button",a).map(j=>ja(j,b,m,e)))),Fa=a=>D(a)||"setCustomValidity"in a,v=(a,b,c,e)=>{const l=`${Fa(a)?"is":"has"}-${e}`;return Ca(a,b[l]||l,c),c},Ga=(a,b)=>{var c;return(c=a.setCustomValidity)==null||c.call(a,(b==null?void 0:b.message)||""),b},S=(a,b,c)=>(v(a,b,!c,"pristine"),v(a,b,c,"dirty")),ka=(a,b,c)=>v(a,b,c,"success"),la=(a,b,c)=>v(a,b,c,"error"),T=(a,b,c)=>v(a,b,c,"validating"),ma=(a,b,c)=>la(a,b,Ga(a,c)),na=(a,b,c,e)=>S(a,b,c.has(e)),oa=(a,b,c,e)=>ma(a,b,c.get(e)),pa=(a,b,c,e)=>ka(a,b,c.has(e)),qa=(a,b,c,e)=>T(a,b,c.has(e)),U=a=>(b,c,e)=>a(b,c,e.find(O)),Ha=a=>(b,c,e)=>a(b,c,e.every(O));function Ia(a,b,c){let e;const l=()=>da(e),m=(j={})=>{l(),Q(j)&&(j={at:j});const{at:q=E(b)}=j,g=ia(ia({},a.classes),j.classes);q?e=B(q).flatMap(h=>[H(h,b,g,a.dirty,na),H(h,b,g,a.invalid,oa),H(h,b,g,a.valid,pa),H(h,b,g,a.validating,qa)]):D(b)?e=[s(a.isDirty,h=>S(b,g,h)),s(a.isError,h=>la(b,g,h)),s(a.isValidating,h=>T(b,g,h)),s(a.isSubmitting,h=>v(b,g,h,"submitting")),s(a.isSubmitted,h=>v(b,g,h,"submitted"))]:e=[I(b,g,a.dirty,na,U(S)),I(b,g,a.invalid,oa,U(ma)),I(b,g,a.valid,pa,Ha(ka)),I(b,g,a.validating,qa,U(T))]};return m(c),{update:m,destroy:l}}let V=(a,b,c)=>new Promise((e,l)=>{let m=g=>{try{q(c.next(g))}catch(h){l(h)}},j=g=>{try{q(c.throw(g))}catch(h){l(h)}},q=g=>g.done?e(g.value):Promise.resolve(g.value).then(m,j);q((c=c.apply(a,b)).next())});const ra=Symbol.for("svelte-formup"),sa=(a,b,c)=>a.update(e=>(e[c?"add":"delete"](b),e)),Ja=()=>ya(ra),Ka=({size:a})=>a===0,La=a=>!a,Ma=({schema:a,onSubmit:b=ba,onReset:c=ba,getInitialValues:e=ca,validateInitialValues:l=!1,state:m=ca(),validateOn:j="change",dirtyOn:q=j,debounce:g=100,classes:h={},autocomplete:J="off"})=>{const x=r(e()),p=r(new Map()),n=r(new Set()),y=r(new Set()),Na=w([n,y,p],([d,f,i])=>{const k=new Set();for(const o of d)!i.has(o)&&!f.has(o)&&k.add(o);return k}),Oa=w([n,y,p],([d,f,i])=>{const k=new Map();for(const[o,A]of i.entries())d.has(o)&&!f.has(o)&&k.set(o,A);return k}),z=r(!1),K=r(!1),L=r(!1),ta=w(n,Ka),ua=w(ta,La),Pa=w([ua,K,y,p],([d,f,i,k])=>d&&!f&&i.size===0&&k.size>0),M=r(0),W=(d,f)=>p.update(i=>(f?i.set(d,f):i.delete(d),i)),X=d=>W("",d),Qa=(d,f=!0)=>sa(n,d,f),Y=(d,f=!0)=>sa(y,d,f),t={schema:a,values:x,state:r(m),formError:w(p,d=>d.get("")),errors:p,dirty:n,validating:y,invalid:Oa,valid:Na,isValidating:K,isSubmitting:z,isSubmitted:L,submitCount:M,isPristine:ta,isDirty:ua,isError:Pa,submit(d){return V(this,[],function*(){if(N(z))return;L.set(!1),z.set(!0),M.update(f=>f+1),wa();try{const f=yield $();if(f){const i=yield b(f,t,d);return M.set(0),L.set(!0),i}}catch(f){X(f)}finally{z.set(!1)}})},reset(d){if(N(z))return;x.set(e(d)),wa(),n.set(new Set()),p.set(new Map()),L.set(!1),M.set(0),l&&void $(d),c(t,d)},setFormError:X,setErrorAt:W,setDirtyAt:Qa,setValidatingAt:Y,validateAt:xa,validate:(d,f)=>Ea(t,d,f),validity:(d,f)=>Ia(t,d,f),validateOn:B(j),dirtyOn:B(q),debounce:g,classes:h,autocomplete:J};za(ra,t);let Z;s(x,d=>{Z=d});const _=new Map();let u;const va=(d,f)=>({formup:t,signal:d.signal,event:f});return l&&void $(),t;function $(d){return V(this,[],function*(){u==null||u.abort(),u=new AbortController();const f=u;K.set(!0);try{const i=yield a.validate(Z,{abortEarly:!1,strict:!1,context:va(u,d)});if(f===u)return p.set(new Map()),i}catch(i){if(f===u){const k=new Map();n.update(o=>{var A;return[].concat(((A=i.inner)==null?void 0:A.length)?i.inner:i).forEach(C=>{C.path?(k.set(C.path,C),o.add(C.path)):X(C)}),o}),p.set(k)}}finally{f===u&&K.set(!1)}})}function wa(){_.forEach(d=>{clearTimeout(d.t),d.c&&d.c.abort(),d.l=0,d.c=void 0,d.t=void 0}),y.set(new Set())}function xa(d,{debounce:f=t.debounce}={}){var i;if(N(z))return;let k=_.get(d);k||_.set(d,k={l:0}),(i=k.c)==null||i.abort(),clearTimeout(k.t),k.t=setTimeout(Ra,f,d,k,f)}function Ra(d,f,i){return V(this,[],function*(){if(Date.now()-f.l<i)return xa(d,{debounce:i});const k=new AbortController();f.c=k,f.l=Date.now(),Y(d);let o;try{yield a.validateAt(d,Z,{abortEarly:!0,strict:!0,context:va(k)})}catch(A){o=A}f.c===k&&(f.c=void 0,Y(d,!1),W(d,o))})}};export{Ma as formup,Ja as getFormupContext}; //# sourceMappingURL=svelte-formup.js.map