sprae 12.2.0 → 12.2.2

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,823 @@
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.1",
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("init");
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 = [];
116
+ el[_on] = () => !offs && (offs = fx.map((fn) => fn()));
117
+ el[_off] = () => (offs?.map((off) => off()), offs = null);
118
+ el[_dispose] || (el[_dispose] = () => (el[_off](), el[_off] = el[_on] = el[_dispose] = el[_add] = el[_state] = null));
119
+ const add = el[_add] = (el2) => {
120
+ let _attrs = el2.attributes, fn;
121
+ if (_attrs) for (let i = 0; i < _attrs.length; ) {
122
+ let { name, value } = _attrs[i];
123
+ if (name.startsWith(prefix)) {
124
+ el2.removeAttribute(name);
125
+ if (fn = initDirective(el2, name, value, state)) fx.push(fn), offs.push(fn());
126
+ if (_state in el2) return;
127
+ } else i++;
128
+ }
129
+ for (let child of [...el2.childNodes]) child.nodeType == 1 && add(child);
130
+ };
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 && root.contains(el)) {
188
+ root[_add](el);
189
+ }
190
+ }
191
+ }
192
+ });
193
+ mo.observe(root, { childList: true, subtree: true });
194
+ return state;
195
+ };
196
+ parse = (expr, prepare, _fn) => {
197
+ if (_fn = parse.cache[expr]) return _fn;
198
+ let _expr = expr.trim() || "undefined";
199
+ if (prepare) _expr = prepare(_expr);
200
+ if (/^(if|let|const)\b/.test(_expr) || /;(?![^{]*})/.test(_expr)) ;
201
+ else _expr = `return ${_expr}`;
202
+ if (/\bawait\s/.test(_expr)) _expr = `return (async()=>{ ${_expr} })()`;
203
+ try {
204
+ _fn = compile(_expr);
205
+ Object.defineProperty(_fn, "name", { value: `\u2234 ${expr}` });
206
+ } catch (e) {
207
+ console.error(`\u2234 ${e}
208
+
209
+ ${prefix + currentDir}="${expr}"`);
210
+ }
211
+ return parse.cache[expr] = (state, cb, _out) => {
212
+ try {
213
+ let result = _fn?.(state);
214
+ if (cb) return result?.then ? result.then((v) => _out = cb(v)) : _out = cb(result), () => call(_out);
215
+ else return result;
216
+ } catch (e) {
217
+ console.error(`\u2234 ${e}
218
+
219
+ ${prefix + currentDir}="${expr}"`);
220
+ }
221
+ };
222
+ };
223
+ parse.cache = {};
224
+ applyMods = (fn, mods) => {
225
+ while (mods.length) {
226
+ let [name, ...params] = mods.pop().split("-");
227
+ fn = sx(modifier[name]?.(fn, ...params) ?? fn, fn);
228
+ }
229
+ return fn;
230
+ };
231
+ sx = (a, b) => {
232
+ if (a != b) for (let k in b) a[k] ?? (a[k] = b[k]);
233
+ return a;
234
+ };
235
+ frag = (tpl) => {
236
+ if (!tpl.nodeType) return tpl;
237
+ let content = tpl.content.cloneNode(true), attributes = [...tpl.attributes], ref = document.createTextNode(""), childNodes = (content.append(ref), [...content.childNodes]);
238
+ return {
239
+ // get parentNode() { return childNodes[0].parentNode },
240
+ childNodes,
241
+ content,
242
+ remove: () => content.append(...childNodes),
243
+ replaceWith(el) {
244
+ if (el === ref) return;
245
+ ref.before(el);
246
+ content.append(...childNodes);
247
+ },
248
+ attributes,
249
+ removeAttribute(name) {
250
+ attributes.splice(attributes.findIndex((a) => a.name === name), 1);
251
+ }
252
+ // setAttributeNode() { }
253
+ };
254
+ };
255
+ call = (v, arg) => typeof v === "function" ? v(arg) : v;
256
+ dashcase = (str) => str.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g, (match, i) => (i ? "-" : "") + match.toLowerCase());
257
+ attr = (el, name, v) => v == null || v === false ? el.removeAttribute(name) : el.setAttribute(name, v === true ? "" : v);
258
+ 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(" ");
259
+ throttle = (fn, schedule = queueMicrotask) => {
260
+ let _planned = 0;
261
+ const throttled = (e) => {
262
+ if (!_planned++) fn(e), schedule((_dirty = _planned > 1) => (_planned = 0, _dirty && throttled(e)));
263
+ };
264
+ return throttled;
265
+ };
266
+ debounce = (fn, schedule = queueMicrotask, _count = 0) => (arg, _planned = ++_count) => schedule(() => _planned == _count && fn(arg));
267
+ core_default = sprae;
268
+ }
269
+ });
270
+
271
+ // store.js
272
+ var _signals, _change, _set, sandbox, store, list, create, set, store_default;
273
+ var init_store = __esm({
274
+ "store.js"() {
275
+ init_core();
276
+ _signals = Symbol("signals");
277
+ _change = Symbol("change");
278
+ _set = Symbol("set");
279
+ sandbox = true;
280
+ store = (values, parent) => {
281
+ if (!values) return values;
282
+ if (values[Symbol.toStringTag]) return values;
283
+ if (values[_signals]) return values;
284
+ if (values.constructor !== Object) return Array.isArray(values) ? list(values) : values;
285
+ let keyCount = Object.keys(values).length, signals = {};
286
+ let state = new Proxy(Object.assign(signals, {
287
+ [_change]: signal(keyCount),
288
+ [_signals]: signals
289
+ }), {
290
+ get: (_, k) => {
291
+ if (k in signals) return signals[k] ? signals[k].valueOf() : signals[k];
292
+ return parent ? parent[k] : globalThis[k];
293
+ },
294
+ set: (_, k, v, _s) => {
295
+ if (k in signals) return set(signals, k, v), 1;
296
+ sandbox = false;
297
+ if (parent && k in parent) {
298
+ parent[k] = v;
299
+ } else {
300
+ create(signals, k, v);
301
+ signals[_change].value = ++keyCount;
302
+ }
303
+ sandbox = true;
304
+ return 1;
305
+ },
306
+ // FIXME: try to avild calling Symbol.dispose here. Maybe _delete method?
307
+ deleteProperty: (_, k) => {
308
+ k in signals && (k[0] != "_" && signals[k]?.[Symbol.dispose]?.(), delete signals[k], signals[_change].value = --keyCount);
309
+ return 1;
310
+ },
311
+ // subscribe to length when spreading
312
+ ownKeys: () => (signals[_change].value, Reflect.ownKeys(signals)),
313
+ // sandbox prevents writing to global
314
+ has: (_, k) => {
315
+ if (k in signals) return true;
316
+ if (parent) return k in parent;
317
+ return sandbox;
318
+ }
319
+ });
320
+ const descs = Object.getOwnPropertyDescriptors(values);
321
+ for (let k in values) {
322
+ if (descs[k]?.get)
323
+ (signals[k] = computed(descs[k].get.bind(state)))[_set] = descs[k].set?.bind(state);
324
+ else create(signals, k, values[k]);
325
+ }
326
+ return state;
327
+ };
328
+ list = (values, parent = globalThis) => {
329
+ let signals = Array(values.length).fill(null), isMut = false, mut = (fn) => function() {
330
+ isMut = true;
331
+ return fn.apply(this, arguments);
332
+ }, length = signal(values.length), state = new Proxy(
333
+ Object.assign(signals, {
334
+ [_change]: length,
335
+ [_signals]: signals,
336
+ // patch mutators
337
+ push: mut(signals.push),
338
+ pop: mut(signals.pop),
339
+ shift: mut(signals.shift),
340
+ unshift: mut(signals.unshift),
341
+ splice: mut(signals.splice)
342
+ }),
343
+ {
344
+ get(_, k) {
345
+ if (k === "length") return isMut ? (isMut = false, signals.length) : length.value;
346
+ if (typeof k === "symbol" || isNaN(k)) return signals[k]?.valueOf() ?? parent[k];
347
+ return (signals[k] ?? (signals[k] = signal(store(values[k])))).valueOf();
348
+ },
349
+ set(_, k, v) {
350
+ if (k === "length") {
351
+ for (let i = v; i < signals.length; i++) delete state[i];
352
+ length.value = signals.length = v;
353
+ } else if (k >= signals.length) create(signals, k, v), state.length = +k + 1;
354
+ else signals[k] ? set(signals, k, v) : create(signals, k, v);
355
+ return 1;
356
+ },
357
+ // dispose notifies any signal deps, like :each
358
+ deleteProperty: (_, k) => (signals[k]?.[Symbol.dispose]?.(), delete signals[k], 1)
359
+ }
360
+ );
361
+ return state;
362
+ };
363
+ create = (signals, k, v) => signals[k] = k[0] == "_" || v?.peek ? v : signal(store(v));
364
+ set = (signals, k, v, _s, _v) => {
365
+ return k[0] === "_" ? signals[k] = v : v !== (_v = (_s = signals[k]).peek()) && // stashed _set for value with getter/setter
366
+ (_s[_set] ? _s[_set](v) : (
367
+ // patch array
368
+ Array.isArray(v) && Array.isArray(_v) ? (
369
+ // if we update plain array (stored in signal) - take over value instead
370
+ // since input value can be store, we have to make sure we don't subscribe to its length or values
371
+ // FIXME: generalize to objects
372
+ _change in _v ? untracked(() => batch(() => {
373
+ for (let i = 0; i < v.length; i++) _v[i] = v[i];
374
+ _v.length = v.length;
375
+ })) : _s.value = v
376
+ ) : (
377
+ // .x = y
378
+ _s.value = store(v)
379
+ )
380
+ ));
381
+ };
382
+ store_default = store;
383
+ }
384
+ });
385
+
386
+ // signal.js
387
+ var current, depth, batched, signal2, effect2, computed2, batch2, untracked2;
388
+ var init_signal = __esm({
389
+ "signal.js"() {
390
+ depth = 0;
391
+ signal2 = (v, _s, _obs = /* @__PURE__ */ new Set(), _v = () => _s.value) => _s = {
392
+ get value() {
393
+ current?.deps.push(_obs.add(current));
394
+ return v;
395
+ },
396
+ set value(val) {
397
+ if (val === v) return;
398
+ v = val;
399
+ for (let sub of _obs) batched ? batched.add(sub) : sub();
400
+ },
401
+ peek() {
402
+ return v;
403
+ },
404
+ toJSON: _v,
405
+ then: _v,
406
+ toString: _v,
407
+ valueOf: _v
408
+ };
409
+ effect2 = (fn, _teardown, _fx, _deps, __tmp) => (_fx = (prev) => {
410
+ __tmp = _teardown;
411
+ _teardown = null;
412
+ __tmp?.call?.();
413
+ prev = current, current = _fx;
414
+ if (depth++ > 10) throw "Cycle detected";
415
+ try {
416
+ _teardown = fn();
417
+ } finally {
418
+ current = prev;
419
+ depth--;
420
+ }
421
+ }, _deps = _fx.deps = [], _fx(), (dep) => {
422
+ _teardown?.call?.();
423
+ while (dep = _deps.pop()) dep.delete(_fx);
424
+ });
425
+ computed2 = (fn, _s = signal2(), _c, _e, _v = () => _c.value) => _c = {
426
+ get value() {
427
+ _e || (_e = effect2(() => _s.value = fn()));
428
+ return _s.value;
429
+ },
430
+ peek: _s.peek,
431
+ toJSON: _v,
432
+ then: _v,
433
+ toString: _v,
434
+ valueOf: _v
435
+ };
436
+ batch2 = (fn, _first = !batched) => {
437
+ batched ?? (batched = /* @__PURE__ */ new Set());
438
+ try {
439
+ fn();
440
+ } finally {
441
+ if (_first) {
442
+ for (const fx of batched) fx();
443
+ batched = null;
444
+ }
445
+ }
446
+ };
447
+ untracked2 = (fn, _prev, _v) => (_prev = current, current = null, _v = fn(), current = _prev, _v);
448
+ }
449
+ });
450
+
451
+ // directive/if.js
452
+ var if_default;
453
+ var init_if = __esm({
454
+ "directive/if.js"() {
455
+ init_core();
456
+ if_default = (el, state, _holder, _el, _match) => {
457
+ var _a;
458
+ if (!el._holder) {
459
+ el[_a = _state] ?? (el[_a] = null);
460
+ _el = el.content ? frag(el) : el;
461
+ el.replaceWith(_holder = document.createTextNode(""));
462
+ _el._holder = _holder._holder = _holder;
463
+ _holder._clauses = [_el._clause = [_el, false]];
464
+ _holder.update = throttle(() => {
465
+ let match = _holder._clauses.find(([, s]) => s);
466
+ if (match != _match) {
467
+ _match?.[0].remove();
468
+ _match?.[0][_off]?.();
469
+ if (_match = match) {
470
+ _holder.before(_match[0].content || _match[0]);
471
+ !_match[0][_state] ? (delete _match[0][_state], core_default(_match[0], state)) : _match[0][_on]?.();
472
+ }
473
+ }
474
+ });
475
+ } else core_default(_el = el, state);
476
+ return (value) => {
477
+ _el._clause[1] = value;
478
+ _el._holder.update();
479
+ };
480
+ };
481
+ }
482
+ });
483
+
484
+ // directive/else.js
485
+ var else_default;
486
+ var init_else = __esm({
487
+ "directive/else.js"() {
488
+ init_core();
489
+ else_default = (el, state, _el, _, _prev = el) => {
490
+ _el = el.content ? frag(el) : el;
491
+ while (_prev && !(_el._holder = _prev._holder)) _prev = _prev.previousSibling;
492
+ el.remove();
493
+ el[_state] = null;
494
+ _el._holder._clauses.push(_el._clause = [_el, true]);
495
+ return _el._holder.update;
496
+ };
497
+ }
498
+ });
499
+
500
+ // directive/text.js
501
+ var text_default;
502
+ var init_text = __esm({
503
+ "directive/text.js"() {
504
+ init_core();
505
+ text_default = (el) => (
506
+ // <template :text="a"/> or previously initialized template
507
+ (el.content && el.replaceWith(el = frag(el).childNodes[0]), (v) => (v = call(v, el.textContent), el.textContent = v == null ? "" : v))
508
+ );
509
+ }
510
+ });
511
+
512
+ // directive/class.js
513
+ var class_default;
514
+ var init_class = __esm({
515
+ "directive/class.js"() {
516
+ init_core();
517
+ class_default = (el, _cur, _new) => (_cur = /* @__PURE__ */ new Set(), (v) => {
518
+ _new = /* @__PURE__ */ new Set();
519
+ if (v) clsx(call(v, el.className)).split(" ").map((c) => c && _new.add(c));
520
+ for (let c of _cur) if (_new.has(c)) _new.delete(c);
521
+ else el.classList.remove(c);
522
+ for (let c of _cur = _new) el.classList.add(c);
523
+ });
524
+ }
525
+ });
526
+
527
+ // directive/style.js
528
+ var style_default;
529
+ var init_style = __esm({
530
+ "directive/style.js"() {
531
+ init_core();
532
+ style_default = (el, _static) => (_static = el.getAttribute("style"), (v) => {
533
+ v = call(v, el.style);
534
+ if (typeof v === "string") attr(el, "style", _static + "; " + v);
535
+ else {
536
+ if (_static) attr(el, "style", _static);
537
+ for (let k in v) k[0] == "-" ? el.style.setProperty(k, v[k]) : k[0] > "A" && (el.style[k] = v[k]);
538
+ }
539
+ });
540
+ }
541
+ });
542
+
543
+ // directive/fx.js
544
+ var fx_default;
545
+ var init_fx = __esm({
546
+ "directive/fx.js"() {
547
+ init_core();
548
+ fx_default = () => call;
549
+ }
550
+ });
551
+
552
+ // directive/value.js
553
+ var setter, value_default;
554
+ var init_value = __esm({
555
+ "directive/value.js"() {
556
+ init_core();
557
+ setter = (expr, _set2 = parse(`${expr}=__`)) => (target, value) => {
558
+ target.__ = value;
559
+ _set2(target), delete target.__;
560
+ };
561
+ value_default = (el, state, expr, name) => {
562
+ try {
563
+ const set2 = setter(expr);
564
+ 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);
565
+ el.oninput = el.onchange = handleChange;
566
+ if (el.type?.startsWith("select")) {
567
+ new MutationObserver(handleChange).observe(el, { childList: true, subtree: true, attributes: true });
568
+ core_default(el, state);
569
+ }
570
+ parse(expr)(state) ?? handleChange();
571
+ } catch {
572
+ }
573
+ 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) => (
574
+ // we retain selection in input
575
+ (from = el.selectionStart, to = el.selectionEnd, el.setAttribute("value", el.value = value == null ? "" : value), from && el.setSelectionRange(from, to))
576
+ ) : 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) => {
577
+ for (let o of el.options)
578
+ o.value == value ? o.setAttribute("selected", "") : o.removeAttribute("selected");
579
+ el.value = value;
580
+ } : el.type === "select-multiple" ? (value) => {
581
+ for (let o of el.options) o.removeAttribute("selected");
582
+ for (let v of value) el.querySelector(`[value="${v}"]`).setAttribute("selected", "");
583
+ } : (value) => el.value = value;
584
+ };
585
+ }
586
+ });
587
+
588
+ // directive/ref.js
589
+ var ref_default;
590
+ var init_ref = __esm({
591
+ "directive/ref.js"() {
592
+ init_core();
593
+ ref_default = (el, state, expr, name, _prev, _set2) => {
594
+ if (typeof parse(expr)(state) == "function") return (v) => v(el);
595
+ Object.defineProperty(state, expr, { value: el, configurable: true });
596
+ };
597
+ }
598
+ });
599
+
600
+ // directive/scope.js
601
+ var scope_default;
602
+ var init_scope = __esm({
603
+ "directive/scope.js"() {
604
+ init_core();
605
+ scope_default = (el, rootState) => {
606
+ let subscope = el[_state] = store({}, rootState), init = false;
607
+ return (values) => {
608
+ values = call(values, subscope);
609
+ if (values !== subscope) {
610
+ for (let k in values) {
611
+ let v = typeof values[k] === "function" ? values[k].bind(subscope) : values[k];
612
+ if (k in subscope[_signals]) subscope[k] = v;
613
+ else subscope[_signals][k] = k[0] == "_" || v?.peek ? v : signal(store(v));
614
+ }
615
+ }
616
+ return !init && (init = true, delete el[_state], untracked(() => core_default(el, subscope)));
617
+ };
618
+ };
619
+ }
620
+ });
621
+
622
+ // directive/each.js
623
+ var each, each_default;
624
+ var init_each = __esm({
625
+ "directive/each.js"() {
626
+ init_core();
627
+ each = (tpl, state, expr) => {
628
+ let [itemVar, idxVar = "$"] = expr.split(/\bin\b/)[0].trim().replace(/\(|\)/g, "").split(/\s*,\s*/);
629
+ let holder = document.createTextNode("");
630
+ let cur2, keys2, items, prevl = 0;
631
+ let update = throttle(() => {
632
+ var _a, _b;
633
+ let i = 0, newItems = items, newl = newItems.length;
634
+ if (cur2 && !cur2[_change]) {
635
+ for (let s of cur2[_signals] || []) s[Symbol.dispose]();
636
+ cur2 = null, prevl = 0;
637
+ }
638
+ if (newl < prevl) cur2.length = newl;
639
+ else {
640
+ if (!cur2) cur2 = newItems;
641
+ else while (i < prevl) cur2[i] = newItems[i++];
642
+ for (; i < newl; i++) {
643
+ cur2[i] = newItems[i];
644
+ let idx = i, subscope = Object.create(state, {
645
+ [itemVar]: { get: () => cur2[idx] },
646
+ [idxVar]: { value: keys2 ? keys2[idx] : idx }
647
+ });
648
+ let el = tpl.content ? frag(tpl) : tpl.cloneNode(true);
649
+ holder.before(el.content || el);
650
+ core_default(el, subscope);
651
+ let _prev = ((_b = cur2[_a = _signals] || (cur2[_a] = []))[i] || (_b[i] = {}))[Symbol.dispose];
652
+ cur2[_signals][i][Symbol.dispose] = () => {
653
+ _prev?.(), el[Symbol.dispose]?.(), el.remove();
654
+ };
655
+ }
656
+ }
657
+ prevl = newl;
658
+ });
659
+ tpl.replaceWith(holder);
660
+ tpl[_state] = null;
661
+ return (value) => {
662
+ keys2 = null;
663
+ if (typeof value === "number") items = Array.from({ length: value }, (_, i) => i + 1);
664
+ else if (value?.constructor === Object) keys2 = Object.keys(value), items = Object.values(value);
665
+ else items = value || [];
666
+ return effect(() => {
667
+ items[_change]?.value;
668
+ update();
669
+ });
670
+ };
671
+ };
672
+ each.parse = (str) => str.split(/\bin\b/)[1].trim();
673
+ each_default = each;
674
+ }
675
+ });
676
+
677
+ // directive/default.js
678
+ var default_default;
679
+ var init_default = __esm({
680
+ "directive/default.js"() {
681
+ init_core();
682
+ default_default = (el, st, ex, name) => (v) => attr(el, name, call(v, el.getAttribute(name)));
683
+ }
684
+ });
685
+
686
+ // directive/spread.js
687
+ var spread_default;
688
+ var init_spread = __esm({
689
+ "directive/spread.js"() {
690
+ init_core();
691
+ spread_default = (target) => (value) => {
692
+ for (let key in value) attr(target, dashcase(key), value[key]);
693
+ };
694
+ }
695
+ });
696
+
697
+ // sprae.js
698
+ var sprae_exports = {};
699
+ __export(sprae_exports, {
700
+ batch: () => batch2,
701
+ computed: () => computed2,
702
+ default: () => sprae_default,
703
+ effect: () => effect2,
704
+ signal: () => signal2,
705
+ sprae: () => core_default,
706
+ start: () => start,
707
+ store: () => store_default,
708
+ untracked: () => untracked2,
709
+ use: () => use
710
+ });
711
+ var keys, sprae_default;
712
+ var init_sprae = __esm({
713
+ "sprae.js"() {
714
+ init_store();
715
+ init_signal();
716
+ init_core();
717
+ init_if();
718
+ init_else();
719
+ init_text();
720
+ init_class();
721
+ init_style();
722
+ init_fx();
723
+ init_value();
724
+ init_ref();
725
+ init_scope();
726
+ init_each();
727
+ init_default();
728
+ init_spread();
729
+ Object.assign(directive, {
730
+ // :x="x"
731
+ "*": default_default,
732
+ // FIXME
733
+ // 'on*': _on,
734
+ // :="{a,b,c}"
735
+ "": spread_default,
736
+ // :class="[a, b, c]"
737
+ class: class_default,
738
+ // :text="..."
739
+ text: text_default,
740
+ // :style="..."
741
+ style: style_default,
742
+ // :fx="..."
743
+ fx: fx_default,
744
+ // :value - 2 way binding like x-model
745
+ value: value_default,
746
+ // :ref="..."
747
+ ref: ref_default,
748
+ // :scope creates variables scope for a subtree
749
+ scope: scope_default,
750
+ if: if_default,
751
+ else: else_default,
752
+ // :each="v,k in src"
753
+ each: each_default
754
+ });
755
+ Object.assign(modifier, {
756
+ debounce: (fn, _how = 250, _schedule = _how === "tick" ? queueMicrotask : _how === "raf" ? requestAnimationFrame : _how === "idle" ? requestIdleCallback : (fn2) => setTimeout(fn2, _how), _count = 0) => debounce(fn, _schedule),
757
+ throttle: (fn, _how = 250, _schedule = _how === "tick" ? queueMicrotask : _how === "raf" ? requestAnimationFrame : (fn2) => setTimeout(fn2, _how)) => throttle(fn, _schedule),
758
+ once: (fn, _done, _fn) => Object.assign((e) => !_done && (_done = 1, fn(e)), { once: true }),
759
+ // event modifiers
760
+ // actions
761
+ prevent: (fn) => (e) => (e?.preventDefault(), fn(e)),
762
+ stop: (fn) => (e) => (e?.stopPropagation(), fn(e)),
763
+ immediate: (fn) => (e) => (e?.stopImmediatePropagation(), fn(e)),
764
+ // options
765
+ passive: (fn) => (fn.passive = true, fn),
766
+ capture: (fn) => (fn.capture = true, fn),
767
+ // target
768
+ window: (fn) => (fn.target = fn.target.ownerDocument.defaultView, fn),
769
+ document: (fn) => (fn.target = fn.target.ownerDocument, fn),
770
+ root: (fn) => (fn.target = fn.target.ownerDocument.documentElement, fn),
771
+ body: (fn) => (fn.target = fn.target.ownerDocument.body, fn),
772
+ parent: (fn) => (fn.target = fn.target.parentNode, fn),
773
+ // testers
774
+ self: (fn) => (e) => e.target === fn.target && fn(e),
775
+ outside: (fn) => (e, _target) => (_target = fn.target, !_target.contains(e.target) && e.target.isConnected && (_target.offsetWidth || _target.offsetHeight))
776
+ });
777
+ keys = {
778
+ ctrl: (e) => e.ctrlKey || e.key === "Control" || e.key === "Ctrl",
779
+ shift: (e) => e.shiftKey || e.key === "Shift",
780
+ alt: (e) => e.altKey || e.key === "Alt",
781
+ meta: (e) => e.metaKey || e.key === "Meta" || e.key === "Command",
782
+ arrow: (e) => e.key.startsWith("Arrow"),
783
+ enter: (e) => e.key === "Enter",
784
+ esc: (e) => e.key.startsWith("Esc"),
785
+ tab: (e) => e.key === "Tab",
786
+ space: (e) => e.key === "\xA0" || e.key === "Space" || e.key === " ",
787
+ delete: (e) => e.key === "Delete" || e.key === "Backspace",
788
+ digit: (e) => /^\d$/.test(e.key),
789
+ letter: (e) => /^\p{L}$/gu.test(e.key),
790
+ char: (e) => /^\S$/.test(e.key)
791
+ };
792
+ for (let k in keys) modifier[k] = (fn, ...params) => (e) => keys[k](e) && params.every((k2) => keys[k2]?.(e) ?? e.key === k2) && fn(e);
793
+ use({
794
+ compile: (expr) => {
795
+ return core_default.constructor(`with (arguments[0]) { ${expr} }`);
796
+ },
797
+ // signals
798
+ signal: signal2,
799
+ effect: effect2,
800
+ computed: computed2,
801
+ batch: batch2,
802
+ untracked: untracked2
803
+ });
804
+ core_default.use = use;
805
+ core_default.store = store_default;
806
+ core_default.directive = directive;
807
+ core_default.modifier = modifier;
808
+ core_default.start = start;
809
+ sprae_default = core_default;
810
+ }
811
+ });
812
+
813
+ // <stdin>
814
+ var sprae2 = (init_sprae(), __toCommonJS(sprae_exports)).default;
815
+ module.exports = sprae2;
816
+ var cur = document.currentScript;
817
+ var prefix2 = cur.getAttribute("prefix") ?? cur.dataset.prefix ?? cur.dataset.spraePrefix;
818
+ var start2 = cur.getAttribute("start") ?? cur.dataset.start ?? cur.dataset.spraeStart;
819
+ if (prefix2) sprae2.use({ prefix: prefix2 });
820
+ if (start2 != null && start2 !== "false") (start2 && start2 !== "true" ? document.querySelectorAll(start2) : [document.body || document.documentElement]).forEach((el) => sprae2.start(el));
7
821
  ;if (typeof module.exports == "object" && typeof exports == "object") {
8
822
  var __cp = (to, from, except, desc) => {
9
823
  if ((from && typeof from === "object") || typeof from === "function") {