function g(t){let n=new Map;for(let e of t)n.set(e.id,_(e.id,e.value));return n}function _(t,n){let e=n,r=new Set,o={id:t,get value(){return e},set value(s){o.set(s)},set(s){Object.is(s,e)||(e=s,r.forEach(a=>a(e)))},update(s){let a=s(e);a!==void 0?o.set(a):r.forEach(i=>i(e))},subscribe(s){return r.add(s),()=>r.delete(s)}};return o}var M="RESUMA-DYN";function m(t,n){t.querySelectorAll(M.toLowerCase()).forEach(r=>{let o=r.getAttribute("data-r-signal");if(!o)return;let s=n.get(o);s&&s.subscribe(a=>{r.textContent=w(a)})})}function f(t,n){t.querySelectorAll("[data-r-bind]").forEach(r=>p(r,n)),A(t,n)}function A(t,n){let e=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT),r=e.currentNode;for(;r;)r instanceof HTMLElement&&p(r,n),r=e.nextNode()}function p(t,n){for(let e of Array.from(t.attributes)){let r=e.name;if(!r.startsWith("data-r-bind:"))continue;let o=r.slice(12),[s,a="{}"]=e.value.split("|"),i=n.get(s);if(!i)continue;let l=d=>{let c=a.replace("{}",w(d));t.setAttribute(o,c)};l(i.value),i.subscribe(l)}}function w(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);try{return JSON.stringify(t)}catch{return String(t)}}function h(){let t=window.__resuma;if(!t)return;let n=document.getElementById("resuma-root")??document.body;m(n,t.signals),f(n,t.signals)}var C="resuma-island";function b(t,n){t.querySelectorAll(C).forEach(r=>{let o=r.getAttribute("data-r-chunk");if(!o)return;let s=r.getAttribute("data-r-props")??"{}",a={};try{a=JSON.parse(s)}catch{}L(o,a,r,n)})}async function L(t,n,e,r){try{let o=await import(`/_resuma/island/${t}.js`);typeof o.resume=="function"&&o.resume(n,r,e)}catch(o){console.debug("[resuma] island chunk unavailable, staying static",t,o)}}var y=new Map;async function v(t,n){if(n){let i=y.get(n);return i||(i=E(n),y.set(n,i)),i}let[e,r]=t.split("#"),o=window.__resuma;if(e==="__page__"){let i=o.handlers[e]?.[r];if(!i)throw new Error(`[resuma] missing inline handler ${t}`);return E(i)}let s=o.loaded.get(e);s||(s=await import(`/_resuma/handler/${e}.js`),o.loaded.set(e,s));let a=s[r];if(!a)throw new Error(`[resuma] handler ${r} not found in chunk ${e}`);return a}function E(t){let n=t.trim(),r=n.startsWith("(")||n.startsWith("function")||n.startsWith("async")?`return (${t});`:`return (async (event, state, __resuma) => { ${t} });`;return new Function(r)()}var H="resuma-state",x="resuma-root",I="data-r-on:",P="data-r-cap:",$="data-r-inline:",u=()=>document.getElementById(x)??document.body;function F(){let t=document.getElementById(H);if(!t||!t.textContent)return{signals:[],handlers:{},islands:[],actions:[]};try{return JSON.parse(t.textContent)}catch(n){return console.error("[resuma] failed to parse state payload",n),{signals:[],handlers:{},islands:[],actions:[]}}}function k(){let t=F(),n=g(t.signals.map(o=>({id:typeof o.id=="string"?o.id:`s${o.id[0]}`,value:o.value}))),e={};for(let[o,s]of n)e[o]=s;let r={state:e,signals:n,handlers:t.handlers,contexts:t.contexts??{},loaded:new Map,action:X,refreshIsland:K,context:o=>r.contexts[o]};window.__resuma=r,m(u(),n),f(u(),n),b(u(),n),O(),W(),B(u()),G(u()),U(u()),J(t.visible_tasks??{},e)}var N=["click","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup","mousemove","mouseenter","mouseleave","pointerdown","pointerup","pointermove","touchstart","touchend","scroll","wheel","dragstart","dragend","drop","load"];function O(){for(let t of N)document.addEventListener(t,j,!0)}function D(t){let n=t.target;return n instanceof Element?n:n instanceof Text?n.parentElement:null}async function j(t){let n=D(t);if(!n)return;let e=I+t.type,r=P+t.type,o=$+t.type;for(;n&&n!==document.body;){n.getAttribute(`data-r-prevent:${t.type}`)!==null&&t.preventDefault(),n.getAttribute(`data-r-stop:${t.type}`)!==null&&t.stopPropagation();let i=n.getAttribute(e);if(i){let l=(n.getAttribute(r)??"").split(",").map(c=>c.trim()).filter(Boolean),d=n.getAttribute(o);try{let c=await v(i,d),S=q(l),R=window.__resuma;await c(t,S,R)}catch(c){console.error("[resuma] handler error",c)}return}n=n.parentElement}}function q(t){let n=window.__resuma;if(!t.length)return n.state;let e={};for(let r of t){let[o,s]=r.split(":"),a=s??o,i=n.signals.get(a);i&&(e[o]=i)}return Object.assign(Object.create(n.state),e)}function W(){document.addEventListener("submit",async t=>{if(!(t.target instanceof HTMLFormElement))return;let n=t.target;if(!n.getAttribute("data-r-submit"))return;t.preventDefault();let e=n.getAttribute("data-r-submit"),r=new FormData(n),o={};r.forEach((a,i)=>{o[i]=String(a)});let s=new URLSearchParams(o);try{let a=await fetch(n.action||`/_resuma/submit/${encodeURIComponent(e)}`,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded",accept:"application/json"},body:s.toString()}),i=await a.json();if(!a.ok||i.ok===!1)throw V(n,i.field_errors??{}),new Error(i.error??`submit ${e} failed`);T(n),console.info("[resuma] submit ok",i.value)}catch(a){console.error("[resuma] submit error",a)}},!0)}function V(t,n){T(t);for(let[e,r]of Object.entries(n)){let o=t.querySelector(`[name="${e}"]`);if(!o)continue;let s=document.createElement("span");s.className="resuma-field-error",s.setAttribute("data-r-field-error",e),s.textContent=r,o.insertAdjacentElement("afterend",s)}}function T(t){t.querySelectorAll("[data-r-field-error]").forEach(n=>n.remove())}function B(t){t.querySelectorAll("template[data-r-stream-chunk]").forEach(n=>{let e=n.getAttribute("data-r-stream-chunk");if(!e)return;let r=t.querySelector(`template[data-r-stream="${e}"]`);if(!r||!r.parentElement)return;let o=n.innerHTML,s=document.createRange().createContextualFragment(o);r.replaceWith(s),n.remove()})}function G(t){t.querySelectorAll("template[data-r-portal]").forEach(n=>{let e=n.getAttribute("data-r-portal");if(!e)return;let r=document.getElementById(e)??document.querySelector(`[data-r-portal-target="${e}"]`);if(!r)return;let o=document.createDocumentFragment();for(;n.content.firstChild;)o.appendChild(n.content.firstChild);r.appendChild(o),n.remove()})}function U(t){"startViewTransition"in document&&t.querySelectorAll("[data-r-vt]").forEach(n=>{n.addEventListener("click",e=>{let r=e.target?.closest("a[href]");if(!r||r.getAttribute("target")==="_blank")return;let o=r.getAttribute("href");if(!o||o.startsWith("#")||o.startsWith("javascript:"))return;e.preventDefault();let s=()=>{window.location.href=o};document.startViewTransition?.(s)})})}function J(t,n){let e=Object.entries(t);if(!e.length)return;let r=(o,s)=>{try{let a=new Function("state","__resuma",`return ${s}`);Promise.resolve(a(n,window.__resuma))}catch(a){console.error("[resuma] visible task",o,a)}};if("IntersectionObserver"in window){let o=new IntersectionObserver((s,a)=>{for(let i of s){if(!i.isIntersecting)continue;let l=i.target.dataset.rVisibleTask,d=l?t[l]:void 0;d&&r(l,d),a.unobserve(i.target)}},{rootMargin:"50px"});for(let[s]of e){let a=document.createElement("span");a.hidden=!0,a.dataset.rVisibleTask=s,u().appendChild(a),o.observe(a)}}else for(let[o,s]of e)r(o,s)}async function X(t,n){let e=await fetch(`/_resuma/action/${encodeURIComponent(t)}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({args:n})});if(!e.ok)throw new Error(`[resuma] action ${t} failed: ${e.status}`);let r=await e.json();if(r.ok===!1)throw new Error(r.error??"action failed");return r.value}async function K(t){let n=await fetch(`/_resuma/island/${encodeURIComponent(t)}`);if(!n.ok)return;let e=await n.text(),r=document.querySelector(`resuma-island[data-r-instance="${t}"]`);r&&(r.outerHTML=e),h()}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",k,{once:!0}):k();
//# sourceMappingURL=runtime.js.map