sprae
Version:
DOM microhydration
6 lines (3 loc) • 8.99 kB
JavaScript
var O,k=(e,i,t=new Set)=>(i={get value(){return O?.deps.push(t.add(O)),e},set value(r){if(r!==e){e=r;for(let n of t)n()}},peek(){return e}},i.toJSON=i.then=i.toString=i.valueOf=()=>i.value,i),x=(e,i,t,r)=>(t=n=>{i?.call?.(),n=O,O=t;try{i=e()}finally{O=n}},r=t.deps=[],t(),n=>{for(i?.call?.();n=r.pop();)n.delete(t)}),B=(e,i=k(),t,r)=>(t={get value(){return r||(r=x(()=>i.value=e())),i.value},peek:i.peek},t.toJSON=t.then=t.toString=t.valueOf=()=>t.value,t),W=e=>e(),K=W,ee=e=>(k=e.signal,x=e.effect,B=e.computed,W=e.batch||W,K=e.untracked||K),S=Symbol("signals"),N=Symbol("change"),E="__",T=(e,i)=>{if(!e||e[S]||e[Symbol.toStringTag])return e;if(e.constructor!==Object)return Array.isArray(e)?te(e):e;let t=Object.create(i?.[S]||{}),r=k(Object.keys(e).length),n,a=new Proxy(t,{get:(u,l)=>l===N?r:l===S?t:l===E?n:l in t?t[l]?.valueOf():globalThis[l],set:(u,l,d,h)=>l===E?(n=d,1):(h=l in t,I(t,l,d),h||++r.value),deleteProperty:(u,l)=>(t[l]&&(t[l][Symbol.dispose]?.(),delete t[l],r.value--),1),ownKeys:()=>(r.value,Reflect.ownKeys(t)),has:u=>!0}),s=Object.getOwnPropertyDescriptors(e);for(let u in e)s[u]?.get?(t[u]=B(s[u].get.bind(a)))._set=s[u].set?.bind(a):(t[u]=null,I(t,u,e[u]));return a},te=e=>{let i,t=k(e.length),r=Array(e.length).fill(),n=new Proxy(r,{get(a,s){return typeof s=="symbol"?s===N?t:s===S?r:r[s]:s==="length"?re.includes(i)?t.peek():t.value:(i=s,(r[s]??(r[s]=k(T(e[s])))).valueOf())},set(a,s,u){if(s==="length"){for(let l=u;l<r.length;l++)delete n[l];t.value=r.length=u}else I(r,s,u),s>=t.peek()&&(t.value=r.length=+s+1);return 1},deleteProperty:(a,s)=>(r[s]?.[Symbol.dispose]?.(),delete r[s],1)});return n},re=["push","pop","shift","unshift","splice"],I=(e,i,t)=>{let r=e[i],n;i[0]==="_"?e[i]=t:r?t===(n=r.peek())||(r._set?r._set(t):Array.isArray(t)&&Array.isArray(n)?n[N]?W(()=>{for(let a=0;a<t.length;a++)n[a]=t[a];n.length=t.length}):r.value=t:r.value=T(t)):e[i]=r=t?.peek?t:k(T(t))},H=(e,i=$(`${e}=${E}`))=>(t,r)=>(t[E]=r,i(t)),X=T,Z=Symbol.dispose||(Symbol.dispose=Symbol("dispose")),m=Symbol("state"),M=Symbol("on"),j=Symbol("off"),R={},p=(e,i,t=$)=>R[e]=(r,n,a,s,u,l)=>(u=i(r,a,n,s),l=t(n,":"+s),()=>u(l(a))),z=(e=document.body,i)=>{if(e[m])return Object.assign(e[m],i);let t=T(i||{}),r=[],n=[],a=(s,u=s.attributes)=>{if(u)for(let l=0;l<u.length;){let{name:d,value:h}=u[l],o,c;if(d.startsWith(F)){s.removeAttribute(d);for(c of d.slice(F.length).split(":"))if(o=(R[c]||R.default)(s,h,t,c),n.push(o),r.push(x(o)),s[m]===null)return}else l++}for(let l of s.childNodes)l.nodeType==1&&a(l)};return a(e),m in e||(e[m]=t,e[j]=()=>(r.map(s=>s()),r=[]),e[M]=()=>r=n.map(s=>x(s)),e[Z]=()=>(e[j](),e[j]=e[M]=e[Z]=e[m]=null)),t};z.use=e=>(e.signal&&ee(e),e.compile&&(Q=e.compile),e.prefix&&(F=e.prefix));var $=(e,i,t)=>{if(t=G[e=e.trim()])return t;try{t=Q(e)}catch(r){q(r,i,e)}return G[e]=r=>{try{return t(r)}catch(n){q(n,i,e)}}},G={},q=(e,i="",t="")=>{throw Object.assign(e,{message:`\u2234 ${e.message}
${i}${t?`="${t}"
`:""}`,expr:t})},Q,F=":",L=e=>{if(!e.nodeType)return e;let i=e.content.cloneNode(!0),t=[...e.attributes],r=document.createTextNode(""),n=(i.append(r),[...i.childNodes]);return{childNodes:n,content:i,remove:()=>i.append(...n),replaceWith(a){a!==r&&(r.before(a),i.append(...n))},attributes:t,removeAttribute(a){t.splice(t.findIndex(s=>s.name===a),1)}}},_=z,J=Symbol("if");p("if",(e,i)=>{let t=document.createTextNode(""),r=e.nextElementSibling,n,a,s;return e.replaceWith(t),a=e.content?L(e):e,a[m]=null,r?.hasAttribute(":else")?(r.removeAttribute(":else"),r.hasAttribute(":if")||(r.remove(),s=r.content?L(r):r,s[m]=null)):r=null,(u,l=e[J]?null:u?a:s)=>{r&&(r[J]=e[J]||l==a),n!=l&&(n&&(n.remove(),n[j]?.()),(n=l)&&(t.before(n.content||n),n[m]===null?(delete n[m],_(n,i)):n[M]()))}}),p("each",(e,i,t)=>{let[r,n="$"]=t.split(/\bin\b/)[0].trim().split(/\s*,\s*/),a=document.createTextNode(""),s,u,l,d=0,h=()=>{var o,c;let y=0,b=l,g=b.length;if(s&&!s[N]){for(let v of s[S]||[])v[Symbol.dispose]();s=null,d=0}if(g<d)s.length=g;else{if(!s)s=b;else for(;y<d;)s[y]=b[y++];for(;y<g;y++){s[y]=b[y];let v=y,C=X({[r]:s[S]?.[v]||s[v],[n]:u?u[v]:v},i),A=e.content?L(e):e.cloneNode(!0);a.before(A.content||A),_(A,C),((c=s[o=S]||(s[o]=[]))[y]||(c[y]={}))[Symbol.dispose]=()=>{A[Symbol.dispose]?.(),A.remove()}}}d=g};return e.replaceWith(a),e[m]=null,o=>{u=null,typeof o=="number"?l=Array.from({length:o},(y,b)=>b+1):o?.constructor===Object?(u=Object.keys(o),l=Object.values(o)):l=o||[];let c=0;return x(()=>{l[N]?.value,c++||(h(),queueMicrotask(()=>(c>1&&h(),c=0)))})}},e=>$(e.split(/\bin\b/)[1])),p("ref",(e,i,t)=>typeof $(t)(i)=="function"?r=>r.call(null,e):(H(t)(i,e),r=>r)),p("with",(e,i,t)=>(t=null,r=>t?_(e,r):K(()=>_(e,t=X(r,i))))),p("text",e=>(e.content&&e.replaceWith(e=L(e).childNodes[0]),i=>e.textContent=i??"")),p("class",(e,i)=>(i=new Set,t=>{let r=new Set;t&&(typeof t=="string"?t.split(" ").map(n=>r.add(n)):Array.isArray(t)?t.map(n=>n&&r.add(n)):Object.entries(t).map(([n,a])=>a&&r.add(n)));for(let n of i)r.has(n)?r.delete(n):e.classList.remove(n);for(let n of i=r)e.classList.add(n)})),p("style",(e,i)=>(i=e.getAttribute("style"),t=>{if(typeof t=="string")e.setAttribute("style",i+(i.endsWith(";")?"":"; ")+t);else{i&&e.setAttribute("style",i);for(let r in t)r[0]=="-"?e.style.setProperty(r,t[r]):e.style[r]=t[r]}})),p("default",(e,i,t,r)=>{if(!r.startsWith("on"))return r?o=>P(e,r,o):o=>{for(let c in o)P(e,U(c),o[c])};let n=r.split("..").map(o=>{let c={evt:"",target:e,test:()=>!0};return c.evt=(o.startsWith("on")?o.slice(2):o).replace(/\.(\w+)?-?([-\w]+)?/g,(y,b,g="")=>(c.test=ie[b]?.(c,...g.split("-"))||c.test,"")),c}),a=(o,{evt:c,target:y,test:b,defer:g,stop:v,prevent:C,immediate:A,...V},D)=>(g&&(o=g(o)),D=w=>{try{b(w)&&(v&&(A?w.stopImmediatePropagation():w.stopPropagation()),C&&w.preventDefault(),o?.call(i,w))}catch(Y){q(Y,`:on${c}`,o)}},y.addEventListener(c,D,V),()=>y.removeEventListener(c,D,V));if(n.length==1)return o=>a(o,n[0]);let s,u,l,d=0,h=o=>{l=a(c=>(l(),u=o?.(c),(d=++d%n.length)?h(u):s&&h(s)),n[d])};return o=>(s=o,!l&&h(s),()=>s=null)});var ie={prevent(e){e.prevent=!0},stop(e){e.stop=!0},immediate(e){e.immediate=!0},once(e){e.once=!0},passive(e){e.passive=!0},capture(e){e.capture=!0},window(e){e.target=window},document(e){e.target=document},parent(e){e.target=e.target.parentNode},throttle(e,i=108){e.defer=t=>ne(t,i)},debounce(e,i=108){e.defer=t=>se(t,i)},outside:e=>i=>{let t=e.target;return!(t.contains(i.target)||i.target.isConnected===!1||t.offsetWidth<1&&t.offsetHeight<1)},self:e=>i=>i.target===e.target,ctrl:(e,...i)=>t=>f.ctrl(t)&&i.every(r=>f[r]?f[r](t):t.key===r),shift:(e,...i)=>t=>f.shift(t)&&i.every(r=>f[r]?f[r](t):t.key===r),alt:(e,...i)=>t=>f.alt(t)&&i.every(r=>f[r]?f[r](t):t.key===r),meta:(e,...i)=>t=>f.meta(t)&&i.every(r=>f[r]?f[r](t):t.key===r),arrow:()=>f.arrow,enter:()=>f.enter,esc:()=>f.esc,tab:()=>f.tab,space:()=>f.space,delete:()=>f.delete,digit:()=>f.digit,letter:()=>f.letter,char:()=>f.char},f={ctrl:e=>e.ctrlKey||e.key==="Control"||e.key==="Ctrl",shift:e=>e.shiftKey||e.key==="Shift",alt:e=>e.altKey||e.key==="Alt",meta:e=>e.metaKey||e.key==="Meta"||e.key==="Command",arrow:e=>e.key.startsWith("Arrow"),enter:e=>e.key==="Enter",esc:e=>e.key.startsWith("Esc"),tab:e=>e.key==="Tab",space:e=>e.key==="\xA0"||e.key==="Space"||e.key===" ",delete:e=>e.key==="Delete"||e.key==="Backspace",digit:e=>/^\d$/.test(e.key),letter:e=>/^\p{L}$/gu.test(e.key),char:e=>/^\S$/.test(e.key)},ne=(e,i)=>{let t,r,n=a=>{t=!0,setTimeout(()=>{if(t=!1,r)return r=!1,n(a),e(a)},i)};return a=>t?r=!0:(n(a),e(a))},se=(e,i)=>{let t;return r=>{clearTimeout(t),t=setTimeout(()=>{t=null,e(r)},i)}},P=(e,i,t)=>{t==null||t===!1?e.removeAttribute(i):e.setAttribute(i,t===!0?"":typeof t=="number"||typeof t=="string"?t:"")},U=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(i,t)=>(t?"-":"")+i.toLowerCase());p("value",(e,i,t)=>{const r=e.type==="text"||e.type===""?n=>e.setAttribute("value",e.value=n??""):e.tagName==="TEXTAREA"||e.type==="text"||e.type===""?(n,a,s)=>(a=e.selectionStart,s=e.selectionEnd,e.setAttribute("value",e.value=n??""),a&&e.setSelectionRange(a,s)):e.type==="checkbox"?n=>(e.checked=n,P(e,"checked",n)):e.type==="select-one"?n=>{for(let a of e.options)a.value==n?a.setAttribute("selected",""):a.removeAttribute("selected");e.value=n}:e.type==="select-multiple"?n=>{for(let a of e.options)a.removeAttribute("selected");for(let a of n)e.querySelector(`[value="${a}"]`).setAttribute("selected","")}:n=>e.value=n;try{const n=H(t),a=e.type==="checkbox"?()=>n(i,e.checked):e.type==="select-multiple"?()=>n(i,[...e.selectedOptions].map(s=>s.value)):()=>n(i,e.selectedIndex<0?null:e.value);e.oninput=e.onchange=a,e.type?.startsWith("select")&&(new MutationObserver(a).observe(e,{childList:!0,subtree:!0,attributes:!0}),_(e,i)),$(t)(i)??a()}catch{}return r}),p("fx",e=>i=>i),p("aria",e=>i=>{for(let t in i)P(e,"aria-"+U(t),i[t]==null?null:i[t]+"")}),p("data",e=>i=>{for(let t in i)e.dataset[t]=i[t]}),_.use({compile:e=>_.constructor(`with (arguments[0]) { return ${e} };`)});var ae=_;export{ae as default};