sprae 12.2.0 → 12.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/sprae.umd.js CHANGED
@@ -1,9 +1,828 @@
1
1
  (function (g, f) {if ("object" == typeof exports && "object" == typeof module) {module.exports = f();} else if ("function" == typeof define && define.amd) {define("sprae", [], f);} else if ("object" == typeof exports) {exports["sprae"] = f();} else {g["sprae"] = f();}}(typeof self !== 'undefined' ? self : typeof globalThis !== 'undefined' ? globalThis : this, () => {var exports = {};var module = { exports };
2
- var oe=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var tt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var d=(e,r)=>()=>(e&&(r=e(e=0)),r);var ot=(e,r)=>{for(var t in r)oe(e,t,{get:r[t],enumerable:!0})},st=(e,r,t,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of tt(r))!rt.call(e,o)&&o!==t&&oe(e,o,{get:()=>r[o],enumerable:!(s=et(r,o))||s.enumerable});return e};var it=e=>st(oe({},"__esModule",{value:!0}),e);var be,he=d(()=>{be={name:"sprae",description:"DOM microhydration",version:"12.2.0",main:"./sprae.js",module:"./sprae.js","umd:main":"dist/sprae.umd.js",unpkg:"dist/sprae.umd.js",types:"dist/sprae.d.ts",type:"module",files:["core.js","sprae.js","store.js","signal.js","micro.js","directive","dist"],devDependencies:{"@preact/signals":"^2.0.4","@preact/signals-core":"^1.8.0","@webreflection/signal":"^2.1.2","es-module-shims":"^1.10.0",esbuild:"^0.23.0","esbuild-plugin-umd-wrapper":"^2.0.3",hyperf:"^1.7.0",jsdom:"^27.0.0",requestidlecallback:"^0.3.0","signal-polyfill":"^0.1.1",subscript:"^9.1.0",tst:"^7.2.0",ulive:"^1.0.7",usignal:"^0.9.0","wait-please":"^3.1.0"},scripts:{test:"node -r ./test/register.cjs test/test.js",build:"node .esbuild.js"},repository:{type:"git",url:"git+https://github.com/dy/sprae.git"},keywords:["hydration","progressive","progressive enhancement","signals","directives","preact-signals","reactive","template-parts","petit-vue","alpinejs","templating"],author:"Dmitry Iv <df.creative@gmail.com>",license:"MIT",bugs:{url:"https://github.com/dy/sprae/issues"},homepage:"https://github.com/dy/sprae#readme"}});var Z,l,G,F,se,q,k,J,ne,Q,B,L,H,ie,ae,at,U,ue,Se,O,xe,z,D,y,Ae,A,ce,M,je,f,g=d(()=>{Y();he();Y();Z=Symbol.dispose||(Symbol.dispose=Symbol("dispose")),l=Symbol("state"),G=Symbol("on"),F=Symbol("off"),se=Symbol("add"),q=":",Q=e=>e(),B=Q,L={},H={},ie=null,ae=(e=document.body,r)=>{if(e[l])return Object.assign(e[l],r);r=v(r||{});let t=[],s=[],o,i=()=>!s&&(s=t.map(u=>u())),n=()=>(s?.map(u=>u()),s=null);e[G]=i,e[F]=n,e[Z]||(e[Z]=()=>(e[F](),e[F]=e[G]=e[Z]=e[l]=e[se]=null));let a=(u,p=u.attributes)=>{if(p)for(let m=0;m<p.length;){let{name:c,value:h}=p[m];if(c.startsWith(q)){if(u.removeAttribute(c),(o=at(u,c,h,r))&&(t.push(o),s.push(o())),l in u)return}else m++}for(let m of[...u.childNodes])m.nodeType==1&&a(m)};return e[se]=a,a(e),e[l]===void 0&&(e[l]=r),r};ae.version=be.version;at=(e,r,t,s)=>{let o,i,n=r.slice(q.length).split("..").map((a,u,{length:p})=>a.split(q).reduce((m,c)=>{let[h,...b]=c.split("."),C=O(t,L[ie=h]?.parse);if(h.startsWith("on")){let R=h.slice(2),V=xe(z(p==1?E=>C(s,re=>y(re,E)):E=>(o=(u?o:re=>y(C(s),re))(E),i(),i=n[(u+1)%p]()),{target:e}),b);return E=>(E=m?.(),V.target.addEventListener(R,V,V),()=>(E?.(),V.target.removeEventListener(R,V)))}let N,x,$,S;b.length?($=k(-1),S=-1,N=xe(z(M(()=>{++$.value||(x=J(()=>W&&($.value==S?N():(S=$.value,C(s,W)))))}),{target:e}),b)):N=z(()=>x=J(()=>C(s,W)),{target:e});let W=(L[h]||L["*"])(N.target,s,t,h);if(W)return e[l]&&(s=e[l]),R=>(R=m?.(),N(),()=>(R?.(),x?.(),$&&($.value=-1,S=x=null)))},null));return()=>i=n[0]?.()},U=e=>(e.compile&&(Se=e.compile),e.prefix&&(q=e.prefix),e.signal&&(k=e.signal),e.effect&&(J=e.effect),e.computed&&(ne=e.computed),e.batch&&(Q=e.batch),e.untracked&&(B=e.untracked)),ue=(e=document.body,r)=>{let t=v(r);return ae(e,t),new MutationObserver(o=>{for(let i of o)for(let n of i.addedNodes)if(n.nodeType===1&&n[l]===void 0){for(let a of n.attributes)if(a.name.startsWith(q)){e[se](n);break}}}).observe(e,{childList:!0,subtree:!0}),t},O=(e,r,t)=>{if(t=O.cache[e])return t;let s=e.trim()||"undefined";r&&(s=r(s)),/^(if|let|const)\b/.test(s)||/;(?![^{]*})/.test(s)||(s=`return ${s}`),/\bawait\s/.test(s)&&(s=`return (async()=>{ ${s} })()`);try{t=Se(s),Object.defineProperty(t,"name",{value:`\u2234 ${e}`})}catch(o){console.error(`\u2234 ${o}
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __esm = (fn, res) => function __init() {
7
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
8
+ };
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
3
22
 
4
- ${q+ie}="${e}"`)}return O.cache[e]=(o,i,n)=>{try{let a=t?.(o);return i?(a?.then?a.then(u=>n=i(u)):n=i(a),()=>y(n)):a}catch(a){console.error(`\u2234 ${a}
23
+ // package.json
24
+ var package_default;
25
+ var init_package = __esm({
26
+ "package.json"() {
27
+ package_default = {
28
+ name: "sprae",
29
+ description: "DOM microhydration",
30
+ version: "12.2.0",
31
+ main: "./sprae.js",
32
+ module: "./sprae.js",
33
+ "umd:main": "dist/sprae.umd.js",
34
+ unpkg: "dist/sprae.umd.js",
35
+ types: "dist/sprae.d.ts",
36
+ type: "module",
37
+ files: [
38
+ "core.js",
39
+ "sprae.js",
40
+ "store.js",
41
+ "signal.js",
42
+ "micro.js",
43
+ "directive",
44
+ "dist"
45
+ ],
46
+ devDependencies: {
47
+ "@preact/signals": "^2.0.4",
48
+ "@preact/signals-core": "^1.8.0",
49
+ "@webreflection/signal": "^2.1.2",
50
+ "es-module-shims": "^1.10.0",
51
+ esbuild: "^0.23.0",
52
+ "esbuild-plugin-umd-wrapper": "^2.0.3",
53
+ hyperf: "^1.7.0",
54
+ jsdom: "^27.0.0",
55
+ requestidlecallback: "^0.3.0",
56
+ "signal-polyfill": "^0.1.1",
57
+ subscript: "^9.1.0",
58
+ tst: "^7.2.0",
59
+ ulive: "^1.0.7",
60
+ usignal: "^0.9.0",
61
+ "wait-please": "^3.1.0"
62
+ },
63
+ scripts: {
64
+ test: "node -r ./test/register.cjs test/test.js",
65
+ build: "node .esbuild.js"
66
+ },
67
+ repository: {
68
+ type: "git",
69
+ url: "git+https://github.com/dy/sprae.git"
70
+ },
71
+ keywords: [
72
+ "hydration",
73
+ "progressive",
74
+ "progressive enhancement",
75
+ "signals",
76
+ "directives",
77
+ "preact-signals",
78
+ "reactive",
79
+ "template-parts",
80
+ "petit-vue",
81
+ "alpinejs",
82
+ "templating"
83
+ ],
84
+ author: "Dmitry Iv <df.creative@gmail.com>",
85
+ license: "MIT",
86
+ bugs: {
87
+ url: "https://github.com/dy/sprae/issues"
88
+ },
89
+ homepage: "https://github.com/dy/sprae#readme"
90
+ };
91
+ }
92
+ });
5
93
 
6
- ${q+ie}="${e}"`)}}};O.cache={};xe=(e,r)=>{for(;r.length;){let[t,...s]=r.pop().split("-");e=z(H[t]?.(e,...s)??e,e)}return e},z=(e,r)=>{if(e!=r)for(let t in r)e[t]??(e[t]=r[t]);return e},D=e=>{if(!e.nodeType)return e;let r=e.content.cloneNode(!0),t=[...e.attributes],s=document.createTextNode(""),o=(r.append(s),[...r.childNodes]);return{childNodes:o,content:r,remove:()=>r.append(...o),replaceWith(i){i!==s&&(s.before(i),r.append(...o))},attributes:t,removeAttribute(i){t.splice(t.findIndex(n=>n.name===i),1)}}},y=(e,r)=>typeof e=="function"?e(r):e,Ae=e=>e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(r,t)=>(t?"-":"")+r.toLowerCase()),A=(e,r,t)=>t==null||t===!1?e.removeAttribute(r):e.setAttribute(r,t===!0?"":t),ce=(e,r=[])=>e?typeof e=="string"?e:(Array.isArray(e)?e.map(ce):Object.entries(e).reduce((t,[s,o])=>o?[...t,s]:t,[])).join(" "):"",M=(e,r=queueMicrotask)=>{let t=0,s=o=>{t++||(e(o),r((i=t>1)=>(t=0,i&&s(o))))};return s},je=(e,r=queueMicrotask,t=0)=>(s,o=++t)=>r(()=>o==t&&e(s)),f=ae});var j,w,pe,le,P,ut,_,Oe,v,Y=d(()=>{g();j=Symbol("signals"),w=Symbol("change"),pe=Symbol("set"),le=!0,P=(e,r)=>{if(!e||e[Symbol.toStringTag]||e[j])return e;if(e.constructor!==Object)return Array.isArray(e)?ut(e):e;let t=Object.keys(e).length,s={},o=new Proxy(Object.assign(s,{[w]:k(t),[j]:s}),{get:(n,a)=>a in s?s[a]?s[a].valueOf():s[a]:r?r[a]:globalThis[a],set:(n,a,u,p)=>a in s?(Oe(s,a,u),1):(le=!1,r&&a in r?r[a]=u:(_(s,a,u),s[w].value=++t),le=!0,1),deleteProperty:(n,a)=>(a in s&&(a[0]!="_"&&s[a]?.[Symbol.dispose]?.(),delete s[a],s[w].value=--t),1),ownKeys:()=>(s[w].value,Reflect.ownKeys(s)),has:(n,a)=>a in s?!0:r?a in r:le}),i=Object.getOwnPropertyDescriptors(e);for(let n in e)i[n]?.get?(s[n]=ne(i[n].get.bind(o)))[pe]=i[n].set?.bind(o):_(s,n,e[n]);return o},ut=(e,r=globalThis)=>{let t=Array(e.length).fill(null),s=!1,o=a=>function(){return s=!0,a.apply(this,arguments)},i=k(e.length),n=new Proxy(Object.assign(t,{[w]:i,[j]:t,push:o(t.push),pop:o(t.pop),shift:o(t.shift),unshift:o(t.unshift),splice:o(t.splice)}),{get(a,u){return u==="length"?s?(s=!1,t.length):i.value:typeof u=="symbol"||isNaN(u)?t[u]?.valueOf()??r[u]:(t[u]??(t[u]=k(P(e[u])))).valueOf()},set(a,u,p){if(u==="length"){for(let m=p;m<t.length;m++)delete n[m];i.value=t.length=p}else u>=t.length?(_(t,u,p),n.length=+u+1):t[u]?Oe(t,u,p):_(t,u,p);return 1},deleteProperty:(a,u)=>(t[u]?.[Symbol.dispose]?.(),delete t[u],1)});return n},_=(e,r,t)=>e[r]=r[0]=="_"||t?.peek?t:k(P(t)),Oe=(e,r,t,s,o)=>r[0]==="_"?e[r]=t:t!==(o=(s=e[r]).peek())&&(s[pe]?s[pe](t):Array.isArray(t)&&Array.isArray(o)?w in o?B(()=>Q(()=>{for(let i=0;i<t.length;i++)o[i]=t[i];o.length=t.length})):s.value=t:s.value=P(t)),v=P});var T,ke,I,ee,te,fe,de,me,we=d(()=>{ke=0,ee=(e,r,t=new Set,s=()=>r.value)=>r={get value(){return T?.deps.push(t.add(T)),e},set value(o){if(o!==e){e=o;for(let i of t)I?I.add(i):i()}},peek(){return e},toJSON:s,then:s,toString:s,valueOf:s},te=(e,r,t,s,o)=>(t=i=>{if(o=r,r=null,o?.call?.(),i=T,T=t,ke++>10)throw"Cycle detected";try{r=e()}finally{T=i,ke--}},s=t.deps=[],t(),i=>{for(r?.call?.();i=s.pop();)i.delete(t)}),fe=(e,r=ee(),t,s,o=()=>t.value)=>t={get value(){return s||(s=te(()=>r.value=e())),r.value},peek:r.peek,toJSON:o,then:o,toString:o,valueOf:o},de=(e,r=!I)=>{I??(I=new Set);try{e()}finally{if(r){for(let t of I)t();I=null}}},me=(e,r,t)=>(r=T,T=null,t=e(),T=r,t)});var Ne,$e=d(()=>{g();Ne=(e,r,t,s,o)=>{var i;return e._holder?f(s=e,r):(e[i=l]??(e[i]=null),s=e.content?D(e):e,e.replaceWith(t=document.createTextNode("")),s._holder=t._holder=t,t._clauses=[s._clause=[s,!1]],t.update=M(()=>{let n=t._clauses.find(([,a])=>a);n!=o&&(o?.[0].remove(),o?.[0][F]?.(),(o=n)&&(t.before(o[0].content||o[0]),o[0][l]?o[0][G]?.():(delete o[0][l],f(o[0],r))))})),n=>{s._clause[1]=n,s._holder.update()}}});var De,Te=d(()=>{g();De=(e,r,t,s,o=e)=>{for(t=e.content?D(e):e;o&&!(t._holder=o._holder);)o=o.previousSibling;return e.remove(),e[l]=null,t._holder._clauses.push(t._clause=[t,!0]),t._holder.update}});var Ce,qe=d(()=>{g();Ce=e=>(e.content&&e.replaceWith(e=D(e).childNodes[0]),r=>(r=y(r,e.textContent),e.textContent=r??""))});var Me,Pe=d(()=>{g();Me=(e,r,t)=>(r=new Set,s=>{t=new Set,s&&ce(y(s,e.className)).split(" ").map(o=>o&&t.add(o));for(let o of r)t.has(o)?t.delete(o):e.classList.remove(o);for(let o of r=t)e.classList.add(o)})});var We,Ee=d(()=>{g();We=(e,r)=>(r=e.getAttribute("style"),t=>{if(t=y(t,e.style),typeof t=="string")A(e,"style",r+"; "+t);else{r&&A(e,"style",r);for(let s in t)s[0]=="-"?e.style.setProperty(s,t[s]):s[0]>"A"&&(e.style[s]=t[s])}})});var Le,ve=d(()=>{g();Le=()=>y});var ct,Ie,Ke=d(()=>{g();ct=(e,r=O(`${e}=__`))=>(t,s)=>{t.__=s,r(t),delete t.__},Ie=(e,r,t,s)=>{try{let o=ct(t),i=e.type==="checkbox"?()=>o(r,e.checked):e.type==="select-multiple"?()=>o(r,[...e.selectedOptions].map(n=>n.value)):()=>o(r,e.selectedIndex<0?null:e.value);e.oninput=e.onchange=i,e.type?.startsWith("select")&&(new MutationObserver(i).observe(e,{childList:!0,subtree:!0,attributes:!0}),f(e,r)),O(t)(r)??i()}catch{}return e.type==="text"||e.type===""?o=>e.setAttribute("value",e.value=o??""):e.tagName==="TEXTAREA"||e.type==="text"||e.type===""?(o,i,n)=>(i=e.selectionStart,n=e.selectionEnd,e.setAttribute("value",e.value=o??""),i&&e.setSelectionRange(i,n)):e.type==="checkbox"?o=>(e.checked=o,A(e,"checked",o)):e.type==="radio"?o=>e.value===o&&(e.checked=o,A(e,"checked",o)):e.type==="select-one"?o=>{for(let i of e.options)i.value==o?i.setAttribute("selected",""):i.removeAttribute("selected");e.value=o}:e.type==="select-multiple"?o=>{for(let i of e.options)i.removeAttribute("selected");for(let i of o)e.querySelector(`[value="${i}"]`).setAttribute("selected","")}:o=>e.value=o}});var Re,Ve=d(()=>{g();Re=(e,r,t,s,o,i)=>{if(typeof O(t)(r)=="function")return n=>n(e);Object.defineProperty(r,t,{value:e,configurable:!0})}});var Fe,Je=d(()=>{g();Fe=(e,r)=>{let t=e[l]=P({},r),s=!1;return o=>{if(o=y(o,t),o!==t)for(let i in o){let n=typeof o[i]=="function"?o[i].bind(t):o[i];i in t[j]?t[i]=n:t[j][i]=i[0]=="_"||n?.peek?n:k(P(n))}return!s&&(s=!0,delete e[l],B(()=>f(e,t)))}}});var Be,He,Xe=d(()=>{g();Be=(e,r,t)=>{let[s,o="$"]=t.split(/\bin\b/)[0].trim().replace(/\(|\)/g,"").split(/\s*,\s*/),i=document.createTextNode(""),n,a,u,p=0,m=M(()=>{var C,N;let c=0,h=u,b=h.length;if(n&&!n[w]){for(let x of n[j]||[])x[Symbol.dispose]();n=null,p=0}if(b<p)n.length=b;else{if(!n)n=h;else for(;c<p;)n[c]=h[c++];for(;c<b;c++){n[c]=h[c];let x=c,$=Object.create(r,{[s]:{get:()=>n[x]},[o]:{value:a?a[x]:x}}),S=e.content?D(e):e.cloneNode(!0);i.before(S.content||S),f(S,$);let W=((N=n[C=j]||(n[C]=[]))[c]||(N[c]={}))[Symbol.dispose];n[j][c][Symbol.dispose]=()=>{W?.(),S[Symbol.dispose]?.(),S.remove()}}}p=b});return e.replaceWith(i),e[l]=null,c=>(a=null,typeof c=="number"?u=Array.from({length:c},(h,b)=>b+1):c?.constructor===Object?(a=Object.keys(c),u=Object.values(c)):u=c||[],J(()=>{u[w]?.value,m()}))};Be.parse=e=>e.split(/\bin\b/)[1].trim();He=Be});var Ze,ze=d(()=>{g();Ze=(e,r,t,s)=>o=>A(e,s,y(o,e.getAttribute(s)))});var Ge,Qe=d(()=>{g();Ge=e=>r=>{for(let t in r)A(e,Ae(t),r[t])}});var Ue={};ot(Ue,{batch:()=>de,computed:()=>fe,default:()=>lt,effect:()=>te,signal:()=>ee,sprae:()=>f,start:()=>ue,store:()=>v,untracked:()=>me,use:()=>U});var ye,lt,Ye=d(()=>{Y();we();g();$e();Te();qe();Pe();Ee();ve();Ke();Ve();Je();Xe();ze();Qe();Object.assign(L,{"*":Ze,"":Ge,class:Me,text:Ce,style:We,fx:Le,value:Ie,ref:Re,scope:Fe,if:Ne,else:De,each:He});Object.assign(H,{debounce:(e,r=250,t=r==="tick"?queueMicrotask:r==="raf"?requestAnimationFrame:r==="idle"?requestIdleCallback:o=>setTimeout(o,r),s=0)=>je(e,t),throttle:(e,r=250,t=r==="tick"?queueMicrotask:r==="raf"?requestAnimationFrame:s=>setTimeout(s,r))=>M(e,t),once:(e,r,t)=>Object.assign(s=>!r&&(r=1,e(s)),{once:!0}),prevent:e=>r=>(r?.preventDefault(),e(r)),stop:e=>r=>(r?.stopPropagation(),e(r)),immediate:e=>r=>(r?.stopImmediatePropagation(),e(r)),passive:e=>(e.passive=!0,e),capture:e=>(e.capture=!0,e),window:e=>(e.target=e.target.ownerDocument.defaultView,e),document:e=>(e.target=e.target.ownerDocument,e),root:e=>(e.target=e.target.ownerDocument.documentElement,e),body:e=>(e.target=e.target.ownerDocument.body,e),parent:e=>(e.target=e.target.parentNode,e),self:e=>r=>r.target===e.target&&e(r),outside:e=>(r,t)=>(t=e.target,!t.contains(r.target)&&r.target.isConnected&&(t.offsetWidth||t.offsetHeight))});ye={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)};for(let e in ye)H[e]=(r,...t)=>s=>ye[e](s)&&t.every(o=>ye[o]?.(s)??s.key===o)&&r(s);U({compile:e=>f.constructor(`with (arguments[0]) { ${e} }`),signal:ee,effect:te,computed:fe,batch:de,untracked:me});f.use=U;f.store=v;f.directive=L;f.modifier=H;f.start=ue;lt=f});var ge=(Ye(),it(Ue)).default;module.exports=ge;var K=document.currentScript,_e=K.getAttribute("prefix")??K.dataset.prefix??K.dataset.spraePrefix,X=K.getAttribute("start")??K.dataset.start??K.dataset.spraeStart;_e&&ge.use({prefix:_e});X!=null&&X!=="false"&&(X&&X!=="true"?document.querySelectorAll(X):[document.body]).forEach(e=>ge.start(e));
94
+ // core.js
95
+ var _dispose, _state, _on, _off, _add, prefix, signal, effect, computed, batch, untracked, directive, modifier, currentDir, sprae, initDirective, use, start, compile, parse, applyMods, sx, frag, call, dashcase, attr, clsx, throttle, debounce, core_default;
96
+ var init_core = __esm({
97
+ "core.js"() {
98
+ init_store();
99
+ init_package();
100
+ init_store();
101
+ _dispose = Symbol.dispose || (Symbol.dispose = Symbol("dispose"));
102
+ _state = Symbol("state");
103
+ _on = Symbol("on");
104
+ _off = Symbol("off");
105
+ _add = Symbol("add");
106
+ prefix = ":";
107
+ batch = (fn) => fn();
108
+ untracked = batch;
109
+ directive = {};
110
+ modifier = {};
111
+ currentDir = null;
112
+ sprae = (el = document.body, state) => {
113
+ if (el[_state]) return Object.assign(el[_state], state);
114
+ state = store_default(state || {});
115
+ let fx = [], offs = [], fn, on = () => !offs && (offs = fx.map((fn2) => fn2())), off = () => (offs?.map((off2) => off2()), offs = null);
116
+ el[_on] = on;
117
+ el[_off] = off;
118
+ el[_dispose] || (el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_state] = el[_add] = null));
119
+ const add = (el2, _attrs = el2.attributes) => {
120
+ if (_attrs) for (let i = 0; i < _attrs.length; ) {
121
+ let { name, value } = _attrs[i];
122
+ if (name.startsWith(prefix)) {
123
+ el2.removeAttribute(name);
124
+ if (fn = initDirective(el2, name, value, state)) fx.push(fn), offs.push(fn());
125
+ if (_state in el2) return;
126
+ } else i++;
127
+ }
128
+ for (let child of [...el2.childNodes]) child.nodeType == 1 && add(child);
129
+ };
130
+ el[_add] = add;
131
+ add(el);
132
+ if (el[_state] === void 0) el[_state] = state;
133
+ return state;
134
+ };
135
+ sprae.version = package_default.version;
136
+ initDirective = (el, dirName, expr, state) => {
137
+ let cur2, off;
138
+ let steps = dirName.slice(prefix.length).split("..").map((step, i, { length }) => (
139
+ // multiple attributes like :id:for=""
140
+ step.split(prefix).reduce((prev, str) => {
141
+ let [name, ...mods] = str.split(".");
142
+ let evaluate = parse(expr, directive[currentDir = name]?.parse);
143
+ if (name.startsWith("on")) {
144
+ let type = name.slice(2), fn2 = applyMods(
145
+ sx(
146
+ // single event vs chain
147
+ length == 1 ? (e) => evaluate(state, (fn3) => call(fn3, e)) : (e) => (cur2 = (!i ? (e2) => call(evaluate(state), e2) : cur2)(e), off(), off = steps[(i + 1) % length]()),
148
+ { target: el }
149
+ ),
150
+ mods
151
+ );
152
+ return (_poff) => (_poff = prev?.(), fn2.target.addEventListener(type, fn2, fn2), () => (_poff?.(), fn2.target.removeEventListener(type, fn2)));
153
+ }
154
+ let fn, dispose, change, count;
155
+ if (mods.length) {
156
+ change = signal(-1), // signal authorized to trigger effect: 0 = init; >0 = trigger
157
+ count = -1;
158
+ fn = applyMods(sx(throttle(() => {
159
+ if (++change.value) return;
160
+ dispose = effect(() => update && (change.value == count ? fn() : (
161
+ // plan update: separate tick (via throttle) makes sure planner effect call is finished before eval call
162
+ (count = change.value, evaluate(state, update))
163
+ )));
164
+ }), { target: el }), mods);
165
+ } else {
166
+ fn = sx(() => dispose = effect(() => evaluate(state, update)), { target: el });
167
+ }
168
+ let update = (directive[name] || directive["*"])(fn.target, state, expr, name);
169
+ if (!update) return;
170
+ if (el[_state]) state = el[_state];
171
+ return (_poff) => (_poff = prev?.(), // console.log('ON', name),
172
+ fn(), () => (
173
+ // console.log('OFF', name, el),
174
+ (_poff?.(), dispose?.(), change && (change.value = -1, count = dispose = null))
175
+ ));
176
+ }, null)
177
+ ));
178
+ return () => off = steps[0]?.();
179
+ };
180
+ use = (s) => (s.compile && (compile = s.compile), s.prefix && (prefix = s.prefix), s.signal && (signal = s.signal), s.effect && (effect = s.effect), s.computed && (computed = s.computed), s.batch && (batch = s.batch), s.untracked && (untracked = s.untracked));
181
+ start = (root = document.body, values) => {
182
+ const state = store_default(values);
183
+ sprae(root, state);
184
+ const mo = new MutationObserver((mutations) => {
185
+ for (const m of mutations) {
186
+ for (const el of m.addedNodes) {
187
+ if (el.nodeType === 1 && el[_state] === void 0 && el.isConnected) {
188
+ for (const attr2 of el.attributes) {
189
+ if (attr2.name.startsWith(prefix)) {
190
+ root[_add](el);
191
+ break;
192
+ }
193
+ }
194
+ }
195
+ }
196
+ }
197
+ });
198
+ mo.observe(root, { childList: true, subtree: true });
199
+ return state;
200
+ };
201
+ parse = (expr, prepare, _fn) => {
202
+ if (_fn = parse.cache[expr]) return _fn;
203
+ let _expr = expr.trim() || "undefined";
204
+ if (prepare) _expr = prepare(_expr);
205
+ if (/^(if|let|const)\b/.test(_expr) || /;(?![^{]*})/.test(_expr)) ;
206
+ else _expr = `return ${_expr}`;
207
+ if (/\bawait\s/.test(_expr)) _expr = `return (async()=>{ ${_expr} })()`;
208
+ try {
209
+ _fn = compile(_expr);
210
+ Object.defineProperty(_fn, "name", { value: `\u2234 ${expr}` });
211
+ } catch (e) {
212
+ console.error(`\u2234 ${e}
213
+
214
+ ${prefix + currentDir}="${expr}"`);
215
+ }
216
+ return parse.cache[expr] = (state, cb, _out) => {
217
+ try {
218
+ let result = _fn?.(state);
219
+ if (cb) return result?.then ? result.then((v) => _out = cb(v)) : _out = cb(result), () => call(_out);
220
+ else return result;
221
+ } catch (e) {
222
+ console.error(`\u2234 ${e}
223
+
224
+ ${prefix + currentDir}="${expr}"`);
225
+ }
226
+ };
227
+ };
228
+ parse.cache = {};
229
+ applyMods = (fn, mods) => {
230
+ while (mods.length) {
231
+ let [name, ...params] = mods.pop().split("-");
232
+ fn = sx(modifier[name]?.(fn, ...params) ?? fn, fn);
233
+ }
234
+ return fn;
235
+ };
236
+ sx = (a, b) => {
237
+ if (a != b) for (let k in b) a[k] ?? (a[k] = b[k]);
238
+ return a;
239
+ };
240
+ frag = (tpl) => {
241
+ if (!tpl.nodeType) return tpl;
242
+ let content = tpl.content.cloneNode(true), attributes = [...tpl.attributes], ref = document.createTextNode(""), childNodes = (content.append(ref), [...content.childNodes]);
243
+ return {
244
+ // get parentNode() { return childNodes[0].parentNode },
245
+ childNodes,
246
+ content,
247
+ remove: () => content.append(...childNodes),
248
+ replaceWith(el) {
249
+ if (el === ref) return;
250
+ ref.before(el);
251
+ content.append(...childNodes);
252
+ },
253
+ attributes,
254
+ removeAttribute(name) {
255
+ attributes.splice(attributes.findIndex((a) => a.name === name), 1);
256
+ }
257
+ // setAttributeNode() { }
258
+ };
259
+ };
260
+ call = (v, arg) => typeof v === "function" ? v(arg) : v;
261
+ dashcase = (str) => str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match, i) => (i ? "-" : "") + match.toLowerCase());
262
+ attr = (el, name, v) => v == null || v === false ? el.removeAttribute(name) : el.setAttribute(name, v === true ? "" : v);
263
+ clsx = (c, _out = []) => !c ? "" : typeof c === "string" ? c : (Array.isArray(c) ? c.map(clsx) : Object.entries(c).reduce((s, [k, v]) => !v ? s : [...s, k], [])).join(" ");
264
+ throttle = (fn, schedule = queueMicrotask) => {
265
+ let _planned = 0;
266
+ const throttled = (e) => {
267
+ if (!_planned++) fn(e), schedule((_dirty = _planned > 1) => (_planned = 0, _dirty && throttled(e)));
268
+ };
269
+ return throttled;
270
+ };
271
+ debounce = (fn, schedule = queueMicrotask, _count = 0) => (arg, _planned = ++_count) => schedule(() => _planned == _count && fn(arg));
272
+ core_default = sprae;
273
+ }
274
+ });
275
+
276
+ // store.js
277
+ var _signals, _change, _set, sandbox, store, list, create, set, store_default;
278
+ var init_store = __esm({
279
+ "store.js"() {
280
+ init_core();
281
+ _signals = Symbol("signals");
282
+ _change = Symbol("change");
283
+ _set = Symbol("set");
284
+ sandbox = true;
285
+ store = (values, parent) => {
286
+ if (!values) return values;
287
+ if (values[Symbol.toStringTag]) return values;
288
+ if (values[_signals]) return values;
289
+ if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values;
290
+ let keyCount = Object.keys(values).length, signals = {};
291
+ let state = new Proxy(Object.assign(signals, {
292
+ [_change]: signal(keyCount),
293
+ [_signals]: signals
294
+ }), {
295
+ get: (_, k) => {
296
+ if (k in signals) return signals[k] ? signals[k].valueOf() : signals[k];
297
+ return parent ? parent[k] : globalThis[k];
298
+ },
299
+ set: (_, k, v, _s) => {
300
+ if (k in signals) return set(signals, k, v), 1;
301
+ sandbox = false;
302
+ if (parent && k in parent) {
303
+ parent[k] = v;
304
+ } else {
305
+ create(signals, k, v);
306
+ signals[_change].value = ++keyCount;
307
+ }
308
+ sandbox = true;
309
+ return 1;
310
+ },
311
+ // FIXME: try to avild calling Symbol.dispose here. Maybe _delete method?
312
+ deleteProperty: (_, k) => {
313
+ k in signals && (k[0] != "_" && signals[k]?.[Symbol.dispose]?.(), delete signals[k], signals[_change].value = --keyCount);
314
+ return 1;
315
+ },
316
+ // subscribe to length when spreading
317
+ ownKeys: () => (signals[_change].value, Reflect.ownKeys(signals)),
318
+ // sandbox prevents writing to global
319
+ has: (_, k) => {
320
+ if (k in signals) return true;
321
+ if (parent) return k in parent;
322
+ return sandbox;
323
+ }
324
+ });
325
+ const descs = Object.getOwnPropertyDescriptors(values);
326
+ for (let k in values) {
327
+ if (descs[k]?.get)
328
+ (signals[k] = computed(descs[k].get.bind(state)))[_set] = descs[k].set?.bind(state);
329
+ else create(signals, k, values[k]);
330
+ }
331
+ return state;
332
+ };
333
+ list = (values, parent = globalThis) => {
334
+ let signals = Array(values.length).fill(null), isMut = false, mut = (fn) => function() {
335
+ isMut = true;
336
+ return fn.apply(this, arguments);
337
+ }, length = signal(values.length), state = new Proxy(
338
+ Object.assign(signals, {
339
+ [_change]: length,
340
+ [_signals]: signals,
341
+ // patch mutators
342
+ push: mut(signals.push),
343
+ pop: mut(signals.pop),
344
+ shift: mut(signals.shift),
345
+ unshift: mut(signals.unshift),
346
+ splice: mut(signals.splice)
347
+ }),
348
+ {
349
+ get(_, k) {
350
+ if (k === "length") return isMut ? (isMut = false, signals.length) : length.value;
351
+ if (typeof k === "symbol" || isNaN(k)) return signals[k]?.valueOf() ?? parent[k];
352
+ return (signals[k] ?? (signals[k] = signal(store(values[k])))).valueOf();
353
+ },
354
+ set(_, k, v) {
355
+ if (k === "length") {
356
+ for (let i = v; i < signals.length; i++) delete state[i];
357
+ length.value = signals.length = v;
358
+ } else if (k >= signals.length) create(signals, k, v), state.length = +k + 1;
359
+ else signals[k] ? set(signals, k, v) : create(signals, k, v);
360
+ return 1;
361
+ },
362
+ // dispose notifies any signal deps, like :each
363
+ deleteProperty: (_, k) => (signals[k]?.[Symbol.dispose]?.(), delete signals[k], 1)
364
+ }
365
+ );
366
+ return state;
367
+ };
368
+ create = (signals, k, v) => signals[k] = k[0] == "_" || v?.peek ? v : signal(store(v));
369
+ set = (signals, k, v, _s, _v) => {
370
+ return k[0] === "_" ? signals[k] = v : v !== (_v = (_s = signals[k]).peek()) && // stashed _set for value with getter/setter
371
+ (_s[_set] ? _s[_set](v) : (
372
+ // patch array
373
+ Array.isArray(v) && Array.isArray(_v) ? (
374
+ // if we update plain array (stored in signal) - take over value instead
375
+ // since input value can be store, we have to make sure we don't subscribe to its length or values
376
+ // FIXME: generalize to objects
377
+ _change in _v ? untracked(() => batch(() => {
378
+ for (let i = 0; i < v.length; i++) _v[i] = v[i];
379
+ _v.length = v.length;
380
+ })) : _s.value = v
381
+ ) : (
382
+ // .x = y
383
+ _s.value = store(v)
384
+ )
385
+ ));
386
+ };
387
+ store_default = store;
388
+ }
389
+ });
390
+
391
+ // signal.js
392
+ var current, depth, batched, signal2, effect2, computed2, batch2, untracked2;
393
+ var init_signal = __esm({
394
+ "signal.js"() {
395
+ depth = 0;
396
+ signal2 = (v, _s, _obs = /* @__PURE__ */ new Set(), _v = () => _s.value) => _s = {
397
+ get value() {
398
+ current?.deps.push(_obs.add(current));
399
+ return v;
400
+ },
401
+ set value(val) {
402
+ if (val === v) return;
403
+ v = val;
404
+ for (let sub of _obs) batched ? batched.add(sub) : sub();
405
+ },
406
+ peek() {
407
+ return v;
408
+ },
409
+ toJSON: _v,
410
+ then: _v,
411
+ toString: _v,
412
+ valueOf: _v
413
+ };
414
+ effect2 = (fn, _teardown, _fx, _deps, __tmp) => (_fx = (prev) => {
415
+ __tmp = _teardown;
416
+ _teardown = null;
417
+ __tmp?.call?.();
418
+ prev = current, current = _fx;
419
+ if (depth++ > 10) throw "Cycle detected";
420
+ try {
421
+ _teardown = fn();
422
+ } finally {
423
+ current = prev;
424
+ depth--;
425
+ }
426
+ }, _deps = _fx.deps = [], _fx(), (dep) => {
427
+ _teardown?.call?.();
428
+ while (dep = _deps.pop()) dep.delete(_fx);
429
+ });
430
+ computed2 = (fn, _s = signal2(), _c, _e, _v = () => _c.value) => _c = {
431
+ get value() {
432
+ _e || (_e = effect2(() => _s.value = fn()));
433
+ return _s.value;
434
+ },
435
+ peek: _s.peek,
436
+ toJSON: _v,
437
+ then: _v,
438
+ toString: _v,
439
+ valueOf: _v
440
+ };
441
+ batch2 = (fn, _first = !batched) => {
442
+ batched ?? (batched = /* @__PURE__ */ new Set());
443
+ try {
444
+ fn();
445
+ } finally {
446
+ if (_first) {
447
+ for (const fx of batched) fx();
448
+ batched = null;
449
+ }
450
+ }
451
+ };
452
+ untracked2 = (fn, _prev, _v) => (_prev = current, current = null, _v = fn(), current = _prev, _v);
453
+ }
454
+ });
455
+
456
+ // directive/if.js
457
+ var if_default;
458
+ var init_if = __esm({
459
+ "directive/if.js"() {
460
+ init_core();
461
+ if_default = (el, state, _holder, _el, _match) => {
462
+ var _a;
463
+ if (!el._holder) {
464
+ el[_a = _state] ?? (el[_a] = null);
465
+ _el = el.content ? frag(el) : el;
466
+ el.replaceWith(_holder = document.createTextNode(""));
467
+ _el._holder = _holder._holder = _holder;
468
+ _holder._clauses = [_el._clause = [_el, false]];
469
+ _holder.update = throttle(() => {
470
+ let match = _holder._clauses.find(([, s]) => s);
471
+ if (match != _match) {
472
+ _match?.[0].remove();
473
+ _match?.[0][_off]?.();
474
+ if (_match = match) {
475
+ _holder.before(_match[0].content || _match[0]);
476
+ !_match[0][_state] ? (delete _match[0][_state], core_default(_match[0], state)) : _match[0][_on]?.();
477
+ }
478
+ }
479
+ });
480
+ } else core_default(_el = el, state);
481
+ return (value) => {
482
+ _el._clause[1] = value;
483
+ _el._holder.update();
484
+ };
485
+ };
486
+ }
487
+ });
488
+
489
+ // directive/else.js
490
+ var else_default;
491
+ var init_else = __esm({
492
+ "directive/else.js"() {
493
+ init_core();
494
+ else_default = (el, state, _el, _, _prev = el) => {
495
+ _el = el.content ? frag(el) : el;
496
+ while (_prev && !(_el._holder = _prev._holder)) _prev = _prev.previousSibling;
497
+ el.remove();
498
+ el[_state] = null;
499
+ _el._holder._clauses.push(_el._clause = [_el, true]);
500
+ return _el._holder.update;
501
+ };
502
+ }
503
+ });
504
+
505
+ // directive/text.js
506
+ var text_default;
507
+ var init_text = __esm({
508
+ "directive/text.js"() {
509
+ init_core();
510
+ text_default = (el) => (
511
+ // <template :text="a"/> or previously initialized template
512
+ (el.content && el.replaceWith(el = frag(el).childNodes[0]), (v) => (v = call(v, el.textContent), el.textContent = v == null ? "" : v))
513
+ );
514
+ }
515
+ });
516
+
517
+ // directive/class.js
518
+ var class_default;
519
+ var init_class = __esm({
520
+ "directive/class.js"() {
521
+ init_core();
522
+ class_default = (el, _cur, _new) => (_cur = /* @__PURE__ */ new Set(), (v) => {
523
+ _new = /* @__PURE__ */ new Set();
524
+ if (v) clsx(call(v, el.className)).split(" ").map((c) => c && _new.add(c));
525
+ for (let c of _cur) if (_new.has(c)) _new.delete(c);
526
+ else el.classList.remove(c);
527
+ for (let c of _cur = _new) el.classList.add(c);
528
+ });
529
+ }
530
+ });
531
+
532
+ // directive/style.js
533
+ var style_default;
534
+ var init_style = __esm({
535
+ "directive/style.js"() {
536
+ init_core();
537
+ style_default = (el, _static) => (_static = el.getAttribute("style"), (v) => {
538
+ v = call(v, el.style);
539
+ if (typeof v === "string") attr(el, "style", _static + "; " + v);
540
+ else {
541
+ if (_static) attr(el, "style", _static);
542
+ for (let k in v) k[0] == "-" ? el.style.setProperty(k, v[k]) : k[0] > "A" && (el.style[k] = v[k]);
543
+ }
544
+ });
545
+ }
546
+ });
547
+
548
+ // directive/fx.js
549
+ var fx_default;
550
+ var init_fx = __esm({
551
+ "directive/fx.js"() {
552
+ init_core();
553
+ fx_default = () => call;
554
+ }
555
+ });
556
+
557
+ // directive/value.js
558
+ var setter, value_default;
559
+ var init_value = __esm({
560
+ "directive/value.js"() {
561
+ init_core();
562
+ setter = (expr, _set2 = parse(`${expr}=__`)) => (target, value) => {
563
+ target.__ = value;
564
+ _set2(target), delete target.__;
565
+ };
566
+ value_default = (el, state, expr, name) => {
567
+ try {
568
+ const set2 = setter(expr);
569
+ const handleChange = el.type === "checkbox" ? () => set2(state, el.checked) : el.type === "select-multiple" ? () => set2(state, [...el.selectedOptions].map((o) => o.value)) : () => set2(state, el.selectedIndex < 0 ? null : el.value);
570
+ el.oninput = el.onchange = handleChange;
571
+ if (el.type?.startsWith("select")) {
572
+ new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });
573
+ core_default(el, state);
574
+ }
575
+ parse(expr)(state) ?? handleChange();
576
+ } catch {
577
+ }
578
+ return el.type === "text" || el.type === "" ? (value) => el.setAttribute("value", el.value = value == null ? "" : value) : el.tagName === "TEXTAREA" || el.type === "text" || el.type === "" ? (value, from, to) => (
579
+ // we retain selection in input
580
+ (from = el.selectionStart, to = el.selectionEnd, el.setAttribute("value", el.value = value == null ? "" : value), from && el.setSelectionRange(from, to))
581
+ ) : el.type === "checkbox" ? (value) => (el.checked = value, attr(el, "checked", value)) : el.type === "radio" ? (value) => el.value === value && (el.checked = value, attr(el, "checked", value)) : el.type === "select-one" ? (value) => {
582
+ for (let o of el.options)
583
+ o.value == value ? o.setAttribute("selected", "") : o.removeAttribute("selected");
584
+ el.value = value;
585
+ } : el.type === "select-multiple" ? (value) => {
586
+ for (let o of el.options) o.removeAttribute("selected");
587
+ for (let v of value) el.querySelector(`[value="${v}"]`).setAttribute("selected", "");
588
+ } : (value) => el.value = value;
589
+ };
590
+ }
591
+ });
592
+
593
+ // directive/ref.js
594
+ var ref_default;
595
+ var init_ref = __esm({
596
+ "directive/ref.js"() {
597
+ init_core();
598
+ ref_default = (el, state, expr, name, _prev, _set2) => {
599
+ if (typeof parse(expr)(state) == "function") return (v) => v(el);
600
+ Object.defineProperty(state, expr, { value: el, configurable: true });
601
+ };
602
+ }
603
+ });
604
+
605
+ // directive/scope.js
606
+ var scope_default;
607
+ var init_scope = __esm({
608
+ "directive/scope.js"() {
609
+ init_core();
610
+ scope_default = (el, rootState) => {
611
+ let subscope = el[_state] = store({}, rootState), init = false;
612
+ return (values) => {
613
+ values = call(values, subscope);
614
+ if (values !== subscope) {
615
+ for (let k in values) {
616
+ let v = typeof values[k] === "function" ? values[k].bind(subscope) : values[k];
617
+ if (k in subscope[_signals]) subscope[k] = v;
618
+ else subscope[_signals][k] = k[0] == "_" || v?.peek ? v : signal(store(v));
619
+ }
620
+ }
621
+ return !init && (init = true, delete el[_state], untracked(() => core_default(el, subscope)));
622
+ };
623
+ };
624
+ }
625
+ });
626
+
627
+ // directive/each.js
628
+ var each, each_default;
629
+ var init_each = __esm({
630
+ "directive/each.js"() {
631
+ init_core();
632
+ each = (tpl, state, expr) => {
633
+ let [itemVar, idxVar = "$"] = expr.split(/\bin\b/)[0].trim().replace(/\(|\)/g, "").split(/\s*,\s*/);
634
+ let holder = document.createTextNode("");
635
+ let cur2, keys2, items, prevl = 0;
636
+ let update = throttle(() => {
637
+ var _a, _b;
638
+ let i = 0, newItems = items, newl = newItems.length;
639
+ if (cur2 && !cur2[_change]) {
640
+ for (let s of cur2[_signals] || []) s[Symbol.dispose]();
641
+ cur2 = null, prevl = 0;
642
+ }
643
+ if (newl < prevl) cur2.length = newl;
644
+ else {
645
+ if (!cur2) cur2 = newItems;
646
+ else while (i < prevl) cur2[i] = newItems[i++];
647
+ for (; i < newl; i++) {
648
+ cur2[i] = newItems[i];
649
+ let idx = i, subscope = Object.create(state, {
650
+ [itemVar]: { get: () => cur2[idx] },
651
+ [idxVar]: { value: keys2 ? keys2[idx] : idx }
652
+ });
653
+ let el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
654
+ holder.before(el.content || el);
655
+ core_default(el, subscope);
656
+ let _prev = ((_b = cur2[_a = _signals] || (cur2[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose];
657
+ cur2[_signals][i][Symbol.dispose] = () => {
658
+ _prev?.(), el[Symbol.dispose]?.(), el.remove();
659
+ };
660
+ }
661
+ }
662
+ prevl = newl;
663
+ });
664
+ tpl.replaceWith(holder);
665
+ tpl[_state] = null;
666
+ return (value) => {
667
+ keys2 = null;
668
+ if (typeof value === "number") items = Array.from({ length: value }, (_, i) => i + 1);
669
+ else if (value?.constructor === Object) keys2 = Object.keys(value), items = Object.values(value);
670
+ else items = value || [];
671
+ return effect(() => {
672
+ items[_change]?.value;
673
+ update();
674
+ });
675
+ };
676
+ };
677
+ each.parse = (str) => str.split(/\bin\b/)[1].trim();
678
+ each_default = each;
679
+ }
680
+ });
681
+
682
+ // directive/default.js
683
+ var default_default;
684
+ var init_default = __esm({
685
+ "directive/default.js"() {
686
+ init_core();
687
+ default_default = (el, st, ex, name) => (v) => attr(el, name, call(v, el.getAttribute(name)));
688
+ }
689
+ });
690
+
691
+ // directive/spread.js
692
+ var spread_default;
693
+ var init_spread = __esm({
694
+ "directive/spread.js"() {
695
+ init_core();
696
+ spread_default = (target) => (value) => {
697
+ for (let key in value) attr(target, dashcase(key), value[key]);
698
+ };
699
+ }
700
+ });
701
+
702
+ // sprae.js
703
+ var sprae_exports = {};
704
+ __export(sprae_exports, {
705
+ batch: () => batch2,
706
+ computed: () => computed2,
707
+ default: () => sprae_default,
708
+ effect: () => effect2,
709
+ signal: () => signal2,
710
+ sprae: () => core_default,
711
+ start: () => start,
712
+ store: () => store_default,
713
+ untracked: () => untracked2,
714
+ use: () => use
715
+ });
716
+ var keys, sprae_default;
717
+ var init_sprae = __esm({
718
+ "sprae.js"() {
719
+ init_store();
720
+ init_signal();
721
+ init_core();
722
+ init_if();
723
+ init_else();
724
+ init_text();
725
+ init_class();
726
+ init_style();
727
+ init_fx();
728
+ init_value();
729
+ init_ref();
730
+ init_scope();
731
+ init_each();
732
+ init_default();
733
+ init_spread();
734
+ Object.assign(directive, {
735
+ // :x="x"
736
+ "*": default_default,
737
+ // FIXME
738
+ // 'on*': _on,
739
+ // :="{a,b,c}"
740
+ "": spread_default,
741
+ // :class="[a, b, c]"
742
+ class: class_default,
743
+ // :text="..."
744
+ text: text_default,
745
+ // :style="..."
746
+ style: style_default,
747
+ // :fx="..."
748
+ fx: fx_default,
749
+ // :value - 2 way binding like x-model
750
+ value: value_default,
751
+ // :ref="..."
752
+ ref: ref_default,
753
+ // :scope creates variables scope for a subtree
754
+ scope: scope_default,
755
+ if: if_default,
756
+ else: else_default,
757
+ // :each="v,k in src"
758
+ each: each_default
759
+ });
760
+ Object.assign(modifier, {
761
+ debounce: (fn, _how = 250, _schedule = _how === "tick" ? queueMicrotask : _how === "raf" ? requestAnimationFrame : _how === "idle" ? requestIdleCallback : (fn2) => setTimeout(fn2, _how), _count = 0) => debounce(fn, _schedule),
762
+ throttle: (fn, _how = 250, _schedule = _how === "tick" ? queueMicrotask : _how === "raf" ? requestAnimationFrame : (fn2) => setTimeout(fn2, _how)) => throttle(fn, _schedule),
763
+ once: (fn, _done, _fn) => Object.assign((e) => !_done && (_done = 1, fn(e)), { once: true }),
764
+ // event modifiers
765
+ // actions
766
+ prevent: (fn) => (e) => (e?.preventDefault(), fn(e)),
767
+ stop: (fn) => (e) => (e?.stopPropagation(), fn(e)),
768
+ immediate: (fn) => (e) => (e?.stopImmediatePropagation(), fn(e)),
769
+ // options
770
+ passive: (fn) => (fn.passive = true, fn),
771
+ capture: (fn) => (fn.capture = true, fn),
772
+ // target
773
+ window: (fn) => (fn.target = fn.target.ownerDocument.defaultView, fn),
774
+ document: (fn) => (fn.target = fn.target.ownerDocument, fn),
775
+ root: (fn) => (fn.target = fn.target.ownerDocument.documentElement, fn),
776
+ body: (fn) => (fn.target = fn.target.ownerDocument.body, fn),
777
+ parent: (fn) => (fn.target = fn.target.parentNode, fn),
778
+ // testers
779
+ self: (fn) => (e) => e.target === fn.target && fn(e),
780
+ outside: (fn) => (e, _target) => (_target = fn.target, !_target.contains(e.target) && e.target.isConnected && (_target.offsetWidth || _target.offsetHeight))
781
+ });
782
+ keys = {
783
+ ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
784
+ shift: (e) => e.shiftKey || e.key === "Shift",
785
+ alt: (e) => e.altKey || e.key === "Alt",
786
+ meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
787
+ arrow: (e) => e.key.startsWith("Arrow"),
788
+ enter: (e) => e.key === "Enter",
789
+ esc: (e) => e.key.startsWith("Esc"),
790
+ tab: (e) => e.key === "Tab",
791
+ space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
792
+ delete: (e) => e.key === "Delete" || e.key === "Backspace",
793
+ digit: (e) => /^\d$/.test(e.key),
794
+ letter: (e) => /^\p{L}$/gu.test(e.key),
795
+ char: (e) => /^\S$/.test(e.key)
796
+ };
797
+ for (let k in keys) modifier[k] = (fn, ...params) => (e) => keys[k](e) && params.every((k2) => keys[k2]?.(e) ?? e.key === k2) && fn(e);
798
+ use({
799
+ compile: (expr) => {
800
+ return core_default.constructor(`with (arguments[0]) { ${expr} }`);
801
+ },
802
+ // signals
803
+ signal: signal2,
804
+ effect: effect2,
805
+ computed: computed2,
806
+ batch: batch2,
807
+ untracked: untracked2
808
+ });
809
+ core_default.use = use;
810
+ core_default.store = store_default;
811
+ core_default.directive = directive;
812
+ core_default.modifier = modifier;
813
+ core_default.start = start;
814
+ sprae_default = core_default;
815
+ }
816
+ });
817
+
818
+ // <stdin>
819
+ var sprae2 = (init_sprae(), __toCommonJS(sprae_exports)).default;
820
+ module.exports = sprae2;
821
+ var cur = document.currentScript;
822
+ var prefix2 = cur.getAttribute("prefix") ?? cur.dataset.prefix ?? cur.dataset.spraePrefix;
823
+ var start2 = cur.getAttribute("start") ?? cur.dataset.start ?? cur.dataset.spraeStart;
824
+ if (prefix2) sprae2.use({ prefix: prefix2 });
825
+ if (start2 != null && start2 !== "false") (start2 && start2 !== "true" ? document.querySelectorAll(start2) : [document.body || document.documentElement]).forEach((el) => sprae2.start(el));
7
826
  ;if (typeof module.exports == "object" && typeof exports == "object") {
8
827
  var __cp = (to, from, except, desc) => {
9
828
  if ((from && typeof from === "object") || typeof from === "function") {